我有一份包含地震日期,经度和数量的文件清单,如下所示:
2015-11-12 22.86 5.20
2015-11-18 15.12 4.25
2015-11-20 12.91 7.85
.......... ..... ....
我希望在图表上绘制点,其颜色取决于幅度mag
,x轴上的date
参数和经度long
上的参数y轴。我正在努力做到这一点,但困难的部分是让脚本将日期读作数字......提前谢谢。
答案 0 :(得分:2)
考虑到您使用 matplotlib 生成图形而 ritcher scale 来测量地震震级,我们可以将散点图用于每个点。辅助功能允许我们根据点值选择所需的颜色。结果代码如下:
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()
答案 1 :(得分:0)
您可以使用时间戳表示带有数字的日期。 datetime模块具有有用的功能。寻找datetime.strptime。 在你的情况下,它将是
datetime.datetime.strptime(your_date, '%Y-%m-%d').timestamp()
如果你在所有日期都这样做,你会获得很好的代表性。虽然滴答声很难看,你必须手动解决。可能有绘制模块的功能可以绕过将日期转换为数字的整个问题,因此可能值得研究。