gpt4 book ai didi

python - matplotlib 'bar'与 'barh'情节。 bar的问题

转载 作者:行者123 更新时间:2023-12-03 15:27:32 25 4
gpt4 key购买 nike

我刚刚注意到一些奇怪的事情,并且想知道是否有人可以解释发生了什么?

我有一本字典,正在绘制水平和垂直条形图。

plt.bar(food.keys(), food.values()) #works fine, but:
plt.barh(food.keys(), food.values() #gives "unhashable type: 'dict_keys'" error.

如果字典不能散列,为什么让我绘制普通的条形图?这仅仅是对barh功能的怪癖还是我做错了什么?

这是我的测试数据集:
food = {'blueberries':2, 'pizza':3.50, 'apples':0.50}

谢谢。

最佳答案

另一个答案在解决问题上当然是正确的-只需转换为列表即可。首先它不起作用的原因涉及挖掘matplotlib源代码。
barbarh都在后台调用matplotlib.axes.Axes.bar。当您绘制bar时,x是条的x位置,而height是y值。

但是,调用barh时,实际上将y值(即['blueberries', 'pizza', 'apples'])设置为参数bottom,并且条形的长度由width给出。

在源代码中调用以下行

func(ax, *map(sanitize_sequence, args), **kwargs)

其中 sanitize_sequence是:
def sanitize_sequence(data):
"""
Convert dictview objects to list. Other inputs are returned unchanged.
"""
return (list(data) if isinstance(data, collections.abc.MappingView)
else data)

问题在于参数 bottom是一个kwarg,因此不会传递给 sanitize_sequence,并且永远不会转换为列表。而在普通的 bar中, x通过 sanitize_sequence转换为列表

因此,问题在于如何在后台实现 barh

关于python - matplotlib 'bar'与 'barh'情节。 bar的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61589427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com