2

我有一个看起来像这样的数据文件

#X    Y 
1     23.2 
2     24.01
3     67.34
4     68.90
# 

1    7.87 
2    6.90  
3    5.78   
4    7.89 

注意线条之间的间隙。在我的情节中,我应该有两条单独的线,就像 gnuplot 会绘制它一样。如何使用 python/matplotlib 做到这一点。我目前正在收到一条加入回来的线路。

这是我目前的绘图方式:

F=loadtxt('fort.30',comments='#',dtype='float64' )
t=F[:,0]
E=F[:,1]  
plt.plot(t,E) 

感谢您的评论和回复

4

3 回答 3

3

在数据集的各个部分之间添加 None 或 nan:

plt.plot([1,2,None,3,4],[1,0,None,2,1])
于 2012-10-04T18:59:43.487 回答
1

F只要第一列中的值小于之前行中的值,您就可以将数组拆分为多个子图。

breaks = [i for i in range(len(F)) if i > 0 and F[i, 0] < F[i-1, 0]]
borders = [0] + breaks + [len(F)]
subplots = [F[borders[i]:borders[i+1]] for i in range(len(borders)-1)]

现在,您可以绘制各个子图。

for f in subplots:
    t, E = f[:, 0], f[:, 1]
    plt.plot(t, E)
plt.show()

当然,只有当新子图的第一个值总是低于前一个子图的最后一个值时。如果您必须依靠#来细分绘图,您可能必须自己解析文件。

于 2012-10-04T20:43:32.593 回答
0

到目前为止,您还没有显示任何代码。您当前的代码可能会有所帮助,基于此人们可能会为您提出一个可行的解决方案。

基本上,您必须自己在 Python 中进行文件处理。如果#是数据集之间的分隔符,那么用 Python 编写一个函数来读取文件,逐行解释。如果一行包含由空格分隔的 2 个数字,则将该行的数据添加到当前数据集中。如果一行只包含一个#(数字符号),则开始一个新的数据集。

这样做之后,您可以清楚地表示数据集(在 Python 列表或 numpy 数组中),并且可以担心绘制这些数据集。

于 2012-10-04T19:04:18.843 回答