能否使用Altair制作极坐标图实现弗洛伦斯·南丁格尔玫瑰图?
Altair绘制南丁格尔极坐标图方案
Altair完全支持极坐标图绘制,可直接复现弗洛伦斯·南丁格尔的经典极坐标玫瑰图。
核心实现逻辑
南丁格尔极坐标图本质是极坐标系下的堆叠柱状图,Altair 4.0及以上版本已原生支持极坐标配置,无需依赖第三方扩展。
关键配置项
- 角度通道
theta:绑定分类字段(如原版中的月份),设置为序数类型保证分类均匀分布 - 半径通道
radius:绑定数值字段(如原版中的死亡人数),可自定义半径取值范围 - 颜色通道
color:绑定堆叠分类字段(如原版中的死亡原因),可自定义配色匹配原版风格 - 样式配置:可通过
innerRadius参数设置空心效果还原原版样式,设置scale(type="sqrt")让半径和数值的平方根对应,保证扇形面积和数值成正比,符合南丁格尔原图的设计逻辑
极简示例代码
import altair as alt import pandas as pd # 模拟南丁格尔玫瑰图核心数据,可替换为自己的真实数据集 data = pd.DataFrame({ 'month': ['1月', '2月', '3月', '4月', '5月', '6月']*3, 'cause': ['可预防疾病']*6 + ['外伤']*6 + ['其他原因']*6, 'deaths': [120, 160, 180, 220, 190, 150, 30, 25, 40, 35, 28, 32, 20, 18, 25, 22, 20, 19] }) # 绘制极坐标玫瑰图 alt.Chart(data).mark_bar(innerRadius=20).encode( theta=alt.Theta('month:N', sort=None), radius=alt.Radius('deaths:Q', scale=alt.Scale(type='sqrt', zero=True, rangeMin=20)), color=alt.Color('cause:N', legend=alt.Legend(title='死亡原因')), order=alt.Order('cause:N', sort='ascending') ).configure_view( stroke=None ).properties( width=500, height=500 )
效果示例

内容的提问来源于stack exchange,提问作者Alcindo
相关产品推荐
相关产品推荐

