Matplotlib subplot2grid绘制pandas 0.16.1中的IndexError

时间:2015-06-05 03:16:45

标签: python pandas matplotlib histogram

我有(5)大熊猫系列我试图在(5)图上绘图。我想拥有它们,使它们看起来像这种格式,最后一行的第5个图表,居中(不要专注于图表的内容,只是定位) enter image description here

但是在pandas 0.16.1中,我在第5张图表上得到了索引错误。这是我的问题的MCVE示例,你们可以复制并粘贴并亲自尝试。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.style.use('ggplot')

fig = plt.figure() 

firstperiod = pd.Series({1:1, 2:2, 3:3, 4:3, 5:4}) 
secondperiod = pd.Series({1:1, 2:1, 3:2, 4:2}) 
thirdperiod = pd.Series({1:4, 2:4, 3:5, 4:1, 5:1, 6:3}) 
fourthperiod = pd.Series({1:3, 2:3, 3:1, 4:6, 5:7, 6:5})
fifthperiod = pd.Series({1:2, 2:2, 3:1, 4:5, 5:5})

ax1 = plt.subplot2grid((6,4), [0,0], 2, 2) 
firstperiod.plot(kind='hist', bins=5) 

ax2 = plt.subplot2grid((6,4), [0,2], 2, 2) 
secondperiod.plot(kind='hist', bins=4) 

ax3 = plt.subplot2grid((6,4), [2,1], 2, 2) 
thirdperiod.plot(kind="hist", bins=6) 

ax4 = plt.subplot2grid((6,4), [2,2], 2, 2) 
fourthperiod.plot(kind="hist", bins=6) 

ax5 = plt.subplot2grid((6,4), [4,1], 2, 2) 
fifthperiod.plot(kind="hist", bins=5) 

plt.tight_layout() 
plt.show()

执行到最后一个(第5个)图表,然后弹出:

IndexError: index 4 is out of bounds for axis 0 with size 4

是什么给出的?以及如何解决这个问题?

先谢谢你们,欣赏它。

1 个答案:

答案 0 :(得分:2)

这就是您所追求的......我已添加plt.ion()以使其进入交互模式,并plt.draw()添加每个数字。

通过这样做,很明显轴被定义为(y,x)而不是(x,y) ......

This reference也可能在将来有所帮助

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.style.use('ggplot')

plt.ion()
fig = plt.figure()

firstperiod = pd.Series({1:1, 2:2, 3:3, 4:3, 5:4}) 
secondperiod = pd.Series({1:1, 2:1, 3:2, 4:2}) 
thirdperiod = pd.Series({1:4, 2:4, 3:5, 4:1, 5:1, 6:3}) 
fourthperiod = pd.Series({1:3, 2:3, 3:1, 4:6, 5:7, 6:5})
fifthperiod = pd.Series({1:2, 2:2, 3:1, 4:5, 5:5})

ax1 = plt.subplot2grid((3,4), (0,0), colspan=2) 
firstperiod.plot(kind='hist', bins=5) 
plt.draw()
raw_input()

ax2 = plt.subplot2grid((3,4), (0,2), colspan=2) 
secondperiod.plot(kind='hist', bins=4) 
plt.draw()
raw_input()

ax3 = plt.subplot2grid((3,4), (1,0), colspan=2) 
thirdperiod.plot(kind="hist", bins=6) 
plt.draw()
raw_input()

ax4 = plt.subplot2grid((3,4), (1,2), colspan=2)
fourthperiod.plot(kind="hist", bins=6) 
plt.draw()
raw_input()

ax5 = plt.subplot2grid((3,4), (2,1), colspan=2)
fifthperiod.plot(kind="hist", bins=5)
plt.draw()
raw_input()

plt.tight_layout()
plt.draw()

我将列高从6更改为3,因为上面显示的图表colspanrowspan的两倍