经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
Python数据可视化之环形图
来源:jb51  时间:2022/1/19 13:44:43  对本文有异议

1.引言

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

在这里插入图片描述

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

2.方式一:饼图形式

Matplotlib 中没有绘制圆环图的直接方法,但我们可以使用饼图中的参数wedgeprops来快速地将饼图转换为环形图。

首先我们先来画一个简单的饼图:

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

结果如下:

在这里插入图片描述

接着我们添加参数wedgeprops 并定义环形图边缘的宽度,代码如下:

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

结果如下:

在这里插入图片描述

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

代码如下:

  1. fig, ax = plt.subplots(figsize=(6, 6))
  2. wedgeprops = {'width':0.3, 'edgecolor':'black', 'linewidth':3}
  3. ax.pie([87,13], wedgeprops=wedgeprops, startangle=90, colors=['#5DADE2', '#515A5A'])
  4. plt.title('Worldwide Access to Electricity', fontsize=24, loc='left')
  5. plt.text(0, 0, "87%", ha='center', va='center', fontsize=42)
  6. plt.text(-1.2, -1.2, "Source: ourworldindata.org/energy-access", ha='left', va='center', fontsize=12)
  7. plt.show()

结果如下:

在这里插入图片描述

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

当然,我们可以进一步简化上图图表。

代码如下:

  1. fig, ax = plt.subplots(figsize=(6, 6))
  2. data = [87, 13]
  3. wedgeprops = {'width':0.3, 'edgecolor':'black', 'lw':3}
  4. patches, _ = ax.pie(data, wedgeprops=wedgeprops, startangle=90, colors=['#5DADE2', 'white'])
  5. patches[1].set_zorder(0)
  6. patches[1].set_edgecolor('white')
  7. plt.title('Worldwide Access to Electricity', fontsize=24, loc='left')
  8. plt.text(0, 0, f"{data[0]}%", ha='center', va='center', fontsize=42)
  9. plt.text(-1.2, -1.3, "Source: ourworldindata.org/energy-access", ha='left', va='top', fontsize=12)
  10. plt.show()

结果如下:

3.方式二:条形图形式

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

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

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

结果如下:

在这里插入图片描述

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

代码如下:

  1. from math import pi
  2. fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection':'polar'})
  3. data = 87
  4. startangle = 90
  5. x = (data * pi *2)/ 100
  6. left = (startangle * pi *2)/ 360 #this is to control where the bar starts
  7. plt.xticks([])
  8. plt.yticks([])
  9. ax.spines.clear()
  10. ax.barh(1, x, left=left, height=1, color='#5DADE2')?
  11. plt.ylim(-3, 3)
  12. plt.text(0, -3, "87%", ha='center', va='center', fontsize=42)
  13. plt.show()

结果如下:

在这里插入图片描述

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

代码如下:

  1. from math import pi
  2. import numpy as np
  3. from matplotlib.patches import Patch
  4. from matplotlib.lines import Line2D
  5. fig, ax = plt.subplots(figsize=(6, 6))
  6. ax = plt.subplot(projection='polar')
  7. data = [82, 75, 91]
  8. startangle = 90
  9. colors = ['#4393E5', '#43BAE5', '#7AE6EA']
  10. xs = [(i * pi *2)/ 100 for i in data]
  11. ys = [-0.2, 1, 2.2]
  12. left = (startangle * pi *2)/ 360 #this is to control where the bar starts
  13. # plot bars and points at the end to make them round
  14. for i, x in enumerate(xs):
  15. ? ? ax.barh(ys[i], x, left=left, height=1, color=colors[i])
  16. ? ? ax.scatter(x+left, ys[i], s=350, color=colors[i], zorder=2)
  17. ? ? ax.scatter(left, ys[i], s=350, color=colors[i], zorder=2)
  18. ? ??
  19. plt.ylim(-4, 4)
  20. # legend
  21. legend_elements = [Line2D([0], [0], marker='o', color='w', label='Group A', markerfacecolor='#4393E5', markersize=10),
  22. ? ? ? ? ? ? ? ? ? Line2D([0], [0], marker='o', color='w', label='Group B', markerfacecolor='#43BAE5', markersize=10),
  23. ? ? ? ? ? ? ? ? ? Line2D([0], [0], marker='o', color='w', label='Group C', markerfacecolor='#7AE6EA', markersize=10)]
  24. ax.legend(handles=legend_elements, loc='center', frameon=False)
  25. # clear ticks, grids, spines
  26. plt.xticks([])
  27. plt.yticks([])
  28. ax.spines.clear()
  29. plt.show()

结果如下:

在这里插入图片描述

到此这篇关于Python数据可视化之环形图的文章就介绍到这了,更多相关Python数据可视化环形图内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号