gpt4 book ai didi

python - 循环生成子图时出错

转载 作者:IT老高 更新时间:2023-10-28 20:56:59 25 4
gpt4 key购买 nike

我有一个关于从数据框中循环绘制多个子图时收到的错误的问题。

我的数据框有很多列,我遍历其中的每列都有一个子图。

这是我的代码

 def plot(df):
channels=[]
for i in df:
channels.append(i)

fig, ax = plt.subplots(len(channels), sharex=True, figsize=(50,100))

plot=0
for j in df:

ax[plot].plot(df["%s" % j])
ax[plot].set_xlabel('%s' % j)
plot=plot+1

plt.tight_layout()
plt.show()

我得到的情节很好,但也是一个空框架和错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\AClayton\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 538, in runfile
execfile(filename, namespace)
File "C:/Users/AClayton/Desktop/Data/TS.py", line 67, in <module>
plot(all_data)
File "C:/Users/AClayton/Desktop/Data/TS.py", line 49, in plot
ax[plot].plot(reader["%s" % j])
TypeError: 'AxesSubplot' object does not support indexing

如果第一个图制作得很好,我看不出这个错误来自哪里,或者为什么会产生第二个图?

感谢您的任何见解

最佳答案

如果您绘制多个子图,plt.subplots()返回数组中的轴,该数组允许像使用 ax[plot] 一样进行索引.当仅创建 1 个子图时,默认情况下它返回轴本身,而不是数组中的轴。

所以你的错误发生在 len(channels)等于 1。您可以通过设置 squeeze=False 来抑制此行为。在 .subplots()命令。这迫使它始终返回一个带有轴的“Rows x Cols”大小的数组,即使它只有一个。

所以:

 def plot(df):
channels=[]
for i in df:
channels.append(i)

fig, ax = plt.subplots(len(channels),1, sharex=True, figsize=(50,100), squeeze=False)

plot=0
for j in df:

ax[plot,0].plot(df["%s" % j])
ax[plot,0].set_xlabel('%s' % j)
plot=plot+1

plt.tight_layout()
plt.show()

通过添加 squeeze关键字你总是得到一个二维数组作为返回,因此子图的索引更改为 ax[plot,0] .我还专门添加了列数(在本例中为 1)。

关于python - 循环生成子图时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19953348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com