Python Matplotlib绘制扇形图标签重叠问题解决过程

Stephenie ·
更新时间:2024-11-01
· 340 次阅读

目录

问题如下

解决

总结 

问题如下

当我使用Matplotlib绘制图形时,经常会遇到一些比例太小导致 百分比标签 以及 文本标签 重叠问题。这样的话非常影响美观,效果在BOSS心中的大打折扣。

代码如下:

from matplotlib import pyplot as plt frac = [0,0,18/50,16/50,9/50,6/50,2/50] label = ['[3,4]','(4,5]','(5,6]','(6,7]','(7,8]','(8,9]','(9,10]'] plt.pie(frac,labels=label,autopct="%.2f%%",textprops={"size":10},shadow=True) plt.show() 解决

老Amy不甘示弱,遇到问题就是肝!首先,我们解决的思路是,使得重叠标签中,一个进行向上挪动一丢丢即可。

那问题是代码怎么来实现呢?

首先,我们需要了解到,plt.pie()有多个返回值,参考官网如下:

oh no,那有的朋友会说全英文的谁知道在巴巴啥,于是翻译过来如下:

patches 绘制饼图每一块的对象

texts 文本的列表

autotexts 百分比的文本列表

或者打印出来如下:

这样我们就明白了。所以第二步,我们需要考虑的是:如何取出我们需要的 文本对象百分比对象 去设置距离。

了解到每个返回的数据类型实际上是 list 列表,而列表里面的每个元素就是图形中每个文本的对象

所以,此时我们通过循环将重叠的元素取出来,而又因为构建绘图数据中,是索引为0索引为1两个元素为0导致重叠。所以我们获取其中一个即可。

代码如下:

from matplotlib import pyplot as plt frac = [0,0,18/50,16/50,9/50,6/50,2/50] label = ['[3,4]','(4,5]','(5,6]','(6,7]','(7,8]','(8,9]','(9,10]'] patches,texts,autotexts = plt.pie(frac,labels=label,autopct="%.2f%%",textprops={"size":10},shadow=True) for i in range(len(autotexts)): if i == 0: print(texts[i]) print(autotexts[i]) plt.show()

那问题是,我们怎么去设置它的位置呢?因为matplotlib关于设置的方法非常多,而我们并不主张记忆,更加主张时用时查。所以这个时候就需要借助我们的官网了。

查官网的第一步是需要知道,该数据是什么类型的对象,则使用type()输出其类型。

print(type(texts[i])) print(type(autotexts[i]))

然后我们就去官网搜索matplotlib.text.Text,定位:

ohohoh,至于这些英文就需要大家自己去看了,你懂的吧!所以接下来,我们来写代码解决我们的问题:

from matplotlib import pyplot as plt frac = [0,0,18/50,16/50,9/50,6/50,2/50] label = ['[3,4]','(4,5]','(5,6]','(6,7]','(7,8]','(8,9]','(9,10]'] patches,texts,autotexts = plt.pie(frac,labels=label,autopct="%.2f%%",textprops={"size":10},shadow=True) for i in range(len(autotexts)): if i == 0: print(texts[i].set_y(0.1)) print(autotexts[i].set_y(0.1)) plt.show()

总结 

到此这篇关于Python Matplotlib绘制扇形图标签重叠问题解决的文章就介绍到这了,更多相关Matplotlib绘制扇形图标签重叠内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!



matplotlib 标签 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号