1.引言

环形图(圆环)在功能上与饼图相同,整个环被分成不同的部分,用各个圆弧来表示每个数据所占的比例值。但其中心的空白可用于显示其他相关数据展示,相比于标准饼图提供了更丰富的数据信息输出。

在本文中,我们将介绍 Matplolib中绘制圆环图的两种方法。使用饼图和参数wedgeprops 的简单方法,以及使用极轴和水平条形图的复杂方法。

闲话少说,我们直接开始吧。 :)

2.方式一:饼图形式

在 Matplotlib 中没有绘制圆环图的直接方法,但我们可以使用饼图中的参数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'])
plt.show()

结果如下:

这很简单。现在我们可以使用中心的空间来使我们的数据更加明显。代码如下:

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('Worldwide Access to Electricity', fontsize=24, loc='left')
plt.text(0, 0, "87%", ha='center', va='center', fontsize=42)
plt.text(-1.2, -1.2, "Source: ourworldindata.org/energy-access", ha='left', va='center', fontsize=12)
plt.show()

结果如下:


当我们有一个简单的比较需要显示时,圆环图特别有用。在我看来,使用它们的最佳方式是像一个圆形进度条,比如我们有一个单一的比例要突出显示的例子。

当然,我们可以进一步简化上图图表。代码如下:

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('Worldwide Access to Electricity', fontsize=24, loc='left')
plt.text(0, 0, f"{data[0]}%", ha='center', va='center', fontsize=42)
plt.text(-1.2, -1.3, "Source: ourworldindata.org/energy-access", ha='left', va='top', fontsize=12)
plt.show()

结果如下:

3.方式二:条形图形式

尽管此解决方案比前一个解决方案更复杂,但它为定制提供了一些令人兴奋的选项。

我们还是从一个简单的例子开始,代码如下:

from math import pi
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection':'polar'})
data = 87
startangle = 90
x = (data * pi *2)/ 100 # convert x data from percentage
left = (startangle * pi *2)/ 360 # convert start from angle
ax.barh(1, x, left=left, height=1, color='#5DADE2')
plt.ylim(-3, 3)
plt.show()

结果如下:

接着我们来处理角度,我们必须先转换每个元素的 x 坐标,然后再将其添加到轴上。代码如下:

from math import pi
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 #this is to control where the bar starts
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)
plt.show()

结果如下:

使用此方法我们也达到了上述同样的效果;当然此时我们添加多个进度条、定义它们之间的距离来使得可视化效果更加丰富。
代码如下:

from math import pi
import numpy as np
from matplotlib.patches import Patch
from matplotlib.lines import Line2D
fig, ax = plt.subplots(figsize=(6, 6))
ax = plt.subplot(projection='polar')
data = [82, 75, 91]
startangle = 90
colors = ['#4393E5', '#43BAE5', '#7AE6EA']
xs = [(i * pi *2)/ 100 for i in data]
ys = [-0.2, 1, 2.2]
left = (startangle * pi *2)/ 360 #this is to control where the bar starts
# plot bars and points at the end to make them round
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
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)
# clear ticks, grids, spines
plt.xticks([])
plt.yticks([])
ax.spines.clear()
plt.show()

结果如下:

4.总结

本文介绍了使用两种不同的方式来可视化环形图,并均给出了完整的代码示例。

您学废了吗?


关注公众号《AI算法之道》,获取更多AI算法资讯。

参考

Python数据可视化之环形图相关推荐

  1. Python数据可视化之折线图

    Python数据可视化之折线图 提示:前言 Python数据可视化之折线图 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Python数据可视化之折线图 前言 一.导入包 ...

  2. python数据可视化地图_python--地图可视化

    python地图可视化可用python包Basemap:本篇总结用到百度的Echars,http://echarts.baidu.com/:Echarts 是百度开源的一个数据可视化 JS 库. 安装 ...

  3. python数据可视化:折线图、条形图、饼状图显示

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. matplotlib是Python的一个强大的2D图形绘制库,使用需要安装 ...

  4. Python数据可视化:象限图的应用

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 萝卜 | 作者 数据不吹牛 | 来源 Python 的绘图功能非常强大,如 ...

  5. Python数据可视化-Matplotlib线性图(折线图等) 代码教学 Part 1

    接下来要进行代码教学的几个部分: 画直线图 画图 plot函数:(变量 颜色 线宽 线种类 图例) gca : get current axis 得到现在的坐标轴 散点图 加标注的两种方法 防止自己的 ...

  6. python饼状图教程_Python数据可视化:饼状图的实例讲解

    使用python实现论文里面的饼状图: 原图: python代码实现: # # 饼状图 # plot.figure(figsize=(8,8)) labels = [u'Canteen', u'Sup ...

  7. python画折线图详解-Python数据可视化(一) 绘制折线图和散点图

    数据可视化示例 对数据可视化的浅认知 数据可视化是任何数据科学或机器学习的重要组成部分.可视化能将数据以更加直观的方式展现出来,使数据更加客观.更具说服力.同时,也易于发现隐藏在数据中的规律和意义.尤 ...

  8. 最近很火的数据动图python_12个流行的Python数据可视化库总结

    总结了10个不同领域的 Python 数据可视化库,有常用的,也有比较小众的. 1.  matplotlib matplotlib是Python数据可视化库的OG.尽管它已有十多年的历史,但仍然是Py ...

  9. json树状图可视化_12个流行的Python数据可视化库总结

    总结了10个不同领域的 Python 数据可视化库,有常用的,也有比较小众的. 1. matplotlib matplotlib是Python数据可视化库的OG.尽管它已有十多年的历史,但仍然是Pyt ...

最新文章

  1. 3D中的OBJ文件格式详解(转载)
  2. python全栈学习笔记(一)网络基础之网络协议篇
  3. Oracle数据库的轻松干净卸载
  4. oracle PL/SQL
  5. 【小白学PyTorch】扩展之Tensorflow2.0 | 20 TF2的eager模式与求导
  6. 更改盘符不成功_酷小二资讯:天猫店铺转让后可以更改类目和店铺名吗?
  7. 怎样用计算机算出别人的出生日期,【怀孕出生日期计算器_怀孕出生日期计算器专题】- 天鹅到家...
  8. S3C2440扩展SDRAM
  9. 《与mysql零距离接触》视屏学习笔记
  10. java中位数_java 计算中位数方法
  11. 自动化构建部署之Jenkins安装【Docker容器】
  12. 用java编写一个课表串口,安卓课程表源代码
  13. 【算法】LSM-tree 基本原理及应
  14. iOS 最新App提交上架流程及部分问题的解决方案2016.12.21,感谢原博主!!!
  15. scala trait 另一种用法类混入
  16. 『迷你教程』数据分析都不知道的非参数统计概论
  17. Displaytag 详解
  18. ISA Server 新手完全进阶指南
  19. Builder模式——自由扩展你的项目
  20. javaFX 学习之 超链接(HyperLink) 转载

热门文章

  1. rocksdb原理_看图了解RocksDB
  2. Python | 宝石与石头
  3. 阿里云MaxCompute介绍
  4. matplotlib.pyplot画图 图片的二进制流的获取
  5. Python例题100道
  6. 读书也享受时间的复利
  7. vue 鼠标点击图片做红点标记
  8. 华大智造国产基因测序仪全球装机量再创新高,突破1000台
  9. goland的激活码
  10. python判断文件后缀_Python 判断文件后缀是否被篡改