我有几个.csv文件,我想从这些文件中画一个图。这些文件包含两列,其第一列是相同的每个csv文件。
file1.csv:
20 -4.140462670
25 -4.140537060
30 -4.140571620
35 -4.140581580
40 -4.140584350
file2.csv:
20 -4.140468880
25 -4.140542900
30 -4.140577590
35 -4.140587560
40 -4.140590330
我尝试了下面的脚本,为了绘制第一个:
import matplotlib.pyplot as plt
from matplotlib.ticker import FormatStrFormatter
with open('file1.csv') as f:
f=[x.strip() for x in f if x.strip()]
data=[tuple(map(float,x.split())) for x in f[0:]]
oX=[x[0] for x in data]
oY=[x[1] for x in data]
plt.figure(figsize=(9,6))
ax = plt.subplot(111)
ax.yaxis.set_major_formatter(FormatStrFormatter('%.4f'))
ax.plot(oX, oY, color='blue', linestyle='dashdot', linewidth=2, marker='o', markerfacecolor='red', markeredgecolor='black',markeredgewidth=2, markersize=6)
plt.show()
结果如下:x1c 0d1x
但我想绘制一个包含两条曲线(file1.csv和file2.csv)的图形
在另一段时间里,使用以下命令解决问题(使用xmgrace软件):xmgrace -free -nxy *
我的问题是:我可以画一个图形,包含多条曲线,在阅读多个文件. csv(file1.csv,file2.csv,file3.csv..).
我注意到我有:
1)n CSV数量**(file1.csv,file2.csv,file3.csv....).**
2)相同的X坐标
3)不同Y坐标
3条答案
按热度按时间vxbzzdmp1#
解决这个问题最简单的方法是在for循环中使用Pandas read_csv函数来读取.csv文件,在循环内创建行,在循环外生成图。
范例:
输出量:
wz1wpwve2#
这是我的代码来解决你的问题,使它健壮,所以你可以更好地理解是怎么回事。你也可以分析许多其他文件,如**.txt**为例。此外,在某些情况下,你可能会发现,CSV文件是用“;这是不正确的,因为这不是CSV文件应该是什么,但是,你也可以分析这个文件。只要确定每个值之间的分隔符是什么,你就可以在下面的第二行代码中改变那个字符。例如,在你给出的数据中,分隔符是' '(每个值之间的空格)。请参阅下面的代码,以便你知道我的意思:
结果图:
如果你想知道这里的每个方法都做了什么,你可以打印方法(带所需的参数),这样你就知道返回的是什么,但我认为只需要变量名就可以了。如果你有任何疑问,不要犹豫,在下面评论。我希望这对你有用。
xkftehaa3#
一般策略是读取、存储和绘制所有数据,仅在绘制完所有数据后调用
plt.show()
。结果如下: