gpt4 book ai didi

python - 使用文件中的输入来定义图中条形的颜色(matplotlib)

转载 作者:行者123 更新时间:2023-12-01 04:10:20 25 4
gpt4 key购买 nike

我正在尝试使用 .csv 文件的输入绘制条形图。

我的输入文件包含几列,其中包含样本名称和数据,还有一列包含样本的颜色。此列包含字符串,例如“w”表示白色,“b”表示棕色等。每行包含不同样本的值。

现在我希望每个样本的条形都具有颜色列中指定的颜色。

我的代码看起来有点像这样:

import numpy as np
import matplotlib.pyplot as plt

results_dtype=np.dtype([('name', 'S100'), ('colour', 'S10'),
('data_this', 'float64'), ('data_that', 'float64'), ...])


data = np.genfromtxt('C:/data.csv', delimiter = ',', dtype =results_dtype, filling_values=np.nan, skip_header=1)

colours = {'w':'#FFFFFF',
'y':'#ffff00',
'b':'#cc8033',
'p':'#CC79A7'}

fig = plt.figure()
plt.bar(np.arange(len(data)), data['data_this'], bottom=data['data_that'], align='center', color=colours[data['colour']])
plt.xticks(np.arange(len(data)), data['name'], rotation='vertical')
plt.show()

我收到的错误消息如下:

unhashable type: 'numpy.ndarray' (pointing to the plt.bar(...) line).

听起来好像我以错误的方式调用字典或类似的东西,但我不知道如何正确地做到这一点。

我希望,这可以解释我正在尝试做的事情。

最佳答案

Python 的 dict 只能使用单个键进行索引。他们不允许“矢量化”索引。

让我们使用一个给出相同错误的简化示例:

import numpy as np

lookup = {'a':1, 'b':2, 'c':3}
values = np.array(['a', 'b', 'c', 'c', 'a', 'b', 'a'])
data = lookup[values]

其产量:

TypeError                                 Traceback (most recent call last)
<ipython-input-71-7d8663a08b8d> in <module>()
1 lookup = {'a':1, 'b':2, 'c':3}
2 values = np.array(['a', 'b', 'c', 'c', 'a', 'b', 'a'])
----> 3 data = lookup[values]

TypeError: unhashable type: 'numpy.ndarray'

确切的错误是因为我们尝试使用可变类型作为字典的键。您可以将某些序列(例如元组)用作键,但它们仍然无法按照您希望的方式工作。

因此,您需要使用列表理解,而不是使用诸如 data = Lookup[values] 之类的键序列:

data = [lookup[item] for item in values]

将其放回到原来的示例中:

import numpy as np
import matplotlib.pyplot as plt

results_dtype=np.dtype([('name', 'S100'), ('colour', 'S10'),
('data_this', 'float64'), ('data_that', 'float64'), ...])


data = np.genfromtxt('C:/data.csv', delimiter = ',', dtype=results_dtype,
filling_values=np.nan, skip_header=1)

colours = {'w':'#FFFFFF',
'y':'#ffff00',
'b':'#cc8033',
'p':'#CC79A7'}

color = [colours[item] for item in data['colour']]

fig = plt.figure()
plt.bar(np.arange(len(data)), data['data_this'], bottom=data['data_that'],
align='center', color=color)
plt.xticks(np.arange(len(data)), data['name'], rotation='vertical')
plt.show()

关于python - 使用文件中的输入来定义图中条形的颜色(matplotlib),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35042721/

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