此程序非常简单,但我不知道为什么会收到此错误:
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])
答案 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)
您的方法适用于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])