Matplotlib subplot2grid 在 pandas 0.16.1 中绘制 IndexError
Matplotlib subplot2grid plotting IndexError in pandas 0.16.1
我有 (5) 个 pandas 系列,我正试图在 (5) 个图表上绘制。我想让它们看起来像这种格式,最后一行的第 5 个图表本身居中(不要关注图表的内容,只关注定位)
但是在 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
什么给了?以及如何解决这个问题?
在此先感谢大家,不胜感激。
这就是您想要的...我添加了 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,因为您上面显示的图表的 colspan
是 rowspan
的两倍
我有 (5) 个 pandas 系列,我正试图在 (5) 个图表上绘制。我想让它们看起来像这种格式,最后一行的第 5 个图表本身居中(不要关注图表的内容,只关注定位)
但是在 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
什么给了?以及如何解决这个问题?
在此先感谢大家,不胜感激。
这就是您想要的...我添加了 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,因为您上面显示的图表的 colspan
是 rowspan