python - Python for loop matplotlib条形图不显示所有数据
问题描述
我有一个字典,其中每个键代表一年,每个值代表该年某个域的降雨异常。
anoms_yearly.keys()
dict_keys([1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019])
每个键值对只是一个 xarray 数据数组,其中包含值和值的时间。
anoms_yearly[1980].values
array(-3.49641086)
现在,我尝试在一个简单的条形图中绘制数据。
fig,ax=plt.subplots(figsize=(20,12))
for i in anoms_yearly.keys():
if anoms_yearly[i].values<0:
colors='brown'
else:
colors='green'
ax.bar(anoms_yearly[i]['time'], anoms_yearly[i].values, color=colors)
在这里,anoms_yearly[i]['time']
代表一年,因为它会随着时间的推移而循环,并且anoms_yearly[i].values
只是一个具有一个值的数组。该情节缺少各种条形图,并随机绘制了一些条形图。这里发生了什么?
解决方案
我有点困惑你在绘图功能中对字典的键和条目做了什么。让我们创建一个最小的工作示例:
import matplotlib.pyplot as plt
import random
D = dict()
for i in range(1900,2000):
D[str(i)] = random.random()-0.5
该字典D
包含从 1900 年到 1999 年的年份,作为键的字符串-0.5
和0.5
对应值之间的随机数。
您可以像以前一样遍历字典的键。但是,如果您想访问它,只需使用密钥调用字典即可。没有必要再做这种索引和.values()
调用.keys()
。看:
fig,ax = plt.subplots()
for key in D.keys():
if D[key] < 0:
colors='brown'
else:
colors='green'
ax.bar(key, D[key], color=colors)
xticks 现在搞砸了,因为它们是字符串,而 python/matplotlib 不知道它们是有序的并且可以分组......
无论如何,我猜你的奇怪输出来自奇怪的索引anoms_yearly[i]['time']
,坦率地说,我不明白你为什么用键索引它(在这种情况下,D[key]
再次索引返回,time
就好像另一个字典会被返回......)