脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python利用matplotlib绘制圆环图(环形图)的实战案例

Python利用matplotlib绘制圆环图(环形图)的实战案例

2022-08-03 11:07林老头ss Python

环形图也被称为圆环图,它在功能上与饼图相同,只是中间有一个空白,并且能够同时支持多个统计数据,下面这篇文章主要给大家介绍了关于Python利用matplotlib绘制圆环图的实战案例,文中通过实例代码介绍的非常详细,需要的朋友可以参

一、概念介绍

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

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

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

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

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

圆环图示例:

Python利用matplotlib绘制圆环图(环形图)的实战案例

二、数据展示

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

网页数据如下:

Python利用matplotlib绘制圆环图(环形图)的实战案例

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

Python利用matplotlib绘制圆环图(环形图)的实战案例

接下来,我们导入数据

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

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

Python利用matplotlib绘制圆环图(环形图)的实战案例

三、图像绘制

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

plt.rcParams["font.sans-serif"] = "Microsoft YaHei"
plt.rcParams["axes.unicode_minus"] = False
 
wedgeprops = {"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")

绘制结果如下所示:

Python利用matplotlib绘制圆环图(环形图)的实战案例

四、参数解释

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

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

Python利用matplotlib绘制圆环图(环形图)的实战案例

② ‘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'举例:

Python利用matplotlib绘制圆环图(环形图)的实战案例

Python利用matplotlib绘制圆环图(环形图)的实战案例

我们可以看到,‘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)

 得到的结果即为:

Python利用matplotlib绘制圆环图(环形图)的实战案例

总结

到此这篇关于Python利用matplotlib绘制圆环图的文章就介绍到这了,更多相关Python matplotlib绘制圆环图内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.csdn.net/qq_45400322/article/details/122737683

延伸 · 阅读

精彩推荐
  • PythonPython标准库笔记struct模块的使用

    Python标准库笔记struct模块的使用

    这篇文章主要介绍了Python标准库笔记struct模块的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    j_hao1048522021-01-16
  • Pythonpython绘制高斯曲线

    python绘制高斯曲线

    这篇文章主要为大家详细介绍了python绘制高斯曲线,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    一个超会写Bug的安太狼10032021-09-06
  • Pythonpython获得文件创建时间和修改时间的方法

    python获得文件创建时间和修改时间的方法

    这篇文章主要介绍了python获得文件创建时间和修改时间的方法,涉及Python针对文件属性的相关操作技巧,需要的朋友可以参考下...

    秋风秋雨22522020-07-18
  • PythonDjango框架使用内置方法实现登录功能详解

    Django框架使用内置方法实现登录功能详解

    这篇文章主要介绍了Django框架使用内置方法实现登录功能,结合实例形式详细分析了Django框架内置方法实现登录功能的相关操作技巧与使用注意事项,需要的...

    cakincqm12322021-07-11
  • PythonPython中的取模运算方法

    Python中的取模运算方法

    今天小编就为大家分享一篇Python中的取模运算方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    爱买耳钉的阿喵阿汪11882021-04-18
  • Python实时获取Python的print输出流方法

    实时获取Python的print输出流方法

    今天小编就为大家分享一篇实时获取Python的print输出流方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    wangshuang16318392021-05-12
  • Pythonpython3 queue多线程通信

    python3 queue多线程通信

    这篇文章主要介绍了python3 queue多线程通信,​​Queue​​ 对象已经包含了必要的锁,所以你可以通过它在多个线程间多安全地共享数据,更多相关内容需要...

    lilongsy10682022-07-13
  • PythonPython调用百度AI实现图片上文字识别功能实例

    Python调用百度AI实现图片上文字识别功能实例

    百度AI功能还是很强大的,百度AI开放平台真的是测试接口的天堂,免费接口很多,当然有量的限制,但个人使用是完全够用的,下面这篇文章主要给大家介绍了关...

    鱼尾努力淦饭10112021-12-31