Python可视化

您所在的位置:网站首页 python圆环图改成图案填充怎么改 Python可视化

Python可视化

2024-06-06 19:09| 来源: 网络整理| 查看: 265

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

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

ea37abfb29cf03bf1488c9458011bdc5.png 环形图

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

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

方法一:饼图

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

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

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

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

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

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

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) ebcc82cb2ffdbf9a8c28ca2a014a755e.png 带有详细信息的环形图

为了支持中文,我们需要增加这两行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) 2fbd55a6a2d2c92af47f3d0aa5afc229.png 方法二:条形图

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

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

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) 31d9730c73b07f78db1752b823045ee6.png

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

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) 51c935804c7793035c7be3f586cf9e9e.png 进度条 - 环形图

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

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

# 在末尾标出线条和点来使它们变圆 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() 85db2d78dd20a1c40a2507d7cdf9bcf2.png

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

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

9252150f2ee21dfb7ab4958ca30c4c2c.png

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

参考资料

[1]

Towardsdatascience: https://towardsdatascience.com/

[2]

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

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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3