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,那有的朋友會說全英文的誰知道在巴巴啥,于是翻譯過來如下:
- patches 繪制餅圖每一塊的對象
- texts 文本的列表
- autotexts 百分比的文本列表
或者打印出來如下:

這樣我們就明白了。所以第二步,我們需要考慮的是:如何取出我們需要的 文本對象 與 百分比對象 去設置距離。
了解到每個返回的數據類型實際上是 list 列表,而列表里面的每個元素就是圖形中每個文本的對象。
所以,此時我們通過循環(huán)將重疊的元素取出來,而又因為構建繪圖數據中,是索引為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繪制扇形圖標簽重疊內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

