gpt4 book ai didi

python - 如何将标签与 matplotlib 颜色条和散点图中的数据相关联

转载 作者:太空宇宙 更新时间:2023-11-04 04:20:54 25 4
gpt4 key购买 nike

我目前有二维数据 X和一维向量 y X 中每行的颜色代码数量.我正在尝试使用函数 scattermatplotliby 中分配颜色代码点X 中的每一行值使用标签的以下代码:

import matplotlib.pyplot as plt
import numpy as np
classes = 2
zones = (['FEF', 'IT'])

X = np.array([[-1.61160406, 0.06705226],
[-2.34304523, 0.19353161],
[-4.39162911, -0.15401544],
[-1.9107751 , 0.67541723],
[-1.76792646, 0.71884401]])

y= np.array(['c', 'mediumpurple', 'mediumpurple', 'c', 'c'], dtype='<U12')


plt.scatter(X[:, 0], X[:, 1], color=y)
plt.colorbar(ticks=range(classes)).set_ticklabels(zones)
plt.show()

我收到以下错误:

TypeError: You must first set_array for mappable

最佳答案

好的,问题不在 plt.scatter 而在 plt.colorbar。这在最初的问题中并不清楚,因为您之前没有包含第二个命令。花了一些评论才找到问题所在。

问题是您没有创建任何颜色图,而是试图在没有任何可映射数值到颜色图的情况下显示它。下面的解决方案执行以下操作:

  • 首先使用 np.unique 在您的颜色数组中找到唯一的颜色。
  • 然后,使用 ListedColormap 根据您定义的颜色创建自定义颜色映射。这受到提供的解决方案的启发 here .我投了赞成票,你也应该投赞成票。
  • 将字符串(颜色)映射到整数。我从 here 找到了如何做到这一点.我投了赞成票,你也应该投赞成票。
  • 最后但并非最不重要的一点是,使用映射值作为自定义颜色映射的颜色。


这是一个完整的解决方案:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

classes = 2
zones = (['FEF', 'IT'])

X = np.array([[-1.61160406, 0.06705226],
[-2.34304523, 0.19353161],
[-4.39162911, -0.15401544],
[-1.9107751 , 0.67541723],
[-1.76792646, 0.71884401]])


y = np.array(['c', 'mediumpurple', 'mediumpurple', 'c', 'c'], dtype='<U12')
cmap = ListedColormap(np.unique(y))
# print (np.unique(y))
# ['c' 'mediumpurple']

# Mapping the colors to numbers
dics = {k: v for v, k in enumerate(sorted(set(y)))}
y_mapped = [dics[x] for x in y]
# print (y_mapped)
# [0, 1, 1, 0, 0]

plt.scatter(X[:, 0], X[:, 1], c=y_mapped, cmap=cmap)
plt.colorbar(ticks=range(classes)).set_ticklabels(zones)
plt.show()

enter image description here

关于python - 如何将标签与 matplotlib 颜色条和散点图中的数据相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54498797/

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