2015-09-17 90 views
0

我試圖根據與x或y值無關的值爲matplotlib散點圖中的點分配顏色。例如,每個點可以是3個值中的一個,所以我需要三種不同的顏色來表示3個可能的值。所以,有3個數組:x_arr,y_arr和val_arr,其中val_arr的每個元素可以是1,2或3.看起來像我見過的大多數示例都基於數組中的位置具有顏色,而不是基於一個獨立的價值。如何將顏色分配到散點

爲了得到3種點之間的高對比度更好的可視性,那裏有許多點,我做了這樣的事情:

pt_color = plt.cm.Dark2(np.linspace(0, 1, 3)) 

我想不通的是如何分配每個值元素都有正確的顏色。從概念上講,我願做這樣的事情,

gr.scatter(x_arr, y_arr, c=val_arr, cmap=pt_color) 

其中val_arr的每個元素使用pt_color映射到一個顏色,但上面沒有工作(我得到一個類型錯誤,因爲pt_color是unhashable型)。

任何指針表示讚賞。

+0

爲什麼你不val_arr分爲三個型動物陣列,那麼你可以很容易地給型動物的顏色,以每套價值...你必須雖然隱藏圖例,因爲你不希望看到有3組。 – Richard

+0

@Richard有趣的想法。雖然我說只有3種觀點,但這可能會讓人感到毛骨悚然,但這只是爲了簡化問題。可以有32種不同的類型。感謝您的建議。 – ChrisF

回答

1
import matplotlib.pyplot as plt 
from numpy.random import random, randint 

X = random(10) 
Y = random(10) 
val_arr = randint(low=0, high=3, size=10) 
plt.scatter(X, Y, c=val_arr, 
      s=40) 
plt.colorbar() 
plt.show() 

將val_arr值與默認顏色空間隔開,並且顏色條解釋了val_arr顏色的含義。

enter image description here

+2

設置'makeredegcolor ='none''有助於出現帶淺色的小散點標記。 – tacaswell

+0

@cphlewis謝謝。這看起來不錯。我有很多積分相鄰。由於默認地圖中的前兩種顏色(紅色和藍色,看着你的圖像)都是黑色的,所以很難區分。我假定默認值是某種漸變圖,其中2個相鄰數字(例如1和2)的顏色幾乎相同,但我認爲這不是真的。無論如何,這就是讓我嘗試非默認cmap的原因。 – ChrisF

+0

@tcaswell謝謝。那kwarg沒有爲我工作。也沒有'makeedgecolors'(假設你有一個錯字)。另外,這與'edgecolors ='None''不同,它對我有用嗎? – ChrisF