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