2013-05-28 177 views
4

我想繪製使用matplotlib在Python中的文件中的數據。Python:以小時,分鐘和秒鐘讀取文本文件;和角度的度數,弧分和弧秒

該文件包含2列。第一列有hour:minute:seconds。第二欄有degree:arc minutes:arc seconds。對於hour:minute:seconds我使用datetime.strptime('%H:%M:%S.%f')。在Python或Matplotlib中有沒有類似degree:arc minutes:arc seconds的函數?

下面是數據文件的例子:

00:06:04.8  -70:00:00.0 
    00:07:01.7  -66:00:00.0 
    00:14:17.7  -59:00:00.0 
    00:23:00.0  -52:00:00.0 
    00:23:50.3  -49:00:00.0 
    00:23:54.4  -29:00:00.0 
    00:23:59.4  -28:00:00.0 
    00:24:03.7  -26:00:00.0 
    00:24:03.8  -14:00:00.0 
    00:24:03.9  +25:00:00.0 
    00:30:30.10  +30:00:00.0 
+0

,我不認爲這樣的代碼已經存在。我會建議只使用正則表達式。 – tacaswell

+0

@tcaswell:謝謝 –

回答

3

使用matplotlib.dates.datestr2num,你可以很容易地轉換你的第一列plottable數字,但我沒有找到你的第二個欄的功能。你可以建立一個函數來處理,雖然:

import numpy as np 

def calc_hour(str): 
    hour, min, sec = [float(i) for i in str.split(':')] 
    min += sec/60. 
    hour += min/60. 
    return hour 

calc_hour = np.vectorize(calc_hour) 

def calc_deg(str): 
    deg, min, sec = [float(i) for i in str.split(':')] 
    min += sec/60. 
    deg += min/60. 
    return deg 

calc_deg = np.vectorize(calc_deg) 

然後,從一個所謂的 'tmp.txt' 文件中讀取數據你:

values = np.loadtxt('tmp.txt', dtype=str) 
hours= calc_hour(values[:,0]) 
degs = calc_deg(values[:,1]) 

得到的東西,如:

hours = array([ 0.10133333, 0.11713889, 0.23825 , 0.38333333, 0.39730556, 
       0.39844444, 0.39983333, 0.40102778, 0.40105556, 0.40108333, 
       0.50836111])  

degs = array([-70., -66., -59., -52., -49., -29., -28., -26., -14., 25., 30.]) 

可以繪製:

import matplotlib.pyplot as plt 
plt.plot(hours,degs) 

對於你的情況下,贈送:

enter image description here

+0

+1看起來夠簡單。 – Schorsch

+1

@Saullo Castro:非常感謝。 –