将尺寸图例添加到plotly.express.scatter_mapbox

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

我使用plotly.express.scatter_mapbox 完成了可视化。它基本上显示了沙特阿拉伯地图上的不同机构。这些机构以小圆圈标记,并用颜色编码来反映该机构所属的类别。有 4 个主要类别,这些类别的图例是自动生成的。现在,标记的大小(在本例中为圆圈)反映了机构发表的出版物的数量。因此,如果我们有一个拥有大量出版物的机构,那么与另一个出版物较少的机构相比,标记会大得多。

问题是我只有一个图例来解释标记的不同颜色。我没有办法解释标记的不同尺寸。理想情况下,我希望有一个能够解释比例尺上不同尺寸的工具。最坏的情况是,一行解释大小反映了出版物数量也是可以接受的。

我已经检查了文档here以了解修改函数属性的某种方法,但找不到任何内容。

编辑:

我的数据中的每一行代表沙特阿拉伯的一个机构。我有代表沙特机构坐标的纬度和经度列。我还有一个聚类列,指示该机构属于 4 个聚类中的哪一个。最后,我有一个 pub_counts 列,表示数据集中每个机构发表的出版物数量。

这是我正在使用的部分数据:

数据

这是我的代码

如果plot_map == True:

import plotly.express as px
import matplotlib.pyplot as plt
import plotly.io as pio

pio.renderers.default='browser'

fig = px.scatter_mapbox(Institutes_SA, 
                        lat="Latitude", lon="Longitude", 
                        hover_name="institution_name", 
                        mapbox_style= "carto-positron", 
                        #"carto-darkmatter", 
                        zoom=4.5,
                        width = 1075,
                        height = 900,
                        color = 'Cluster',
                        color_discrete_sequence=['red','green','orange','DodgerBlue'],
                        size='pub_counts',
                        size_max = 40,
                        opacity=0.5
                        )

pio.show(fig)
python visualization legend scatter-plot plotly-python
1个回答
0
投票

我根据更新问题中的数据定制了参考中的示例。在修改后,我们创建了一个包含映射类别和颜色的字典。这是针对标记颜色完成的。提供的数据列中没有出版号,因此我们将其更改为其他列。运行此代码将为同一类别创建多个图例。这是为了回答您的请求。为了区分相同的标记大小,请创建一个类别列表,如图例中所示,并将它们添加到图例名称(名称)中。最后,这个scattergeo不允许你绘制mapbox等详细地图。

import plotly.graph_objects as go

category_dict = {'Hospitals & Health Centers': 'red', 'Societies & Gov Bodies': 'green','Universities & Colleges': 'orange', 'other': 'DodgerBlue'}
scale = 5000

fig = go.Figure()

for row in Institutes_SA.itertuples():
    mcolor = category_dict[row.Cluster]
    fig.add_trace(go.Scattergeo(
        lon=[row.Longitude],
        lat=[row.Latitude],
        text=row.work_counts,
        marker=dict(
            size=row.work_counts/scale,
            color=mcolor,
            sizemode='area'
        ),
        name=row.Cluster
    ))

fig.update_layout(
    title_text = 'Publications by institution',
    height=500,
    showlegend = True,
    # margin={"r":0,"t":30,"l":0,"b":0},
    geo = dict(
        fitbounds="locations",
        center=dict(
            lon=Institutes_SA.Longitude.mean(),
            lat=Institutes_SA.Latitude.mean()
        ))
    )
fig.show()

enter image description here

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