🌸【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天,占比极小。


📈 为什么选“玫瑰图”?

图表类型

优点

缺点

柱状图

易读

不适合大量类别

饼图

直观

难比较小值

玫瑰图

✅ 面积反映数值,✅ 适合分类多、数值差异大的场景

需要合理排序

✅ 特别适用于:疫情、销量、人口、消费等“排名类”数据!


🚀 实战应用拓展

  1. 动态更新:接入实时 API,每日自动刷新图表

  2. 地图联动:结合 Map 图表,实现“热力 + 玫瑰”双视图

  3. 时间轴动画:展示过去一个月的变化趋势

  4. 网页嵌入:将生成的 HTML 嵌入公司官网或公众号文章


📚 总结:三大核心要点

✅ 数据准备要规范:列名明确,排序合理
✅ 配色要讲究:避免刺眼,突出重点
✅ 配置要精细:标题、标签、交互一个都不能少!

 

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐