Se realiza la gráfica para 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 Fundamentos de Programación