0

我正在使用子圖來顯示一些數字,但標籤與最後一個子圖相混合,所以圖不具有相同的大小。而前5個並不是完美的圓圈。Matplotlib子圖大小不等於

這裏是我的代碼:

for i in range(6): 
    plt.subplot(231 + i) 
    plt.title("Department " + depts[i]) 
    labels = ['Male', 'Female'] 
    colors = ['#3498DB', '#E74C3C'] 
    sizes = [male_accept_rates[i]/(male_accept_rates[i] + female_accept_rates[i]), 
      female_accept_rates[i]/(male_accept_rates[i] + female_accept_rates[i])] 
    patches, texts = plt.pie(sizes, colors=colors, startangle=90) 
plt.axis('equal') 
plt.tight_layout() 
plt.legend(labels, loc="best") 
plt.show() 

而這裏的輸出: piecharts

任何人都可以給我一些建議?非常感激。

回答

1

它看起來plt.axis('equal')只適用於最後一個子圖。所以你的解決方法是把這一行代碼放入循環中。

所以:

import numpy as np 
import matplotlib.pyplot as plt 

depts = 'abcdefg' 
male_accept_rates = np.array([ 2, 3, 2, 3, 4, 5], float) 
female_accept_rates= np.array([ 3, 3, 4, 3, 2, 4], float) 

for i in range(6): 
    plt.subplot(231 + i) 
    plt.title("Department " + depts[i]) 
    labels = ['Male', 'Female'] 
    colors = ['#3498DB', '#E74C3C'] 
    sizes = [male_accept_rates[i]/(male_accept_rates[i] + female_accept_rates[i]), 
      female_accept_rates[i]/(male_accept_rates[i] + female_accept_rates[i])] 
    patches, texts = plt.pie(sizes, colors=colors, startangle=90) 
    plt.axis('equal')                       
plt.tight_layout()                        
plt.legend(labels, loc="best")                     
plt.show() 

現在生產這樣的: enter image description here

+0

解決的問題,太感謝你了! –

+0

只想問一個跟進問題,標籤放在最後一個餡餅上,這不是我想要的。有什麼方法可以將標籤放在其他地方嗎?謝謝。 –

+0

是的,默認情況下,圖例將繪製爲最新的子圖。爲了獲得一組子圖的單個圖例,我會看看這裏:http://stackoverflow.com/questions/9834452/how-do-i-make-a-single-legend-for-many-subplots-with -matplotlib我嘗試了這些解決方案,但它們並不適合我,但我的matplotlib版本有點不同。他們可能會爲你工作。 –