[英]How to plot different shades of a color for each point in a scatter plot in matplotlib?
我試圖繪制一個散點圖,其中散點圖中的每個點都應對應於我選擇的給定顏色的特定陰影。 mpl 文檔指出,如果我設置如下:
color = '0.7'
它給了我一個灰色陰影,縮放強度為0.7
。 我正在從一個數組中讀取顏色的強度,該數組的值介於 0 和 1 之間,每個值對應於散點圖中該點的強度。 我的代碼如下:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import math
tsne_embeddings = np.load("tsne_embeddings.npy")
labels = np.load('labels.npy')
weights = np.load('weights.npy')
# Scale the weights from 0 to 1
max_weight = max(weights)
min_weight = min(weights)
weights = (weights - min_weight)/(max_weight - min_weight)
print(tsne_embeddings.shape)
x = list(tsne_embeddings[:,0])
y = list(tsne_embeddings[:,1])
labels = list(labels)
weights = np.round(weights,decimals=2)
weights = (np.exp(weights) - 1)/(np.exp(1) - 1)
weights = list(weights)
print(min(weights),max(weights))
for i, shade in enumerate(weights):
plt.scatter(x[i],y[i],color=shade,marker = '+')
plt.show()
我正在以指數方式縮放這些權重,希望有更好的變化。 所以,基本上,我的問題是:
謝謝!
為了使您的方法適用於灰色陰影,您需要將值轉換為字符串,因此plt.scatter(..., color=str(shade))
。
使用 matplotlib 的更標准的方法是直接使用權重,而不將它們重新縮放到范圍0
到1
,使用顏色圖,並直接使用數組調用 scatter 。 權重進入c=
參數。 對於灰度值,這將是plt.scatter(x, y, c=weights, cmap='Greys', marker='+')
。 matplotlib 的一個附加功能是,有了這些信息,它可以自動創建一個顏色條,將灰度值映射到相應的權重。 如果只創建一個散點圖,不帶參數的plt.colorbar()
將顯示此顏色條。
類似的顏色圖存在於“紫色”、“藍色”、“綠色”、“橙色”、“紅色”……請參閱官方文檔和完整列表。 如果明暗范圍錯誤,在名稱后附加“_r”將使用相反的顏色范圍(因此,“Greys”從白色變為黑色,而“Greys_r”從黑色變為白色)。
這是一個工作示例,使用三個數組的 1 到 10 的值:
from matplotlib import pyplot as plt
import numpy as np
x = np.arange(1, 11)
y = np.arange(1, 11)
weights = np.arange(1, 11)
plt.scatter(x, y, c=weights, cmap='Greys', marker='+')
plt.colorbar()
plt.show()
您可以在 python 中使用顏色圖來生成不同深淺的藍綠色等https://matplotlib.org/3.1.0/tutorials/colors/colormaps.html我在這里使用藍色顏色圖
import matplotlib.pyplot as plt
import matplotlib as mpl
norm = mpl.colors.Normalize(vmin=min(weights), vmax=max(weights))
cmap = mpl.cm.ScalarMappable(norm=norm, cmap=mpl.cm.Blues)
for i, xi in enumerate(x):
plt.scatter(x[i],y[i],color=cmap.to_rgba(i+1),marker = '+')
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.