如何在散点极坐标迹线上显示连续刻度?

问题描述 投票:0回答:1

我有一个数据框,其中包含多个 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 个问题有什么建议吗?我附上了一张图像,显示了迄今为止我所拥有的更大的数据集和更多的卫星。我只需要一个更具视觉吸引力的配色方案、合适的图例和符号。

Plotly Scatterpolar plot of satellite tracks

python plotly
1个回答
0
投票

只有一些更新。

色标由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()

fig

© www.soinside.com 2019 - 2024. All rights reserved.