IndexError:基本程序数组的索引过多

时间:2018-10-25 16:46:41

标签: python pandas matplotlib

此程序非常简单,但我不知道为什么会收到此错误:

  

IndexError:数组的索引过多

已捕获到df1的错误(甚至没有转到df2)。有人可以解释为什么我得到这个错误吗?我认为更大的问题是拥有我不了解的2 x 1子图的逻辑是什么。

这是程序:

import pandas as pd
import matplotlib.pyplot as plt

x = range(5)
y = range(0,10,2)

w = x
z = y

df1 = pd.DataFrame(data = {'col1':x,'col2':y})
df2 = pd.DataFrame(data = {'col1':w,'col2':z})

fig, axes = plt.subplots(2,1)
df1.plot(ax=axes[0,0])
df2.plot(ax=axes[1,0])

1 个答案:

答案 0 :(得分:1)

您需要指定正确的索引。由于您正在使用plt.subplots(2,1),因此axes对象的长度为2,其中分别使用索引[0][1]访问第一个和第二个子图。如果执行print (axes.shape),则将得到(2,),因此没有第二个索引。对于plt.subplots(2,2)print (axes.shape)将为(2,2)提供可以使用双索引的位置。

如果您有多于1列,则可以使用axes[0, 0]axes[1, 0]axes[0, 1]axes[1, 1]等。对于单个列,axes[0, 0]必须替换为ax[0]axes[1, 0]必须替换为ax[1]

fig, axes = plt.subplots(2,1)
print (len(axes))
# 2

df1.plot(ax = axes[0])
df2.plot(ax = axes[1])

替代方法是

axes[0].plot(df1)
axes[1].plot(df2)

enter image description here

您的方法适用于2 x 2的子图

fig, axes = plt.subplots(2,2)
print (axes.shape)
# (2, 2)

df1.plot(ax = axes[0,0])
df2.plot(ax = axes[0,1])
df1.plot(ax = axes[1,0])
df2.plot(ax = axes[1,1])

enter image description here