使用列表推导绘制存储在词典列表中的数据

时间:2017-11-29 23:40:24

标签: python list dictionary plot

我有一个netCDF文件,其中包含可追溯到1948年的全球月平均温度。对于作业,我必须选择任何一个提供的数据点,提取其12月,1月,2月和3月的平均温度值,然后显示它。

我已经解压缩了数据,并将其收集在字典列表中,如下所示:

12月

decemberMeans = [
    {'year': 1948, 'temp': 271.24}, {'year': 1949, 'temp': 271.28},
    {'year': 1950, 'temp': 268.52}, {'year': 1951, 'temp': 269.63},
    ...,
    {'year': 2015, 'temp': 277.23}, {'year': 2016, 'temp': 271.25}
]

对应于1月,2月和3月的数据以相同的方式构建。

我的下一步是绘制它。我必须在同一图表上为每组数据绘制一条线,我正在使用列表推导来完成它。现在我的绘图代码如下所示:

import matplotlib.pyplot as plt

plt.figure(1)
plt.hold(True)
plt.plot([data['years'] for data in decemberMeans], \
    [data['temp'] for data in decemberMeans], 'k-')
plt.plot([data['years'] for data in januaryMeans], \
    [data['temp'] for data in januaryMeans], 'r-')
plt.plot([data['years'] for data in februaryMeans], \
    [data['temp'] for data in februaryMeans], 'b-')
plt.plot([data['years'] for data in marchMeans], \
    [data['temp'] for data in marchMeans], 'y-')
plt.grid(True)
plt.show()
plt.close()

它描绘得很好,但我可以看到我的所有列表理解都是多余的。有没有办法可以在一个家禽中解压缩字典值,这样我就不必为每一组写data['...'] for data in list两次?

P.S。 - 当我写这篇文章时,我开始意识到我可以编写一个函数来进行绘图(这可能比写这篇文章花费的时间更少),但我仍然很想知道。提前全部感谢!

1 个答案:

答案 0 :(得分:1)

您可以使用pandas

import matplotlib.pyplot as plt
import pandas as pd

decemberMeans = [
    {'year': 1948, 'temp': 271.24}, {'year': 1949, 'temp': 271.28},
    {'year': 1950, 'temp': 268.52}, {'year': 1951, 'temp': 269.63},
    {'year': 2015, 'temp': 277.23}, {'year': 2016, 'temp': 271.25}
]  
df = pd.DataFrame(decemberMeans)

plt.figure(1)
plt.plot(df['year'], df['temp'], 'k-')