簡體   English   中英

如何將標簽與 matplotlib 顏色條和散點圖中的數據相關聯

[英]How to associate labels to data in matplotlib color bar and scatter plot

我目前有 2d 數據XX每行的顏色代碼的 1d 向量y 我正在嘗試使用matplotlib的函數scattery的顏色代碼點分配給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()

我收到以下錯誤:

類型錯誤:您必須先為可映射設置 set_array

好的,問題不在plt.scatter而是在plt.colorbar 這在最初的問題中並不清楚,因為您之前沒有包含第二個命令。 花了一些評論才發現問題。

問題是您沒有創建任何顏色圖,而是試圖在沒有任何可映射數值到您的顏色圖的情況下顯示它。 下面的解決方案執行以下操作:

  • 首先使用np.unique找到顏色數組中的唯一顏色。
  • 然后,使用ListedColormap從您定義的顏色創建自定義顏色映射。 這受到此處提供的解決方案的啟發。 我投了贊成票,你也應該如此。
  • 將字符串(顏色)映射到整數。 我從這里找到了如何做到這一點 我投了贊成票,你也應該如此。
  • 最后但並非最不重要的一點是,使用映射值作為自定義創建的顏色映射的顏色。


這是一個完整的解決方案:

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()

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM