循序渐进,学会用pyecharts绘制玫瑰图

玫瑰图简介

玫瑰图全称南丁格尔玫瑰图,是英国护士和统计学家弗罗伦斯·南丁格尔发明的,又名为极区图。

南丁格尔自己常昵称这类图为鸡冠花图(coxcomb),用以表达军医院季节性的死亡率,提供给那些不太能理解传统统计报表的公务人员。

在疫情期间经常看到那种盘旋的像玫瑰一样的、用来展示不同地区的新增等数据的图形,就是玫瑰图。

玫瑰图是一种圆形的直方图,即有饼图的特征,也有直方图的特征。

在Python中,可以使用pyecharts库中绘制饼图的组件Pie实现玫瑰图,本文就循序渐进地介绍一步步将饼图演变成玫瑰图。

绘图准备

  • 安装pyecharts库
pip install pyecharts
  • 准备示例数据

本文用十种水果的热量(kcal/100g)值对比来做演示。(数据来源于网络)

# coding=utf-8
import pandas as pdfruits = {'香蕉': 115, '梨': 79, '椰子': 241, '柿子': 74, '鲜枣': 125,'榴莲': 147, '石榴': 72, '菠萝蜜': 105, '牛油果': 143, '山楂': 102}
s_fruits = pd.Series(fruits)
print(s_fruits)
香蕉     115
梨       79
椰子     241
柿子      74
鲜枣     125
榴莲     147
石榴      72
菠萝蜜    105
牛油果    143
山楂     102
dtype: int64

绘制饼图

先根据初始数据,绘制一个基本的饼图。

绘制饼图使用pyecharts中的Pie组件,先初始化一个Pie对象,调用add()方法添加绘图用的数据,再链式调用set_series_opts()、set_global_opts()设置饼图的标签、标题、图例等,最后链式调用render()方法将图形渲染到HTML文件中,可以用浏览器打开绘图结果。

from pyecharts.charts import Pie
from pyecharts import options as opts# 饼图
pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
pie.add('', [list(z) for z in zip([fruit for fruit in s_fruits.index], s_fruits)], center=['50%', '50%']
).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"),
).set_global_opts(title_opts=opts.TitleOpts(title='水果的热量对比(kcal/100g)', pos_left='300', pos_top='20',title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),legend_opts=opts.LegendOpts(is_show=False)
).render('fruits_calorie1.html')

此时绘制了一个普通的饼图,已经可以对比展示数据了。

绘制环形饼图

要将一个饼图设置成环形饼图,在添加数据的add()方法中使用radius参数设置。

radius参数接收一个列表或元组,列表由两个数值或百分比组成,如radius=[‘40%’, ‘60%’],分别表示饼图的内半径和外半径,大部分情况用百分比。

饼图的内半径默认为0,外半径默认为画布高宽中较小的一项的一半,所以饼图默认是从圆心开始的,大小根据画布大小自适应。

# 环形饼图
pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
pie.add('', [list(z) for z in zip([fruit for fruit in s_fruits.index], s_fruits)],radius=['40%', '60%'], center=['50%', '50%']
).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"),
).set_global_opts(title_opts=opts.TitleOpts(title='水果的热量对比(kcal/100g)', pos_left='300', pos_top='20',title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),legend_opts=opts.LegendOpts(is_show=False)
).render('fruits_calorie2.html')

设置radius参数后饼图变成了环形饼图。当然,玫瑰图并不一定是“空心”的,不用先修改成环形饼图也可以。

绘制玫瑰图

在饼图的基础上,在add()方法中添加rosetype="radius"参数,就可以绘制出玫瑰图。

rosetype参数用于设置是否展示成南丁格尔玫瑰图,默认None(不展示成玫瑰图)。

rosetype有’radius’和’area’两种模式:

  • radius模式:用扇形圆心角展现数据的百分比,通过半径展现数据大小。

  • area模式:所有扇形圆心角相同,仅通过半径展现数据大小。

# 玫瑰图
pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
pie.add('', [list(z) for z in zip([fruit for fruit in s_fruits.index], s_fruits)],radius=['10%', '70%'], center=['50%', '50%'], rosetype="radius"
).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")
).set_global_opts(title_opts=opts.TitleOpts(title='水果的热量对比(kcal/100g)', pos_left='300', pos_top='20',title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),legend_opts=opts.LegendOpts(is_show=False)
).render('fruits_calorie3.html')

本文使用’radius’模式,用扇形圆心角展现数据的百分比,具有饼图的特征,通过半径展现数据大小,具有直方图的特征。

优化玫瑰图

玫瑰图已经完成了,在展示时可以进行一些优化。

  • 先对数据进行排序。

    使用pandas中的sort_values()方法先将数据排序,再绘制玫瑰图,这样图像的半径依次变大,对比效果更直观。

  • 调整radius的范围。

    根据数据的变化调整radius参数中的内半径和外半径值,改变图形的展示范围,使图像更协调美观。

  • 设置扇形颜色渐变。

    链式调用set_colors()方法来设置玫瑰图的颜色,为了使不同的扇形颜色依次渐变,可以通过设置RGB(red,green,blue)值的变化来实现,如下方代码控制不同数据的R值和B值,将颜色调为红蓝渐变。具体代码如下。

# 玫瑰图美化
s_fruits = s_fruits.sort_values()
pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
pie.add('', [list(z) for z in zip([fruit for fruit in s_fruits.index], s_fruits)],radius=['10%', '70%'], center=['50%', '50%'], rosetype="radius"
).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"),
).set_global_opts(title_opts=opts.TitleOpts(title='水果的热量对比(kcal/100g)', pos_left='300', pos_top='20',title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),legend_opts=opts.LegendOpts(is_show=False)
).set_colors(['rgb({r},0,{b})'.format(r=255-20*(len(s_fruits)-x+1), b=255-15*x) for x in range(len(s_fruits))]
).render('fruits_calorie4.html')

经过以上几个步骤的演进,一个不错的玫瑰图完成了。这样一步一步地调整和演进,可以方便大家学习。

如果本文对你有帮助,欢迎点赞、收藏和关注。

参考文档:
[1] pyecharts官方文档:https://pyecharts.org/#/zh-cn/basic_charts

循序渐进,学会用pyecharts绘制玫瑰图相关推荐

  1. 循序渐进,学会用pyecharts绘制瀑布图

    循序渐进,学会用pyecharts绘制瀑布图 瀑布图简介 瀑布图(Waterfall Plot)是由麦肯锡顾问公司所独创的图表类型,因为形似瀑布流水而称之为瀑布图. 瀑布图采用绝对值与相对值结合的方式 ...

  2. 学会用pyecharts画玫瑰图

    文章目录 文章目录 前言 相关文档文档和社区 1.中文官方文档 2.官方github 3.社区 一.什么是玫瑰图? 二.玫瑰图的特点 1.适合对比分析,没有占比意义 2.数据差异不宜过大 3.可以反映 ...

  3. python_绘制玫瑰图_南丁格尔图

    python_绘制玫瑰图_南丁格尔图 通过加载execel文件绘制 通过直接造数看这: https://blog.csdn.net/kaikai_sk/article/details/10495430 ...

  4. python如何绘制两点间连线_如何用 Python 绘制玫瑰图等常见疫情图

    新冠疫情已经持续好几个月了,目前,我国疫情已经基本控制住了,我们会看到很多网站都提供了多种疫情统计图,今天我们使用 Python 的 pyecharts 框架来绘制一些比较常见的统计图. 1. 玫瑰图 ...

  5. Pyecharts绘制阶梯图

    Pyecharts绘制阶梯图 Pyecharts绘制阶梯图 Pyecharts绘制阶梯图 这里使用的pyecharts版本是0.5的,毕竟1.x以后的版本大改了,很多都不一样 from pyechar ...

  6. pyecharts绘制折线图

    要使用Python中的pyecharts绘制折线图,首先需要安装pyecharts库(可以使用pip install pyecharts命令进行安装).然后可以按照以下步骤进行绘图: 导入pyecha ...

  7. 利用Pyecharts绘制仪表盘图的案例【含参数解释】

    目录 一.概念解释 二.数据导入 三.单指针仪表盘 四.参数解释 五.多指针仪表盘 一.概念解释         仪表盘图(Gauge),这里指的并不是人力常用的多图表在同页面聚合排布的绘图方法. 仪 ...

  8. 利用pyecharts绘制水球图的案例

    一.概念介绍 水球图(Liquid Fill Chart),听名字或许比较陌生,但从命名的角度也可以猜测出此类图像以球形水波显示.水球图属于填充仪表盘类,可以用于生动地展示单个百分比数据或评分数据. ...

  9. 利用Pyecharts绘制漏斗图的案例【含参数详解】

    一.概念介绍 漏斗图(Funnel),也称为倒三角图,借助echarts的解释如下: Funnel diagram is suitable for one-way analysis of single ...

最新文章

  1. 阿里巴巴公布第二财季报告,净利润同比增长71%
  2. Linux 操作系统原理 — 内存 — 基于 MMU 硬件单元的虚/实地址映射技术
  3. 卸载阿里云服务器的mysql_阿里云服务器入门教程
  4. 张家口张北:加速“云计算”产业集聚
  5. STM32 进阶教程 9 - 芯片维一码(UID)读取
  6. ASP excel导出/导入Access数据库(代码+实例下载)
  7. PHP中单引号和双引号到底有啥区别
  8. ABP vNext微服务架构详细教程——分布式权限框架(上)
  9. ASP.NET Core + Docker + Jenkins + gogs + CentOS 从零开始搭建持续集成
  10. 在ubuntu 12.04 x64下编译hadoop2.4
  11. 三分钟撸完前后端crypto-js加解密,你学废了吗?
  12. 山东2015职称计算机考试报名时间,2015年山东职称计算机考试报名入口
  13. 合理利用Java不可变对象,让你的代码更加优雅
  14. day02.1 爬取豆瓣网电影信息
  15. H3C WAC360 基于Win2012 NPS 802.1x 认证
  16. NUAA第四届“节能小屋”大赛工艺组“一等奖”作品——新能源智慧食堂
  17. python scipy.signal 包络_python scipy signal.freqz用法及代码示例
  18. java游戏项目推箱子
  19. vue3.0抢先看(附尤雨溪vue分享ppt)
  20. 项目管理之信息文档管理与配置管理(第一篇)

热门文章

  1. 13岁的京东和13岁的亚马逊 他们之间有什么不同?
  2. 在线预览Office文件【效果类似百度文库】(转载)
  3. ubantu14.04装机
  4. 李开复给中国大学生的第七封信——21世纪最需要的七种人才
  5. Anaconda D2L 虚拟环境安装配置
  6. 迅雷深度布局家庭互联网
  7. 无人机航测是选择固定翼还是多旋翼?
  8. 西游:我的弟子们过于嚣张(一)
  9. 红外测温传感器的现状
  10. SCP (Secure copy)简介