2015-12-15 106 views
1

我在python中繪製了一個使用matplotlib的散點圖。我想基於一些功能轉色點,像這樣:基於matplotlib中函數的自定義顏色映射

import matplotlib.pyplot as plt 

def color(x, y): 
    # based on some rules, return a color 
    if(condition): 
     return 'red' 
    else: 
     return 'blue' 

plt.scatter(index, data) #c= something? 

我知道了matplotlib.from_levels_and_colors功能的,但問題是,映射不是基於在x的值的水平或y軸。每個數據點都有一個由函數計算出來的第三個值,這就是我想要基於的顏色點。

有沒有辦法做到這一點?

回答

2

你爲什麼不只是讓你的c陣列的默認顏色映射的指示功能。例如:

import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(100) 
y = np.arange(100) 
# Colors whether or not x+y is a multiple of 5 
c = (x + y)%5 == 0 

# Use 'jet' colormap for red/blue. 
plt.scatter(x, y, c=c, cmap='jet') 

enter image description here

當然,你可以使用與將被映射到0和1

如果你期望的結果有2點以上的顏色,那麼它的不同極端的一個顏色表完全可以通過作爲c具有許多不同值的數組(並且不需要歸一化)。示例見here

+1

雖然我沒有最終使用這種方式,但我會接受它,因爲它比我的方式更清潔 – bobroxsox

1

這是我最終這樣做的方式。我基於x和y值創建了一個顏色列表,然後將其傳遞給分散函數。並不像wflynny的答案那樣好,但它的確意味着您可以根據需要進行儘可能多的計算來創建數組,而不必創建一個函數來完成它。

import matplotlib.pyplot as plt 

colors = calculate_colors(x, y) 
plt.scatter(index, data, c=colors) 
相關問題