脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python Matplotlib绘制扇形图标签重叠问题解决过程

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

2022-08-03 11:45老Amy Python

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

问题如下

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

Python 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()

解决

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

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

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

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

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

  • patches 绘制饼图每一块的对象
  • texts 文本的列表
  • autotexts 百分比的文本列表

或者打印出来如下:

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

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

了解到每个返回的数据类型实际上是 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()

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

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

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

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

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

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

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

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

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绘制扇形图标签重叠问题解决过程

总结 

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

原文地址:https://blog.csdn.net/weixin_44352981/article/details/116947159

延伸 · 阅读

精彩推荐