Python Matplotlib绘制扇形图标签重叠问题解决过程
本文介绍如何利用Matplotlib绘制扇形图时解决标签重叠问题。通过获取pie()返回的文本对象列表,识别索引为0和1的重叠元素,并使用set_y()方法微调其垂直位置,从而提升图表美观度。
问题如下
在使用Matplotlib绘制图形时,常遇到因比例过小导致百分比标签与文本标签重叠的情况。这不仅影响视觉效果,也降低了图表的专业性和可读性。

代码如下:
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()
解决
面对此类问题,核心思路是让重叠的标签中其中一个向上微调位置。
具体如何通过代码实现这一调整呢?
首先,需要了解plt.pie()函数返回多个值,具体参考官方文档说明:

对于不熟悉英文文档的用户,以下是相关内容的中文翻译:
- patches 表示绘制饼图每一块的对象
- texts 文本的列表
- autotexts 百分比的文本列表
或者通过打印输出查看如下:

通过上述信息,我们可以明确数据结构。因此,第二步需要考虑如何提取所需的文本对象与百分比对象,以便设置它们的位置间距。
了解到每个返回的数据类型实际上是list列表,而列表中的每个元素对应图形中每个文本的对象。
因此,我们可以通过循环遍历取出重叠的元素。由于在构建绘图数据时,索引为0与索引为1的两个元素导致了重叠,我们只需获取其中一个进行调整即可。
代码如下:
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,定位到相关文档:


至于这些英文文档的具体内容,大家可以自行查阅。接下来,我们编写代码来解决这个问题:
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绘制扇形图标签重叠内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













