python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Matplotlib绘制扇形图标签重叠

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

作者:老Amy

在使用Matplotlib画图时,常会遇到标签重叠问题的时候,所以下面这篇文章主要给大家介绍了关于Python Matplotlib绘制扇形图标签重叠问题的解决过程,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

问题如下

当我使用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,那有的朋友会说全英文的谁知道在巴巴啥,于是翻译过来如下:

或者打印出来如下:

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

了解到每个返回的数据类型实际上是 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绘制扇形图标签重叠内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文