2015-11-04 65 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