我有一个包含10列的csv文件。每隔2列交替具有相同的行数。所有奇数列表示时间, 偶数列我想在同一个情节上绘制第1列、第2列、第3列、第4列、第5列、第6列、第7列、第8列、第9列、第10列 我该怎么做? 例如sample.csv
1 99 2 98 1 98 3 99 ...
2 98 3 97 2 97 4 98 ...
3 97 4 96 3 96 5 97 ...
5 95 4 95 6 96 ...
7 95 ...
8 94 ...
不确定是希望所有绘图都在一个图像中,还是希望每对列都单独绘制。这里有一个解决方案,您可以使用一个函数轻松地显示每一对列。
模块
import io
import pandas as pd
import matplotlib.pyplot as plt
数据
df = pd.read_csv(io.StringIO("""
1 99 2 98 1 98 3 99 ...
2 98 3 97 2 97 4 98 ...
3 97 4 96 3 96 5 97 ...
5 95 4 95 6 96 ...
7 95 ...
8 94 ...
"""), delim_whitespace=True, header=None, columns=[], engine="python")
函数中需要放入第一列x
的位置,然后添加下一列作为Y轴。
def plotfunction(x):
plt.plot(df.iloc[:,x], df.iloc[:,x+1])
plt.show()
plotfunction(0)
用于以下多个绘图。
for i in range(4):
plotfunction(i)
或者在更好的次要情节中。
fig = plt.figure(figsize=(10, 6))
for i,x in zip([1,2,3,4], [0,2,4,6]):
ax = fig.add_subplot(2,2,i)
ax.plot(df.iloc[:,x], df.iloc[:,x+1])
使用人工输入test.csv,如
a,b,c,d
1,50,2,20
2,60,3,40
,,4,60
这段代码对我有效,生成了一个图像,其中有两个图,分别表示第1+2列和第3+4列。
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("test.csv")
for i in range(0,len(df.columns),2):
plt.plot(df.iloc[:,i].values, df.iloc[:,i+1].values)
plt.show()
编辑:最初,只适用于4列,现在应该适用于更多
添加的第二次编辑:可以在plot命令中使用label
和color or c
关键字参数指定颜色和标签:
color_list =["blue", "red", "green"]
for i in range(0,len(df.columns),2):
plt.plot(df.iloc[:,i].values, df.iloc[:,i+1].values, label = df.columns[i+1], color = color_list[i//2])
plt.legend()
plt.show()
如果标签作为csv文件中的最上面一行给出并且包含在数据帧中,则此操作有效。或者,您可以指定一个自定义列表,就像我为颜色所做的那样。有更复杂但也更方便的方法来设置颜色,例如颜色图和集合,但我想这是最简单的解决方案。关于标签和颜色,可以在这里找到更多信息和替代实现。一般来说,matplotlib文档内容非常丰富,易于阅读。