使用列表理解绘制存储在字典列表中的数据

nat*_*142 3 python plot dictionary list

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

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

十二月

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}
]
Run Code Online (Sandbox Code Playgroud)

对应于一月、二月和三月的数据以相同的方式构建。

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

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()
Run Code Online (Sandbox Code Playgroud)

它绘制得很好,但我可以看到我所有的列表推导式都是多余的。有没有一种方法可以让我一次性解压缩字典值,这样我就不必data['...'] for data in list为每个集合写两次?


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

Jul*_*ien 6

你可以使用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-')
Run Code Online (Sandbox Code Playgroud)