2016-02-01 27 views
0

我有與地震日期,經度和大小文件列表,像如下:繪圖點作爲最新的功能

2015-11-12 22.86 5.20 
2015-11-18 15.12 4.25 
2015-11-20 12.91 7.85 
.......... ..... .... 

,我想上繪製圖表點,用顏色取決於mag的大小,y軸上的參數爲date,y軸上的參數爲long。我正在努力做到這一點,但困難的部分是讓腳本將日期作爲數字讀取......先謝謝您。

+0

也許你應該看看'numpy'和'pandas'模塊,它們有很多功能來獲取統計數據並繪製它們。 – DainDwarf

回答

0

您可以使用時間戳用數字表示日期。日期時間模塊對此有用。尋找datetime.strptime。 在你的情況下,將

datetime.datetime.strptime(your_date, '%Y-%m-%d').timestamp() 

如果你這樣做你得到一個不錯的表示所有日期。蜱會很醜,但你必須手動解決。可能有一些功能模塊可以規避將日期轉換爲數字的所有問題,因此可能需要研究這些問題。

2

考慮到你正在使用matplotlib生成圖形和ritcher規模來衡量地震的震級,我們就可以用散點圖到每個點。輔助功能允許我們根據點值選擇所需的顏色。由此產生的代碼如下:

import math 
from datetime import datetime 
import matplotlib.pyplot as plt 

#Function to convert 
def obterCor(valor): 
    cores = {2.0: '#37e52b', 2.9: '#1887bf', 3.9: '#1745d1', 4.9: '#e9ed1e', 5.9: '#f79c09', 6.9: '#f76409', 7.9: '#ff0000', 8.9: '#ea17c7', 100.0: '#9800ff'} 
    cor = '#37e52b' 
    for k,v in sorted(cores.iteritems()): 
     if valor <= k: 
      cor = v 
      break 
    return cor 

#Data 
linhas = [ x.strip() for x in open('arquivo.txt', 'r') ] 
x = [] 
y = [] 
z = [] 
for l in linhas: 
    l = l.split() 
    x.append(datetime.strptime(l[0], "%Y-%m-%d")) 
    y.append(float(l[1])) 
    z.append(obterCor(float(l[2]))) 

#Plotting 
plt.xlabel('Date') 
plt.ylabel('Longitude') 
plt.scatter(x, y, c=z, alpha=0.5) 
plt.xticks(rotation=45) 
plt.tight_layout() 
plt.show()