【发布时间】:2021-01-30 23:08:30
【问题描述】:
我尝试在一个图中为每列('AFp1'、'AFp2'、'F9')绘制 3 个图,x 轴为“freqs”,y 轴为“psd”。我正在寻找一种通过变量的循环,因为最后我想在一个图中绘制 >50 个图。
Here我找到了一个代码,似乎可以做我想做的事,但我没有让它工作:
num_plots = 20
colormap = plt.cm.gist_ncar
plt.gca().set_prop_cycle(plt.cycler('color', plt.cm.jet(np.linspace(0, 1, num_plots))))
x = np.arange(10)
labels = []
for i in range(1, num_plots + 1):
plt.plot(x, i * x + 5 * i)
labels.append(r'$y = %ix + %i$' % (i, 5*i))
plt.legend(labels, ncol=4, loc='upper center',
bbox_to_anchor=[0.5, 1.1],
columnspacing=1.0, labelspacing=0.0,
handletextpad=0.0, handlelength=1.5,
fancybox=True, shadow=True)
plt.show()
这是我尝试在我的 for 循环中包含此代码的方式:
path = r'C:/M'
for fil in os.listdir(path):
#extract SUBJECT name
r = (fil.split(" ")[0])
#load file in pandas dataframe
data = pd.read_csv(path+f'{r} task.txt',sep=",",usecols= 'AFp1','AFp2','F9'])
data.columns = ['AFp1','AFp2','F9']
num_plots = 3
for columns in data(1, num_plots + 1):
freqs, psd = signal.welch(data[columns], fs=500,
window='hanning',nperseg=1000, noverlap=500, scaling='density', average='mean')
colormap = plt.cm.gist_ncar
plt.gca().set_prop_cycle(plt.cycler('color', plt.cm.jet(np.linspace(0, 1, num_plots))))
plt.plot(freqs, psd)
plt.legend(columns, ncol=4, loc='upper center',
bbox_to_anchor=[0.5, 1.1],
columnspacing=1.0, labelspacing=0.0,
handletextpad=0.0, handlelength=1.5,
fancybox=True, shadow=True)
plt.title(f'PSD for {r}')#, nperseg=1000, noverlap=500
plt.xlabel('Frequency [Hz]')
plt.ylabel('Power [V**2/Hz]')
plt.axis([0,50, -1, 5])
plt.show()
我收到以下错误:
for columns in data(1, num_plots + 1):
TypeError: 'DataFrame' object is not callable
如果有人能告诉我如何让它工作,那就太好了:D
非常感谢, 安吉丽卡
【问题讨论】:
-
一个可复制的例子会很棒
-
嗨,Rafael,我编辑了我的问题。我认为现在更精确。我不确定你所说的“可重现的例子”是什么意思。如果您需要更多信息,请告诉我。非常感谢!!!
标签: python matplotlib scipy