如何在Dash的px.choropleth中基于聚合值设置地图颜色?
不用新建DataFrame实现Dash Choropleth聚合着色的方法
你可以直接在px.choropleth的color参数里用Pandas的transform方法完成聚合,不需要提前生成新的DataFrame,具体实现如下:
1. 按国家总分着色
利用transform('sum')把每个国家的总分广播回原数据的每一行,同一个国家的所有条目都会带上相同的总分值,Plotly会以此为依据给国家着色:
import plotly.express as px fig_total = px.choropleth( df, locations='Country', # 指定国家列 color=df.groupby('Country')['QualityScore'].transform('sum'), # 直接计算并返回每行对应国家的总分 locationmode='country names', # 匹配国家名称的模式,可根据数据格式调整 title='各国科研出版物质量总分' )
2. 按国家论文数量着色
同理,用transform('count')计算每个国家的论文数量,广播回原数据后传入color参数:
fig_count = px.choropleth( df, locations='Country', color=df.groupby('Country')['Country'].transform('count'), # 统计每个国家的论文数 locationmode='country names', title='各国科研出版物数量' )
原理说明
transform和普通的sum/count聚合不同,它不会返回分组后的精简结果集,而是把聚合值映射回原DataFrame的每一行,确保原数据行数不变。这样Plotly处理时,同一个国家的所有行都会使用相同的聚合值,最终渲染出正确的 choropleth 地图。
内容的提问来源于stack exchange,提问作者Akshay Chacko
相关产品推荐
相关产品推荐

