Python数据分析:绘制玫瑰图实训
🌸【Python可视化实战】用 pyecharts 绘制“零新增”玫瑰图,一眼看懂疫情趋势!
❝💡 数据不会说话,但图表会。
今天教你用 pyecharts 画出一张高颜值、有深度的“多省区市连续无新增病例天数玫瑰图”,让数据讲故事!📈
🎯 实训目标:一图看懂全国疫情“清零”进度
我们以某天全国各省市的“连续无新增确诊病例天数”为例,使用 pyecharts 制作一个 南丁格尔玫瑰图(Nightingale Rose Chart),直观展示各地“清零”状态。
📌 数据示例:
-
北京:1 天
-
上海:1 天
-
广东:42 天
-
四川:35 天
-
……
❝✅ 目标:通过扇形面积大小,反映各地“持续清零”的长短。
🧰 第一步:环境准备 & 导入模块
from pyecharts import options as opts
from pyecharts.charts import Pie
import pandas as pd
❝🔍 小贴士:
pyecharts是 Python 中最强大的可视化库之一,支持交互式图表安装命令:
pip install pyecharts
📊 第二步:准备数据
我们将省份和对应“连续无新增天数”整理成 DataFrame:
provinces = ['北京', '上海', '黑龙江', '吉林', '辽宁', '内蒙古', '新疆', '西藏', '青海',
'四川', '云南', '陕西', '重庆', '贵州', '广西', '海南', '澳门', '湖南', '江西',
'福建', '安徽', '浙江', '江苏', '宁夏', '山西', '河北', '天津']
num = [1, 1, 17, 9, 22, 23, 42, 35, 7, 20, 21, 16, 24, 16, 21, 37, 12, 13, 14, 13,
7, 22, 8, 16, 13, 13]
df = pd.DataFrame({'provinces': provinces, 'num': num})
❝🔄 排序:按天数从大到小排序,突出重点区域
df.sort_values(by='num', ascending=False, inplace=True)
🎨 第三步:创建玫瑰图(Pie Chart)
✅ 初始化图表
c = Pie(
init_opts=opts.InitOpts(width='1250px', height='750px')
)
❝📐 设置宽高,保证图片清晰不压缩
🌈 设置颜色系列(自定义配色更高级!)
color_series = ['#FAB927', '#E9E416', '#C9DA36', '#9EBC3C', '#6DBC49',
'#37B44E', '#3DBA78', '#14ADCF', '#209AC9', '#1E91CA',
'#2C6BA0', '#2B55A1', '#2D3D8E', '#44388E', '#6A368B',
'#7D3990', '#A63F98', '#C31C88', '#D52178', '#D5225B',
'#D02C2A', '#D44C2D', '#F57A34', '#FA8F2F', '#D99D21',
'#CF7B25', '#CF7B25', '#CF7B25']
c.set_colors(color_series)
❝💡 使用渐变或柔和色系,避免视觉疲劳
📦 添加数据(关键!)
v = df['provinces'].values.tolist() # 省份名
d = df['num'].values.tolist() # 天数
c.add(
"",
[list(z) for z in zip(v, d)],
radius=["30%", "100%"], # 内外圈半径
center=["50%", "50%"], # 图表中心位置
rosetype="area" # 南丁格尔玫瑰图模式
)
❝🌸
rosetype="area"→ 扇形面积与数值成正比,体现“清零时长”差异
🎨 第四步:美化全局配置
c.set_global_opts(
title_opts=opts.TitleOpts(
title='多省区市\n确诊病例连续多日',
subtitle='零新增',
title_textstyle_opts=opts.TextStyleOpts(font_size=25, color='#0085c3'),
subtitle_textstyle_opts=opts.TextStyleOpts(font_size=50, color='#003399')
),
pos_right='center',
pos_left='center',
pos_top='42%',
pos_bottom='center',
legend_opts=opts.LegendOpts(is_show=False), # 隐藏图例
toolbox_opts=opts.ToolboxOpts() # 显示工具栏
)
❝🖼️ 效果:标题分两行,主副标题搭配,突出“零新增”关键词
📝 第五步:设置系列配置项(细节控必看)
c.set_series_opts(
label_opts=opts.LabelOpts(
is_show=True,
position="inside",
font_size=12,
formatter="{b}:{c}天",
font_style="italic",
font_weight="bold",
font_family="SimHei"
)
)
❝✅ 标签显示在扇形内部,格式为:“省份:XX天”,字体为黑体,清晰可读!
🖼️ 第六步:渲染输出
c.render_notebook()
❝📱 在 Jupyter Notebook 中直接显示图表
🖼️ 若想保存为 HTML 文件:c.render("zero_new.html")
🌟 最终效果预览

❝🔷 一张圆形玫瑰图,扇形由大到小排列
🔷 每个扇形代表一个省份,面积越大,表示“连续无新增天数”越长
🔷 颜色丰富且协调,标签清晰标注“省份:XX天”
🔷 可点击缩放、拖动查看细节,交互性强!
❝🎯 例如:广东(42天)、四川(35天)等大片扇形明显突出,而北京、上海仅1天,占比极小。
📈 为什么选“玫瑰图”?
| 图表类型 | 优点 | 缺点 |
|---|---|---|
| 柱状图 | 易读 | 不适合大量类别 |
| 饼图 | 直观 | 难比较小值 |
| 玫瑰图 | ✅ 面积反映数值,✅ 适合分类多、数值差异大的场景 | 需要合理排序 |
❝✅ 特别适用于:疫情、销量、人口、消费等“排名类”数据!
🚀 实战应用拓展
-
动态更新:接入实时 API,每日自动刷新图表
-
地图联动:结合
Map图表,实现“热力 + 玫瑰”双视图 -
时间轴动画:展示过去一个月的变化趋势
-
网页嵌入:将生成的 HTML 嵌入公司官网或公众号文章
📚 总结:三大核心要点
✅ 数据准备要规范:列名明确,排序合理
✅ 配色要讲究:避免刺眼,突出重点
✅ 配置要精细:标题、标签、交互一个都不能少!
更多推荐


所有评论(0)