我目前正在研究1815年Mount Tambora喷发如何导致所谓的“没有夏天的年份”#34;并需要一些帮助绘制数据。
我有一个气象站的文本文件,提供我感兴趣的年份的日常温度数据(1816年)。文件中的每一列代表从1月到12月的月份(第一个栏),每行是该月的一天;
1 -22 5 52 82 102 155 176 168 100 114 89 54
2 -31 21 68 107 139 177 146 159 90 118 85 74
3 -49 41 63 103 170 134 144 140 106 99 86 63
4 -52 56 77 109 180 137 153 136 105 105 52 90
5 -66 75 67 103 169 165 160 145 102 90 62 74
6 -35 80 60 82 121 152 173 131 123 96 86 60
7 -17 69 34 91 128 175 195 125 139 103 75 65
8 -7 80 -17 79 152 161 135 134 148 104 34 64
我对Python比较陌生,但可以做基本的绘图......但是这里的数据显示方式让我有点难过!我想绘制的是全年,x轴上的天/月,以及y轴上的温度值,在一张图上。这样我就可以将今年与其他年份进行比较!
我可以做基本的事情,例如选择代表1月的列并将所有-999值设置为nan,即
d = np.loadtxt("test.txt")
January = d[:,1]
January[January <= -999] = np.nan
但很难想出一种以我想要的方式绘制所有数据的方法。
非常感谢任何帮助!
答案 0 :(得分:0)
将文本文件读入pandas数据帧。然后你可以将它取消堆叠,这将产生连续几天的一系列。
import pandas as pd
# read text-file
df = pd.read_csv('test.txt', sep=' ')
# drop the first column in your text file
df = df.drop(df.columns[0], axis=1)
# unstack to make a series of the days
df = df.unstack()
# remove na that will come from months with less than 31 days
df = df.dropna()
# plot with pandas
df.plot()
答案 1 :(得分:0)
这是代码:
import numpy as np
import matplotlib.pyplot as plt
temp_data = np.loadtxt("plot_weather_data.txt")
num_days = len(temp_data)
temperature = []
# for each of the days
for index_days in range(0, num_days-1):
# for each of the months
for index_month in range(1, 13):
# starting from the second column, append the value to a list
temperature.append(temp_data[index_days][index_month])
# call matplot lib and plot the graph
plt.plot(temperature)
plt.ylabel("temperature [C]")
plt.show()
您还可以在此处找到名为plot_weather_data.txt
的文本文件以及上述文件:https://github.com/alphaCTzo7G/stackexchange/blob/master/python/plot_temp.py