首页 > 解决方案 > 如何使用 Python 从文件中绘制图形,线的连接问题

问题描述

我是 python 新手,有一个问题。我有一个包含两列的 file.csv 文件。

文件.csv

0.0000    9.0655
0.0048    9.0640
0.0096    9.0592
0.0144    9.0510
0.0192    9.0392
0.0240    9.0233
0.0288    9.0028
0.0336    8.9770
0.0384    8.9451
0.0432    8.9063
0.0480    8.8595
0.0528    8.8039
0.0576    8.7385
0.0624    8.6626

0.0000   11.0013
0.0048   11.0018
0.0096   11.0032
0.0144   11.0057
0.0192   11.0091
0.0240   11.0134
0.0288   11.0186
0.0336   11.0247
0.0384   11.0317
0.0432   11.0394
0.0480   11.0478
0.0528   11.0569
0.0576   11.0666
0.0624   11.0767
0.0672   11.0873

我尝试使用 xmgrace 和 Gnuplot 从 FILE.csv 绘制图形,结果非常令人信服。

我在图中有两条线,如下两图所示: 在此处输入图像描述 在此处 输入图像描述

另一方面,如果我使用我的 python 脚本,这两行 是我的脚本:

import matplotlib.pyplot as plt
import pylab as plt
#
with open('bb.gnu') as f:
    f=[x.strip() for x in f if x.strip()]
    data=[tuple(map(float,x.split())) for x in f[2:]]
    BX1=[x[0] for x in data]
    BY1=[x[1] for x in data]

plt.figure(figsize=(8,6))
ax = plt.subplot(111)

plt.plot(BX1, BY1, 'k-', linewidth=2 ,label='Dos')
plt.plot()
plt.savefig("Fig.png", dpi=100)
plt.show()

这是结果 在此处输入图像描述

我的问题是,它是否存在用 Python 绘制图形的解决方案,而不生成两条线之间的连接点。为了找到与 Gnuplot 和 xmgrace 相似的结果。

预先感谢您的帮助。

标签: python-2.7matplotlib

解决方案


据我所知,matplotlib 只是加入您的两条曲线,因为您将它们作为一组数据提供。这意味着您需要调用plot两次才能生成两条曲线。我将您的数据放在一个名为的文件中data.csv并编写了以下代码:

import numpy
import matplotlib.pyplot as plt

data = numpy.genfromtxt('data.csv')
starts = numpy.asarray(data[:, 0] == 0).nonzero()[0]
fig, ax = plt.subplots(nrows=1, ncols=1, num=0, figsize=(16, 8))
for i in range(starts.shape[0]):
    if i == starts.shape[0] - 1:
        ax.plot(data[starts[i]:, 0], data[starts[i]:, 1])
    else:
        ax.plot(data[starts[i]:starts[i + 1], 0],
                data[starts[i]:starts[i + 1], 1])
plt.show()

生成这个数字

在此处输入图像描述

我所做的starts是在第一列数据中查找包含值 0 的行,我认为这是一条新曲线的开始。然后循环在每次迭代时生成一条曲线。该if语句区分最后一条曲线和其他曲线。可能有更优雅的,但它的工作原理。

另外,不要导入pylab,因为不必要的命名空间填充,所以不鼓励。


推荐阅读