1

我提取了某个地点从 1978 年到 2018 年的每月天气数据,并将数据存储在字典中。

{((65.03371, 25.47957), '1978-01-01T00:00:00Z'): {'rrmon': '32.5', 'tmon': '-9.2'},
 ((65.03371, 25.47957), '1978-02-01T00:00:00Z'): {'rrmon': '11.6', 'tmon': '-14.7'},
 ((65.03371, 25.47957), '1978-03-01T00:00:00Z'): {'rrmon': '38.0', 'tmon': '-4.1'}}

字典是这样构造的,键是位置和日期的元组,并且值月降雨量和平均温度。我必须在一张图表上分别绘制每个月的温度。

例如,我如何绘制一月份的平均温度?我不知道如何在字典中只选择一个月的温度,或者我什至必须这样做?

4

2 回答 2

0

您可以使用分组条形图:

import matplotlib.pyplot as plt
import numpy as np
data = {((65.03371, 25.47957), '1978-01-01T00:00:00Z'): {'rrmon': '32.5', 'tmon': '-9.2'}, ((65.03371, 25.47957), '1978-02-01T00:00:00Z'): {'rrmon': '11.6', 'tmon': '-14.7'},((65.03371, 25.47957), '1978-03-01T00:00:00Z'): {'rrmon': '38.0', 'tmon': '-4.1'}}
l, d = zip(*[[a.split('T')[0], [float(b['rrmon']), float(b['tmon'])]] for (_, a), b in data.items()])
r, t = zip(*d)
x, width = np.arange(len(l)), 0.35
fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, r, width, label='rrmon')
rects2 = ax.bar(x + width/2, t, width, label='tmon')
ax.set_xticks(x)
ax.set_xticklabels(l)
ax.legend()
fig.tight_layout()
plt.show()

在此处输入图像描述

于 2019-11-21T14:09:19.100 回答
0

我想如果我对您的理解正确,您正在尝试将数据转换为将数据分解为 {month_indicator:{data...}} 的形式。月份指示器为您提供明确的月份。如果这是真的,我的策略如下:

对于原始数据中的键值对:通过索引元组来隔离您的日期/日期字符串。如果是字符串,则将其转换为日期时间对象。你可以通过使用 datetime.datetime.strptime() 函数来做到这一点,它有一些规则可以让你以你需要的方式获取数据。

一旦它变成一个日期时间对象,它就会有属性 date.month,它为一月提供 1,为二月提供 2,为三月提供 3,等等。这为您提供了一种在迭代时查找所有一月或其他月份的方法数据。

然后您可以将数据重新分配为格式 {1: [temp1, temp2, ..., temp n], 2: [temp1, temp2, ..., temp n], etc.]}

从那里你有一百种不同的方法来获取平均值,例如 sum(dict['month_key']) / dict['month_key'],导入你最喜欢的带有平均函数的模块,等等。

之后,您将拥有一组数据,其中包含可以在 matplotlib 条形图中轻松绘制的月度(平均温度)集。

我希望这有帮助!

于 2019-11-21T14:12:53.627 回答