You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:45:05