簡體   English   中英

散點圖,其中每個點顏色是K種顏色的不同混合

[英]Scatterplot wherein each point color is a different mixture of K colors

我有要聚類為K個聚類的2D數據。 假設K=4 運行聚類算法后,每個點都有一個4個長度的概率矢量(其條目加起來為1),指示該點屬於每個簇的概率。

我的想法是為每個聚類分配一種顏色,然后繪制一個散點圖,其中每個點根據其概率矢量被着色為所有顏色的混合。 如果K=3 ,則顏色可以是RGB,因此我可以使用ax.scatter(x1, x2, facecolors=probability_vectors)類的東西,如本問題中所述。 我使用該解決方案在具有K=2的圖像中進行繪圖(將所有向量中的Blue列固定為0)。 我仍然可以將其用於K=3但對於K=4我需要一些不同的東西。 有什么建議嗎? 概率分布的二維散點圖

編輯:

使用Tomᚊíma的答案,如果我使用以下代碼(用於5個群集):

import colorsys
from matplotlib import pyplot as plt
import numpy as np

N = 5
HSV = [(float(x)/N, 1, 1) for x in range(1,N+1)]
RGB = map(lambda x: colorsys.hsv_to_rgb(*x), HSV)

print HSV
plt.scatter(range(N),np.repeat(0.5,N),c=RGB,s=200)

我得到以下輸出:

[(0.2, 1, 1), (0.4, 1, 1), (0.6, 1, 1), (0.8, 1, 1), (1.0, 1, 1)] 在此處輸入圖片說明

我現在的問題是,如果我有一個點的概率向量為[0.5, 0.0, 0.0, 0.0, 0.5] ,即黃色集群的一半和紅色集群的一半,則其顏色應該是橙色。 但是,如果我執行0.5*0.2 + 0.5*1.0 ,則得到0.6 ,它是藍色。 我應該如何計算平均值才能得到橙色而不是藍色?

編輯2:

知道了,我只需要平均每個群集質心的RGB版本(而不是HUE)

:D 在此處輸入圖片說明

您正在尋找HSB色彩空間。

HSB中的顏色由3個值組成:

  • H =色相-實際顏色
  • S =飽和度-有多少顏色(顏色越少,看起來越像灰度)
  • B =亮度

您可以輕松地從該空間生成N種最獨特的顏色,然后轉換為RGB

import colorsys
N = 5
HSV = [(x*1.0/N, 0.5, 0.5) for x in range(N)]
RGB = map(lambda x: colorsys.hsv_to_rgb(*x), HSV)

要混合HSB顏色以繪制點,可以對權重等於概率向量的相應RGB顏色進行權重平均。

您可以使用matplotlib顏色文檔的“顏色圖” 部分中提到的RGBA方案。 A代表alpha。 另請閱讀ScalarMappable部分

根據問題中引用的答案進行修改:

import matplotlib.pyplot as plt
import numpy as np

x, y = np.random.random((2, 10))
rgba = np.random.random((10, 4))

fig, ax = plt.subplots()
ax.scatter(x, y, s=200, facecolors=rgba)
plt.show()

暫無
暫無

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

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