使用matplotlib制作多个饼图

6

我试图使用matplotlib同时显示两个图表。

但是我必须关闭一个图表,然后才能看到另一个图表。有没有办法同时显示两个或更多的图表。

这是我的代码:

num_pass=np.size(data[0::,1].astype(np.float))
num_survive=np.sum(data[0::,1].astype(np.float))
prop=num_survive/num_pass
num_dead=num_pass-num_survive
#print num_dead


labels='Dead','Survived'
sizes=[num_dead,num_survive]
colors=['darkorange','green']
mp.axis('equal')
mp.title('Titanic Survival Chart')
mp.pie(sizes, explode=(0.02,0), labels=labels,colors=colors,autopct='%1.1f%%', shadow=True, startangle=90)
mp.show()

women_only_stats = data[0::,4] == "female" 
men_only_stats = data[0::,4] != "female" 

# Using the index from above we select the females and males separately
women_onboard = data[women_only_stats,1].astype(np.float)     
men_onboard = data[men_only_stats,1].astype(np.float)

labels='Men','Women'
sizes=[np.sum(women_onboard),np.sum(men_onboard)]
colors=['purple','red']
mp.axis('equal')
mp.title('People on board')
mp.pie(sizes, explode=(0.01,0), labels=labels,colors=colors,autopct='%1.1f%%', shadow=True, startangle=90)
mp.show()

如何同时显示两个图形?

你应该在创建所有图表后才调用mp.show() - dwitvliet
@Banana 也做了同样的事情,它展示了第二个饼图完全重叠在第一个饼图上。我可以看到第一个饼图的值,但无法看到实际的图表。 - kevin.desai
4个回答

14

有几种方法可以实现这一点,其中最简单的方法是使用多个图形编号。只需告诉matplotlib你正在处理独立的图形,然后同时显示它们:

import matplotlib.pyplot as plt

plt.figure(0)
# Create first chart here.

plt.figure(1)
# Create second chart here.

plt.show() #show all figures

它将所有数字分开显示 - 8oris

13

除了Banana的答案之外,您还可以在同一图中的不同子图中绘制它们:

from matplotlib import pyplot as plt
import numpy as np

data1 = np.array([0.9, 0.1])
data2 = np.array([0.6, 0.4])

# create a figure with two subplots
fig, (ax1, ax2) = plt.subplots(1, 2)

# plot each pie chart in a separate subplot
ax1.pie(data1)
ax2.pie(data2)

plt.show()

这些看起来像椭圆形图表,而不是圆形的...如何调整它们的可视化呢? - FaCoffee
4
你可以将子图的长宽比设置为相等,例如 plt.subplots(1, 2, subplot_kw={'aspect':'equal'}) - ali_m
@ali_m,OP的问题是:如何在单个图中以指定的(x,y)坐标为中心绘制多个饼图,并具有不同的大小? - alancalvitti

2

或者,您可以使用子图/多个轴将多个饼图放在同一张图中:

mp.subplot(211)
mp.pie(..)
mp.subplot(212)
mp.pie(...)
mp.show()

1

是的。 User: Banana 的答案对我有用。

当我运行plt.show()时,我有4个图表,所有4个图表都以单独的饼图弹出,因此我相信您可以使用尽可能多的figure数字。

plt.figure(0)   # Create first chart here and specify all parameters below.
plt.figure(1)   # Create second chart here and specify all parameters below.
plt.figure(3)   # Create third chart here and specify all parameters below.
plt.figure(4)   # Create fourth chart here and specify all parameters below.
plt.show()      # show all figures.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接