使用python为csv dile在同一图中绘制多个x轴和多个y轴



我有一个包含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命令中使用labelcolor 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文档内容非常丰富,易于阅读。

最新更新