一、概念介绍

圆环图(Donut Chart),又称为环形图,甜甜圈图。它从饼图变形而来,单环的作用上与饼图相似,用于展示定性数据中小类占大类的比例关系。

Q: 那既然都有饼图了,为什么还要圆环图呢?

① 从空间利用效果上,饼图的text我们常利用指示线标注在每一块外;而圆环图凭借中间挖空的优势,可以将title或者每一块的text内置,便于多图排布对比。

② 从视觉效果上,如果是一维定性的情况,我们只需要绘制一张饼图或者圆环图,这个时候其实两者没差。但一旦有两维数据,饼图利用角度对比大小的方式其实没有圆环图利用长度来得明显;再者,在多图对比时,饼图是完全填充,如果色系选择不当,很容易给受众产生厚重的感觉,或者说土土的。

③ 对于复合图形,旭日图和双层环形也是一样的道理。

圆环图示例:


二、数据展示

我们目前手上有的是随机选取的八座城市过去一年每日的空气质量评级数据(借助爬虫,源自天气后报网http://www.tianqihoubao.com/aqi/)。

网页数据如下:

由于圆环图要的是定性数据,那我们将质量等级定为可视化对象。我们的目标是:利用圆环图分析各个城市一年中空气质量等级分布的情况。对于收集的数据,利用excel整理如下所示:

接下来,我们导入数据

import pandas as pd
import matplotlib.pyplot as plt
import numpy as npdf_yh = pd.DataFrame(pd.read_excel('./天气质量指数.xlsx'))

绘图所需要的数据结构如下所示:


三、图像绘制

显然,我们的数据是二维定性的【城市+空气质量等级】,如果是要将质量等级作为大类绘制复合图当然也是可行的,但因为城市比较多,会显得拥挤。我们这里选择的是绘制八幅单圆环再进行排列对比。

plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = Falsewedgeprops = {'width':0.3, 'edgecolor':'black', 'linewidth':3}
colors = ['#ffda03', '#58bc08','#ff964f' ,'#c875c4' ,'#9a3001']
fig = plt.figure(figsize=(17,9))
for i in range(1,9):plt.subplot(2,4,i)plt.pie(df_yh.iloc[i-1,1:], wedgeprops=wedgeprops, startangle=90, colors=colors)plt.text(0, 0, df_yh['城市'][i-1] , ha='center', va='center', fontsize=22)
# plt.savefig(r'./绘图结果/圆环图.png')

绘制结果如下所示:


四、参数解释

(1) wedgeprops是我们绘图时的参数字典。

①  ‘width’ -- 圆环的宽度,取值范围为[0,1],值越大时圆环越宽,width=1的绘制结果即为饼图,如下所示:

② ‘edgecolor' -- 边缘线颜色,包含内环、外环和每一个小类间的分割线。选择颜色只要是plt里有的都行,但尽量选择深色。

③ ’linewidth' -- 边缘线宽度。取值范围[0,100+),可以是小数值,值越大线越粗。但具体取多少,大家可以根据自己的图形多尝试几个数,个人建议是10以内进行调试。

(2) startangle是第一个数据起画点。

        取值可以是实数域上任何的数字,可以为负,也可以为正。0代表正东方向,-90代表正南方向,90代表正北方向。但要注意的是,图形的绘制按照逆时针方向。

(3) plt.text

        我们在这里用于标注title。

plt(x,y)中的x,y用于坐标定位

ha -- Horizontal 水平方向上以标注文本的哪个位置作为中心 可选项为:'center', 'right', 'left'

va -- vertical 竖直方向上以标注文本的哪个位置作为中心 可选项为:'top', 'bottom', 'center', 'baseline', 'center_baseline'

为了更好理解,我们分别以ha='right', 'left'举例:

                

我们可以看到,‘right’并不是指文本位置居右,而是从文本的右部(京)开始在(0,0)绘制。同理,‘left’并不是指文本位置居右,而是从文本的左部(北)开始绘制。

 (4) 可以绘制如示例图一样的colorbar,或者legend吗?

plt.legend()可以将pie中拟定的labels进行显示,即在plt.pie()中增加labels=labels,但同时图上每个小类都会附带类标记。如果我们不希望是图里标记出哪个部分是优,哪个部分是轻度污染的话,调整如下:

labels = ['优','良','轻度污染','中度污染','重度污染']
wedgeprops = {'width':0.3, 'edgecolor':'black', 'linewidth':3}
colors = ['#ffda03', '#58bc08','#ff964f' ,'#c875c4' ,'#9a3001']
fig = plt.figure(figsize=(5,5))
plt.pie(df_yh.iloc[1,1:], wedgeprops=wedgeprops, startangle=0, colors=colors)
plt.legend(labels,loc='upper left')
plt.text(0, 0, df_yh['城市'][1] , ha='center', va='center', fontsize=22)

得到的结果即为:

希望对您有所帮助~

利用matplotlib绘制圆环图的案例相关推荐

  1. 利用matplotlib绘制马赛克图的案例

    一.概念介绍 马赛克图(Mosaic plot),基于列联表的数据排布,展现二维定性变量下的取值大小,我们可以将它想象成三维柱状图的俯视,颜色差异或面积大小常被用于区分每个块的赋值大小. · 什么是列 ...

  2. python绘制折线图保存_Python利用matplotlib绘制折线图的新手教程

    前言 matplotlib是Python中的一个第三方库.主要用于开发2D图表,以渐进式.交互式的方式实现数据可视化,可以更直观的呈现数据,使数据更具说服力. 一.安装matplotlib pip i ...

  3. Python中利用Matplotlib绘制多图并合并展示

    有个需求就是利用Matplotlib画几个像模像样的统计图然后合并在一张图中,因为此前很少用这方面的东西,所以折腾了不少时间,今天介绍一下. 1.subplot多合一 其实,利用python 的mat ...

  4. Python可视化 | Matplotlib绘制圆环图的两种方法!

    人生苦短,快学Python!今天给大家介绍Python可视化之环形图的绘制. 环形图,也被称为圆环图.它在功能上与饼图相同,只是中间有一个空白,并且能够同时支持多个统计数据.与标准饼图相比,环形图提供 ...

  5. Matplotlib 绘制圆环图的两种方法!

    作者 | 快快 来源 | 快学Python 人生苦短,快学Python!今天给大家介绍Python可视化之环形图的绘制. 环形图,也被称为圆环图.它在功能上与饼图相同,只是中间有一个空白,并且能够同时 ...

  6. Matplotlib绘制圆环图

    饼图的中间如果有一个空白,就是环形图,适合展示分类的占比情况 Matplotlib的pie()方法主要用来绘制饼图,我们可以使用参数 wedgeprops 快速绘制环形图. wedgeprops:设置 ...

  7. 利用Joypy绘制嵴线图的案例

    一.概念介绍 嵴线图(ridgeline plot),用来展示同一维度的几个数据的分布情况,每一层嵴线(峰峦)都是一个直方图或者密度图,层层堆叠形成了最终的嵴线图. · 嵴线图一般用于多类别(> ...

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

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

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

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

最新文章

  1. 中信银行总行信息科技部笔试面试以及最后拿offer经历
  2. NOIP2013pj车站分级[拓扑排序]
  3. C#中Monitor和Lock以及区别
  4. php 7 pcntl扩展,PHP_Linux系统中为php添加pcntl扩展,pcntl扩展可以支持php的多线程 - phpStudy...
  5. 全球及中国养老护理行业十四五趋势前景与投资动向建议报告2022版
  6. 958. 二叉树的完全性检验
  7. OpenShift 4 之 配置基于Red Hat SSO的Identity Providers
  8. JY01-KX-01
  9. 【前端干货】CSS 的空格处理
  10. 小胖说事30------iOS 强制转成横屏的方式
  11. java列表展开折叠,Android在开发中的实用技巧之ExpandableListView简单实现商品列表折叠...
  12. 2021年春季学期期末统一考试电子商务概论(农) 试题
  13. ZYNQ图像处理项目——帧差法运动目标跟踪
  14. Android 秒表
  15. 安装win10 ltsc应用商店
  16. 计算机技能测试题五,计算机基本技能测试题(第五套
  17. 使用Tracup中的时间阻塞,提升工作效率(完整指南)
  18. 到2020年,烟台重点林区视频监控率将达90%以上
  19. Libgdx Box2D实战---放开那小球(二:Box2D介绍)
  20. python彩蛋_Python的2个彩蛋

热门文章

  1. 螺丝锁附过程的相关概念以及流程
  2. 微信小程序客服相关功能
  3. Kafka知识总结之Broker原理总结
  4. uniapp 的多选框传值
  5. 手把手教你用手机轻松制作精美封面,封面不够吸引人?
  6. pid负反馈闭环控制程序
  7. mac出现文件夹问号_Macbook文件夹怎么设置隐藏或显示?开机带问号的文件夹怎么办?...
  8. APP新用户注册、手机号绑定、用户登录验证新方式——一键登录(免密登录)验证方式新趋势
  9. ios dat 文件读写_树莓派安装Samba服务,实现家庭文件共享
  10. foxmail导地址簿 乱码_foxmail的乱码之谜