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版本有点不同。他们可能会为你工作。 –