人生苦短,快学Python!今天给大家介绍Python可视化之环形图的绘制。

环形图,也被称为圆环图。它在功能上与饼图相同,只是中间有一个空白,并且能够同时支持多个统计数据。与标准饼图相比,环形图提供了一个更好的数据强度,因为空白中心可以用来显示额外的、相关的数据。

环形图

使用场景:适合展示分类的占比情况,不适合展示分类过多(超过9条数据)或者差别不明显的场景。

在本文中,我们将介绍两种使用 Matplotlib 绘制环形图的方法。一种是使用饼图和参数 wedgeprops 的简单方法;另一种是使用极坐标轴和水平条形图的方法[1]

方法一:饼图

Matplotlib 中没有绘制环形图的方法[2],但是我们可以使用参数 wedgeprops 快速转换饼图为环形图。

下面,先绘制一个简单的让小号用一个简单的饼图。

import matplotlib.pyplot as plt
plt.pie([87,13], startangle=90, colors=['#5DADE2', '#515A5A'])
plt.show()

饼图

接下来,我们我们可以添加参数 wedgeprops ,并定义边缘的宽度。

fig, ax = plt.subplots(figsize=(6, 6))ax.pie([87,13], wedgeprops={'width':0.3}, startangle=90, colors=['#5DADE2', '#515A5A'])

一个环形图

是不是非常简单,其实我们还可以添加一些文字,使得我们的数据可视化更有表现力。

fig, ax = plt.subplots(figsize=(6, 6))
wedgeprops = {'width':0.3, 'edgecolor':'black', 'linewidth':3}
ax.pie([87,13], wedgeprops=wedgeprops, startangle=90, colors=['#5DADE2', '#515A5A'])
plt.title('环形图', fontsize=24, loc='center')
plt.text(0, 0, "87%", ha='center', va='center', fontsize=42)
plt.text(-1.2, -1.2, "来源: Thiago Carvalho", ha='left', va='center', fontsize=12)

带有详细信息的环形图

为了支持中文,我们需要增加这两行Python代码。

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

当我们要显示简单的比例时,环形图特别有用。

然而在我眼中,圆环图最适合用来展示进度条!而要制作类似进度条一样的圆环图,可以可以进一步简化图表。

fig, ax = plt.subplots(figsize=(6, 6))
data = [87, 13]
wedgeprops = {'width': 0.3, 'edgecolor': 'black', 'lw': 3}
patches, _ = ax.pie(data, wedgeprops=wedgeprops, startangle=90, colors=['#5DADE2', 'white'])
patches[1].set_zorder(0)
patches[1].set_edgecolor('white')
plt.title('类似进度条的环形图', fontsize=24, loc='center')
plt.text(0, 0, f"{data[0]}%", ha='center', va='center', fontsiAze=42)
plt.text(-1.2, -1.3, "来源: Thiago Carvalho", ha='left', va='top', fontsize=12)

方法二:条形图

相对于前一个方法,该方案较为复杂,但也提供了更多的自定义选项。

我们先从绘制基础图形开始。

fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection':'polar'})
data = 87
startangle = 90
x = (data * pi *2)/ 100
left = (startangle * pi *2)/ 360 # 转换起始角度
ax.barh(1, x, left=left, height=1, color='#5DADE2')
plt.ylim(-3, 3)

如果想制作成前面一样的进度条,还需要进行更多的操作。

fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection':'polar'})
data = 87
startangle = 90
x = (data * pi *2)/ 100
left = (startangle * pi *2)/ 360 #控制起始位置
plt.xticks([])
plt.yticks([])
ax.spines.clear()
ax.barh(1, x, left=left, height=1, color='#5DADE2')
plt.ylim(-3, 3)
plt.text(0, -3, "87%", ha='center', va='center', fontsize=42)

进度条 - 环形图

使用这种方法的话,我们拥有更多的自定义选择。比如可以添加多个进度条、定义它们之间的距离等等。

篇幅限制,只显示部分代码吗,完整代码下载见文末。

# 在末尾标出线条和点来使它们变圆
for i, x in enumerate(xs):ax.barh(ys[i], x, left=left, height=1, color=colors[i])ax.scatter(x+left, ys[i], s=350, color=colors[i], zorder=2)ax.scatter(left, ys[i], s=350, color=colors[i], zorder=2)plt.ylim(-4, 4)legend_elements = [Line2D([0], [0], marker='o', color='w', label='Group A', markerfacecolor='#4393E5', markersize=10),Line2D([0], [0], marker='o', color='w', label='Group B',markerfacecolor='#43BAE5', markersize=10),Line2D([0], [0], marker='o', color='w', label='Group C', markerfacecolor='#7AE6EA', markersize=10)]
ax.legend(handles=legend_elements, loc='center', frameon=False)plt.xticks([])
plt.yticks([])
ax.spines.clear()

好了,以上就是今天介绍的两种使用 Matplotlib 绘制环形图的方法。

另外,我还看过另外一个骚操作,也就是在饼图的中心绘制一个白色圆圈,使之变成一个环形图。

如果大家觉得本文还不错,记得给个一键三连!

参考资料

[1]

Towardsdatascience: https://towardsdatascience.com/

[2]

Matplotlib: https://github.com/matplotlib/matplotlib

各位伙伴们好,詹帅本帅搭建了一个个人博客和小程序,汇集各种干货和资源,也方便大家阅读,感兴趣的小伙伴请移步小程序体验一下哦!(欢迎提建议)
推荐阅读牛逼!Python常用数据类型的基本操作(长文系列第①篇)
牛逼!Python的判断、循环和各种表达式(长文系列第②篇)牛逼!Python函数和文件操作(长文系列第③篇)牛逼!Python错误、异常和模块(长文系列第④篇)

Python可视化 | Matplotlib绘制圆环图的两种方法!相关推荐

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

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

  2. 数据可视化: matplotlib绘制动态图及3维动画

    动画可以有趣地展示某种现象.相比于静态图表,人们更容易被动画和交互式的图表所吸引.在描绘时间序列数据时,动画更有意义,例如多年来股票价格的波动,过去十年气候的季节性变化和和趋势,因为我们可以看到特定参 ...

  3. Python可视化matplotlib绘制三维可视化图形(Three-Dimensional)

    Python可视化matplotlib绘制三维可视化图形(Three-Dimensional) Matplotlib最初设计时只考虑二维可视化绘图.大约在1.0版本发布的时候,在Matplotlib的 ...

  4. Python可视化:绘制折线图、设置线条形状和marker样式

    绘制折线图.设置线条形状和marker样式 Python可视化:绘制折线图.设置线条形状和marker样式 修改线形:线形可选集合 修改marker:marker可选集合 Python可视化:绘制折线 ...

  5. python话雷达图-python使用matplotlib绘制雷达图

    本文实例为大家分享了python使用matplotlib绘制雷达图的具体代码,供大家参考,具体内容如下 示例代码: # encoding: utf-8 import pandas as pd impo ...

  6. python画雷达图-python使用matplotlib绘制雷达图

    本文实例为大家分享了python使用matplotlib绘制雷达图的具体代码,供大家参考,具体内容如下 示例代码: # encoding: utf-8 import pandas as pd impo ...

  7. python画矩阵热图_如何用python的matplotlib绘制热图

    python使用matplotlib绘制热图 python常用的绘图库就是matplotlib,今天在给公司绘图时,偶然间发现matplotlib可以绘制热图,并且十分简洁,拿出来跟大家分享一下.(由 ...

  8. python matplotlib在一张画布上画多个图的两种方法,plt.subplot(),plt.subplots()。

    Matplotlib在一张画布上画多个图的两种方法,plt.subplot,plt.subplots. 目录 回顾 plt.subplots()画法 plt.subplot()画法 保存 回顾 之前也 ...

  9. SOLIDWORKS技巧培训-绘制零件滚花的两种方法

    最近常有朋友咨询SolidWorks零件如何做滚花的效果,下面给大家整理了绘制零件滚花的一个培训教程: 作为机械设计师,滚花应该都不陌生,真要说起来,滚花绘制其实也不算难,跟着我们一步一步来,应该能很 ...

最新文章

  1. 数据预处理为什么使用独热编码one-hot
  2. 文巾解题 175. 组合两个表
  3. OkHttp如何移除User-Agent,Accept-Encoding等框架自动添加的请求头参数
  4. gvim e303 无法打开 “[未命名]“的交换文件,恢复将不可能
  5. 在ASP.NET MVC3项目中,自定义404错误页面
  6. Adding Applications for JavaScript Storefronts in SAP 电商云
  7. 取模除法(逆元)(费马小定理)(线性求逆元)
  8. 射灯安装方法图解_家居射灯怎么选?第三代宜美SMD射灯给你正解
  9. 软件学院本科毕业设计论文格式详解
  10. TextView跑马灯
  11. java音乐bpm,Java Tempo.setBpm方法代码示例
  12. 新版edge浏览器没有internet选项怎么办?
  13. 可乐要加冰才好喝啊---装饰模式
  14. 软件专业学习之成长志(四)
  15. PWM的基本原理及其应用实例
  16. 为什么 MongoDB 索引选择B-树,而 Mysql 选择B+树(精干总结)
  17. 苹果手机互传一键换机
  18. 第一次CCF计算机软件能力认证
  19. 如何从一台远程服务器向另一台远程服务器上读取文件
  20. 2021最新 阿里云购买学生机服务器搭建部署一条龙服务

热门文章

  1. 企业面试题库_数据库部分
  2. servlet与tomcat的关系
  3. ThinkPHP5跨控制器调用
  4. Go线程安全:我们不用考虑同步的问题 不用考虑数据污染的情况
  5. 数据查找matlab,MATLAB:使用矢量化查找已排序数据的统计信息
  6. java8 collect 类型转换_Java 8 新特性 Stream类的collect方法
  7. 固件升级校准_RS网络分析仪自检自校准方法-Agitekservice
  8. SQL中left join、right join、inner join的区别
  9. 小米路由器sn算ssh密码_【玩转路由】小米路由器开启SSH
  10. collection集合 地址_java.util包下的集合