Python Plotly-如何从唯一的Scattergeo对象向每条跟踪添加多种颜色?

Python Plotly-如何从唯一的Scattergeo对象向每条跟踪添加多种颜色?,plotly,plotly-dash,plotly-python,Plotly,Plotly Dash,Plotly Python,我正在用Python中的dash/plotly开发一个仪表板应用程序 我需要建立一个有1000多条痕迹的地图。因为,我尝试使用一个单一的Scattergeo对象,但通常情况下,它不提供用不同颜色绘制每个“轨迹”的方法 我希望每个轨迹包含不同的颜色。对于标记,每个标记都可以有一种颜色,但不可能使用行 下面的图片说明了我上面所说的 有什么变通办法可以解决这个棘手的问题吗 我在下面发送了一个可复制的代码 先谢谢你 可复制代码: ####################################

我正在用Python中的dash/plotly开发一个仪表板应用程序

我需要建立一个有1000多条痕迹的地图。因为,我尝试使用一个单一的Scattergeo对象,但通常情况下,它不提供用不同颜色绘制每个“轨迹”的方法

我希望每个轨迹包含不同的颜色。对于
标记
,每个标记都可以有一种颜色,但不可能使用

下面的图片说明了我上面所说的

有什么变通办法可以解决这个棘手的问题吗

我在下面发送了一个可复制的代码

先谢谢你

可复制代码:

##################################################
#阴谋地
##################################################
#资料来源:https://plotly.com/python/lines-on-maps/
导入plotly.graph_对象作为go
图=go.Figure()
图添加轨迹(go.Scattergeo(
纬度=[
40.7127,51.5072,无,
30.7127,41.5072,无,
20.7127, 31.5072
],
lon=[
-74.0059,0.1275,无,
-64.0059,-10.1275,无,
-54.0059, -20.1275
],
模式='行',
行=dict(
宽度=4,
颜色='蓝色',
#我想要这样的东西:
#颜色=[
#“红色”,
#没有,,
#“黄色”,
#没有,,
#“绿色”
# ],
),
))
图添加轨迹(go.Scattergeo(
纬度=[
40.7127,
30.7127,
20.7127
],
lon=[
-74.0059,
-64.0059,
-54.0059,
],
模式='标记',
记号笔(
尺寸=10,
颜色=[“红色”、“黄色”、“绿色”],
行=dict(
宽度=3,
颜色='rgba(68,68,68,0)'
),
)
))
图1.2.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1(
title_text=‘Traces’,
showlegend=False,
地理=口述(
分辨率=50,
showland=True,
showlakes=True,
landcolor='rgb(204204204)',
countrycolor='rgb(204204204)',
湖色='rgb(255,255,255)',
投影类型=“等矩形”,
宽度=2,
lataxis=dict(
范围=[0,70],
showgrid=True,
dtick=10
),
lonaxis=dict(
范围=[-100,20],
showgrid=True,
dtick=20
),
)
)
##################################################
#冲刺
##################################################
导入破折号
将仪表板核心组件作为dcc导入
将dash_html_组件导入为html
app=dash.dash()
app.layout=html.Div([
dcc.图(图=图)
])
app.run_server(debug=True,use_reloader=True)

您可以创建一个包含纬度、经度和颜色的列表。然后在列表中循环,一次添加一个跟踪

import plotly.graph_objects as go

fig = go.Figure()

## create lists containing your information
lat_list = [[40.7127, 51.5072, None],[30.7127, 41.5072, None],[20.7127, 31.5072]]
lon_list = [[-74.0059, 0.1275, None],[-64.0059, -10.1275, None],[-54.0059, -20.1275]]
colors_list = ['red','yellow','green']

for idx in range(len(colors_list)):
    fig.add_trace(go.Scattergeo(
        lat = lat_list[idx],
        lon = lon_list[idx],
        mode = 'lines',
        line = dict(
            width=4,
            color = colors_list[idx],
        ),
    ))

fig.add_trace(go.Scattergeo(
    lat = [
        40.7127,
        30.7127,
        20.7127
    ],
    lon = [
        -74.0059,
        -64.0059,
        -54.0059,
    ],
    mode = 'markers',
    marker = dict(
        size = 10,
        color = ['red', 'yellow', 'green'],
        line = dict(
            width = 3,
            color = 'rgba(68, 68, 68, 0)'
        ),

    )
))

fig.update_layout(
    title_text = 'Traces',
    showlegend = False,
    geo = dict(
        resolution = 50,
        showland = True,
        showlakes = True,
        landcolor = 'rgb(204, 204, 204)',
        countrycolor = 'rgb(204, 204, 204)',
        lakecolor = 'rgb(255, 255, 255)',
        projection_type = "equirectangular",
        coastlinewidth = 2,
        lataxis = dict(
            range = [0, 70],
            showgrid = True,
            dtick = 10
        ),
        lonaxis = dict(
            range = [-100, 20],
            showgrid = True,
            dtick = 20
        ),
    )
)

fig.show()

它必须是一个绘图仪吗?或者使用其他组件(如仪表板传单)的解决方案可用吗?你的想法太棒了。我用过短跑传单,效果很好。谢谢,谢谢!我很高兴你喜欢:)谢谢你的回答,但是使用循环可能会导致,因为我正在寻找一个不使用循环的解决方案。好的,这是一个公平的观点,因为你正在绘制1000多条记录道。谢谢你的反馈!