Python新手在这里。
我的问题如下。我有这个(80,1002)从.csv文件加载的连续数据的DataFrame。我的目标是遍历此df(80)的每一行并在基本的pyplot.plot上绘制每一行。在这个df中,前两列将用作标题,以便每个图都有它的特定名称(这里是记录的时间和电极的名称)。
我在绘制一行时所做的是:
import matplotlib.pyplot as plt
import pandas as pd
Location = r'/pathtothefile/name.csv'
df=pd.read_csv(Location,sep=';')
time=range(1,1001);
plt.plot(time,df.loc[0, "0":"999"],'g')
plt.axhline(0, color='black',linewidth=0.5)
plt.xlabel('Time (ms)')
plt.ylabel('Power (mV)')
plt.axis([1, 1000, -5, 5])
plt.title(str(df.iloc[0,0]) + str(df.iloc[0,1]))
plt.show()
row.savefig('/pathwheretosave/name.eps',
format='eps', dpi=1000)
“时间”变量将与行数据一起绘制。从这里开始,我想循环数据帧的行并在一个单独的文件中绘制/保存每一行,但到目前为止:我失败了。有关如何做到这一点的任何想法? 理想情况下,我想在要保存的文件名中写下绘图的标题。
答案 0 :(得分:1)
您需要循环每一行。这可以通过使用itertuple方法实现,如下所示。
示例数据:
sales = [{'values': [1,2,3,4], 'title': 'title 1'},
{'values': [2,3,5,7], 'title': 'title 2'},
{'values': [4,5,5,7], 'title': 'title 3'}]
df = pd.DataFrame(sales)
为每行中的值生成一个图表,并在每行中指定标题
for row in df.itertuples():
plt.plot(row.values,marker='o')
plt.title(row.title)
plt.savefig(row.title + '.png')
plt.clf()
这是3个单独的图(数据框中每行一个)的输出。
答案 1 :(得分:0)
这个怎么样?如果你想让你的x轴使用时间而不是时间戳标签,它会变得更复杂一些,但听起来你每秒都要在你的电极上进行1次测量。
import pandas as pd
import datetime
import matplotlib.pyplot as plt
# Make a sample DataFrame
ts = datetime.datetime.now()
df = pd.DataFrame({'time': [ts, ts, ts, ts],
'electrode': [1, 2, 3, 4],
1: [0.1, 0.1, 0.1, 0.1],
2: [0.22, 0.2, 0.2, 0.2],
3: [0.37, 0.3, 0.3, 0.3]},
columns = ['time', 'electrode', 1, 2, 3] )
number_of_measurements = df.shape[1] - 2
for i in range(0, len(df)):
fig, ax = plt.subplots(figsize=(8, 8))
df.iloc[i][2:].plot(ax=ax, xticks=range(1, number_of_measurements + 1, 1))
plot.set_xlabel("Time (ms)")
plot.set_ylabel("Power (mV)")
fig.suptitle('{} electrode:{}'.format(df.iloc[i].time, df.iloc[i].electrode))
fig.savefig('plot{}-{}.png'.format(df.iloc[i].time, df.iloc[i].electrode), bbox_inches='tight')