我有一个数据框,其中包含多个 GPS 卫星的方位角和仰角。我想在 Plotly 散点图中显示这些数据,并根据文件中的其他属性之一为每颗卫星的轨迹着色,例如SNR(信噪比)。我正在使用绘图对象,我可以创建看起来不错的绘图,但是......
1)如何更改迹线的色阶? 2) 如何显示连续SNR刻度的图例? 3) 是否可以为每个卫星轨迹自动生成不同的符号?
我的数据框看起来像这样:
PRN,Azimuth,Elevation,SNR
G02,247,23,45
G02,248,24,47
G02,249,25,50
G03,130,45,43
G03,131,46,44
G03,132,47,44
G04,187,60,47
G04,186,59,45
G04,185,57,43
到目前为止我的代码如下所示:
import pandas as pd
import plotly.graph_objects as go
data=r'C:\data\satellites.csv'
df = pd.read_csv(data)
fig1 = go.Figure()
# Loop through satellites in file to create a separate trace for each one
for prn in df['PRN'].unique():
prndf = df.loc[df['PRN'] == prn]
# Create trace
fig1.add_trace(go.Scatterpolar(
r = prndf['Elevation'],
theta = prndf['Azimuth'],
mode = 'markers',
marker = dict(color=prndf.SNR),
))
fig1.update_layout(
template=None,
legend_title_text='PRN Number',
title=f"Satellite plots",
font=dict(
size=18
),
polar = dict(
radialaxis = dict(range=[90, 0], showticklabels=True, ticks=''),
angularaxis = dict(showticklabels=True,rotation = 90,direction='clockwise')
)
)
fig1.show()
对于我的 3 个问题有什么建议吗?我附上了一张图像,显示了迄今为止我所拥有的更大的数据集和更多的卫星。我只需要一个更具视觉吸引力的配色方案、合适的图例和符号。
只有一些更新。
色标由marker_colorscale设置。作为替代方案,您可以选择不同的命名色标或声明您自己的色标(例如 ['red', 'orange', 'yellow'] 或 [[0, 'red'], [0.75, 'orange'], [1,'黄色']])。
我为所有迹线设置相同的颜色范围以保持相同的比例。实际上有三个颜色条彼此层叠,但您无法分辨,因为它们都是相同的。如果不设置相同的颜色范围,您会注意到分层,因为它们都有不同的数字。
fig1 = go.Figure()
symbols = ['square', 'circle', 'diamond'] #update symbols as desired
symbol_map = {x:s for x,s in zip(df['PRN'].unique(), symbols)}
# Loop through satellites in file to create a separate trace for each one
for prn in df['PRN'].unique():
prndf = df.loc[df['PRN'] == prn]
symb = symbol_map[prn] #declares symbol for trace
# Create trace
fig1.add_trace(go.Scatterpolar(
r = prndf['Elevation'],
theta = prndf['Azimuth'],
mode = 'markers',
marker = dict(color=prndf.SNR,
colorscale='Earth', #sets colorscale
cmin=df['SNR'].min(), #sets color range
cmax=df['SNR'].max(),
symbol=symb,
size=10,
colorbar=dict(title='Colorbar')),#forces creation of colorbar
))
fig1.update_layout(
template=None,
legend=dict(x=0.8, #moves legend out of the way of colorbar
title_text='PRN Number'),
title=f"Satellite plots",
font=dict(
size=18
),
polar = dict(
radialaxis = dict(range=[90, 0], showticklabels=True, ticks=''),
angularaxis = dict(showticklabels=True,rotation = 90,direction='clockwise')
)
)
fig1.show()