在同一个图上拟合3个子图

时间:2015-08-17 12:23:21

标签: python matplotlib

我试图在同一个图上绘制3个子图,由于某种原因我的代码不起作用。前两个出现在同一个数字上,但最后一个没出现。有人可以帮助我:

fig = plt.figure(0, figsize = (12,10))

fig.add_subplot(221)
bike_gender.plot(kind='bar',title='Trip Duration by Gender', figsize= (9,7))
bar_plot.set_ylabel('Trip duration')
bar_plot.set_xlabel('Gender')
bar_plot.xaxis.set_ticklabels(['Men', 'Women', 'Unknown'])
bar_plot.text (0, 400000, 'Men = 647,466', bbox=dict(facecolor='red', alpha=0.5))
bar_plot.text (1, 400000, 'Women = 202,136', bbox=dict(facecolor='red', alpha=0.5))
bar_plot.text (2, 400000, 'Unknown = 119,240', bbox=dict(facecolor='red', alpha=0.5))

fig.add_subplot(222)
labels = 'Subscriber \n (849,778)', 'Customer \n (119,064)'
pie_chart = bike_user.plot(kind='pie', title= 'Breakdown of usertype', labels = labels, autopct='%1.1f%%', figsize=(9,7))

fig.add_subplot(212)
frequencies.plot(kind='bar',color=['blue','yellow','green'], figsize=(12, 4), stacked=True)

plt.show()

2 个答案:

答案 0 :(得分:1)

最后一个情节应该实际出现在图中,但在第二个情节后面。

这是因为你的第三个子图是在一个网格中,其形状与你已经使用的不同。您前2个图表位于2x2网格(add_subplot(22.))上,而最后一个图表位于2x1网格(add_subplot(21.))上。

作为快速解决方案,您可以尝试最后一个情节:

fig.add_subplot(223)

它应该有用。

但是,您似乎想要使用pandas制作情节,并将其显示在具有子图的axes的特定figure中。为此,您应该使用:

fig, ax = plt.subplots(2,2, figsize=(12,10))
bike_gender.plot(kind="bar", ax=ax[0], title='Trip Duration by Gender')
bike_user.plot(kind='pie', ax=ax[1], title= 'Breakdown of usertype')
frequencies.plot(kind='bar', ax=ax[2], color=['blue','yellow','green'], stacked=True)

HTH

答案 1 :(得分:1)

另一种方法是使用gridspec

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

fig = plt.figure()

data = pd.DataFrame(np.random.rand(10,2))

gs = gridspec.GridSpec(2,2)

ax1=fig.add_subplot(gs[0,0])
ax2=fig.add_subplot(gs[0,1])
ax3=fig.add_subplot(gs[1,:])

data.plot(ax = ax1)
data.plot(ax = ax2)
data.plot(ax = ax3)

plt.show()

enter image description here