如何为绘图表达的 scatter_geo 设置点大小和颜色?

hro*_*okr 5 python plotly-express

我有一个示例数据集(pd.read_clipboard(sep=\'\\s\\s+\') 读入 pandas):

\n
    reference   Latitude    Longitude   year    subreg  dot_size\ndate                        \n1984-08-05  1985-12     24.033333   59.916667   1984    62  80\n1984-08-02  1985-11     22.316667   91.716667   1984    62  80\n1984-07-30  1985-10     6.266667    3.183333    1984    62  80\n1984-05-12  1985-9  1.816667    3.200000    1984    93  80\n1983-04-10  1985-8  6.983333    -58.033333  1983    93  80\n1983-03-02  1985-7  4.133333    6.950000    1983    57  80\n1981-04-10  1985-1  13.500000   42.716667   1981    22  80\n1980-02-13  1985-5  16.541667   111.241667  1980    51  80\n
Run Code Online (Sandbox Code Playgroud)\n

我使用 Plotly express 在 scatter_geo 上绘制了它

\n
subreg = df[\'subreg\']\npx.scatter_geo(df, lat=df[\'Latitude\'], lon=df[\'Longitude\'], color=\'subreg\', height=600)\n
Run Code Online (Sandbox Code Playgroud)\n

但我发现这些点太小,无法有效阅读,尤其是地图白色部分上的四个黄点。

\n

在此输入图像描述

\n

我尝试了一些技巧来改变大小,例如,df[\'dot_size\'] = 80它们取得了一些成功,因为它们更大,但我似乎只能选择无点(dotsize = 0)小点(大小未作为参数传递)或巨大的点(点大小 >=1),没有其他可用选项。

\n

在此输入图像描述

\n

Plotly Express scatter_geo 文档尽可能表明了这一点:

\n
\n

size (str 或 int 或 Series 或 array-like) \xe2\x80\x93 data_frame 中的列名称,或者 pandas Series 或 array_like 对象。此列或 array_like 中的值用于分配标记大小。

\n
\n

我在控制点的大小方面缺少什么?另外,如何有效地设置颜色?

\n

Ben*_*say 6

切换到的另一种方法是在从 生成它之后go.Scattergeo()进行修改。这对我有用:figpx.scatter_geo()

import pandas as pd
import plotly.express as px

df = pd.DataFrame(dict(lat=[24, 22], lon=[60, 92], subreg=[62, 93]))
fig = px.scatter_geo(df, lat="lat", lon="lon", color="subreg")
fig.update_traces(marker=dict(size=50))
fig.show()
Run Code Online (Sandbox Code Playgroud)

它看起来像这样:

在此输入图像描述


maz*_*ore 5

据我所知, px.scatter_geo 中的colorsize参数仅会采用列的名称,然后使用该数据来设置大小或颜色。因此,如果您将“subreq”传递给颜色或大小,它将使颜色和大小依赖于数据帧中的该列。

如果您想要更多控制,我建议您使用plotly.graph_objects。你可以做类似的事情

import plotly.graph_objects as go

fig = go.Figure(go.Scattergeo(
    lat=df['Latitude'],
    lon=df['Longitude'],
    marker=dict(color=list(range(6)),
                colorscale='viridis',
                size=50)
))
fig.show()
Run Code Online (Sandbox Code Playgroud)

这样,您可以将大小/颜色设置为常量(例如设置大小=50),或将其设置为列表,每个点一个。Plotly 将颜色解释为一个范围,实际颜色由色阶决定,请参见此处。希望有帮助