2015-11-04 30 views
2

我一直在使用gnuplot,只要我记得。 最近我一直想切换到matplotlib。gnuplot风格指数使用numpy和matplotlib绘图

我经常使用的gnuplot的一个基本功能是'索引'功能。

假设我有以下的数据文件(foo.dat):

1 1 
2 2 
3 3 


1 1 
2 4 
3 9 

我可以这样做:

plot 'foo.dat' index 0 u 1:2 
replot 'foo.dat' index 1 u 1:2 

获得对应于同样的情节两个数据集两行。 如何使用numpy导入这样的文件并使用matplotlib绘制它?

这里是我想我的最后情节是这样的: enter image description here

+2

似乎没有直接的方式来模仿gnuplot'a块索引与一些选项。请参阅[从Python中的文件读取数据块](http://stackoverflow.com/q/10512026/2604213)以获取非常类似的问题。 – Christoph

回答

3

使用genfromtxt文件中读取:

import numpy as np 
import matplotlib.pyplot as plt 

a = np.genfromtxt('foo.dat') 

给出:

array([[ 1., 1.], 
     [ 2., 2.], 
     [ 3., 3.], 
     [ 1., 1.], 
     [ 2., 4.], 
     [ 3., 9.]]) 

随后的情节:

plt.plot(a[3:,0],a[3:,1],marker='x',color='g') 
plt.plot(a[0:3,0],a[0:3,1],marker='x',color='r') 

给出: enter image description here

编辑

继@ Cristoph的评论

自动阅读,你可以将文件分割成块,如果你有pandas读入。但是,您需要编写脚本来查找要跳过的大文件的行。

import pandas as pd 
b=pd.read_csv('foo.dat',sep=' ',chunksize=3,header=None,skiprows=(3,4),index_col=0) 
for c in b: 
    plt.plot(c) 

注意skiprows参数 - 你需要创建一个列表,以适应您的文件,如果是更长的时间。

+0

这不完全是我想要的。我编辑了我的问题,添加了我想要的数字。 – gforce89

+0

重要的一点是,gnuplot使用两条空行*自动识别不同的块,然后可以用'index'访问。 – Christoph

+0

是的,这可以在matplotlib中完成吗? – gforce89