3.2 Ubica los puntos en gráfica 2D o 3D

Se grafica la ubicación de los puntos usando las coordenadas este, norte y altura registradas con el GPS. Las gráficas se pueden realizar en 2D y en 3D, lo que ofrece una vista de la ubicación general de los puntos respecto a los gateways.

La vista en 2d es semejante a la que se encuentra en GoogleEarth

Instrucciones en Python

# Datos desde GPS archivo.csv
# Graficas de coordenadas 2D o 3D
# Girni 2020-10-07 edelros@espol.edu.ec
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animation

# INGRESO
# Archivo procesado con distancias
arch_gpsrsm = 'Coordenadas/coord_puntos.csv'
arch_rotacion = 'Coordenadas/rotando3D.gif'

# Parametros de gráfica
alturaantena = 8
tipograf = '3D' # '2D','3D'
etiquetar = ['Gw03','LOS08','CD01','CD11','CAG1','MA10']
grupo   = ['LOS','Ref','M','C', ]
colores = ['grey','magenta','green','brown',]

# PROCEDIMIENTO
# leer coordenadas
ubica = pd.read_csv(arch_gpsrsm, index_col='punto')
ubica = pd.DataFrame(ubica)
n = len(ubica)

# colores y alturas
ubica['color'] = 'Red'
for unpunto in ubica.index:
    # revisa grupo
    for i in range(0,len(grupo),1):
        if unpunto.startswith(grupo[i]):
            ubica.at[unpunto,'color'] = colores[i]
    if unpunto.startswith('Gw'):
        ubica.at[unpunto,'altitud'] = ubica.at[unpunto,'altitud']+alturaantena
print (ubica['color'])
    
# SALIDA
print(ubica.head())

# Grafica 2D --------------------------
if tipograf == '2D':
    figura, grafica = plt.subplots()
    for unpunto in ubica.index:
        unalon = ubica['utm_este'][unpunto]
        unalat = ubica['utm_norte'][unpunto]
        unaalt = ubica['altitud'][unpunto]
        uncolor = ubica['color'][unpunto] 
        condicion = not(unpunto.startswith('Ref'))
        if condicion:
            grafica.scatter(unalon,unalat,
                            color = uncolor,
                            label = unpunto)
            if unpunto in etiquetar:
                grafica.annotate(unpunto,(unalon,unalat),
                                 color = uncolor,
                                 rotation=45)
    plt.xlabel('UTM_este')
    plt.ylabel('UTM_norte')
    plt.title('Ubicacion UTM')
    plt.grid()
    plt.show()

# Grafica 3D --------------------------
if tipograf == '3D':
    figura = plt.figure()
    grafica = figura.add_subplot(projection='3d')
    # grafica = plt.figure().add_subplot(projection='3d')
    for unpunto in ubica.index:
        unalon  = ubica['utm_este'][unpunto]
        unalat  = ubica['utm_norte'][unpunto]
        unaalt  = ubica['altitud'][unpunto]
        uncolor = ubica['color'][unpunto] 
        condicion = not(unpunto.startswith('Ref'))
        if condicion:
            grafica.scatter(unalon,unalat,unaalt,
                            color = uncolor,
                            label = unpunto)
        if unpunto in etiquetar:
            grafica.text(unalon,unalat,unaalt,unpunto)
    grafica.set_xlabel('UTM_este')
    grafica.set_ylabel('UTM_norte')
    grafica.set_zlabel('altitud')
    grafica.set_title('Ubicacion UTM')

    def rotate(angle):
        grafica.view_init(azim=angle)

    print("realizando animation")
    rot_animation = animation.FuncAnimation(figura,
                    rotate,
                    frames = np.arange(45,360+45,10),
                    interval = 200)
    rot_animation.save(arch_rotacion, dpi=80,
                    writer = animation.PillowWriter(fps=5))
    plt.show()

Referencia: Graficas 3D puntos dispersos-scatter en métodos numéricos