首页 > 解决方案 > 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只是一个具有一个值的数组。该情节缺少各种条形图,并随机绘制了一些条形图。这里发生了什么?

在此处输入图像描述

标签: pythonmatplotlib

解决方案


我有点困惑你在绘图功能中对字典的键和条目做了什么。让我们创建一个最小的工作示例:

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.50.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就好像另一个字典会被返回......)


推荐阅读