2016-06-18 50 views
25

Seaborn提供了一個名爲color_palette的函數,它允許您輕鬆地爲圖繪製新的color_palettes。seaborn color_palette as matplotlib colormap

colors = ["#67E568","#257F27","#08420D","#FFF000","#FFB62B","#E56124","#E53E30","#7F2353","#F911FF","#9F8CA6"] 

color_palette = sns.color_palette(colors) 

我想變換color_palette到CMAP,我可以在matplotlib使用,但我不知道怎樣才能做到這一點。

可悲的是,像「cubehelix_palette」,「light_palette」等函數...有一個「as_cmap」參數。不幸的是,「color_palette」不。

回答

20

你要的顏色列表從seaborn調色板轉換成matplolib的彩色地圖(感謝@RafaelLopes的修改建議):

import seaborn as sns 
import matplotlib.pylab as plt 
import numpy as np 
from matplotlib.colors import ListedColormap 

# construct cmap 
flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"] 
my_cmap = ListedColormap(sns.color_palette(flatui).as_hex()) 

N = 500 
data1 = np.random.randn(N) 
data2 = np.random.randn(N) 
colors = np.linspace(0,1,N) 
plt.scatter(data1, data2, c=colors, cmap=my_cmap) 
plt.colorbar() 
plt.show() 

enter image description here

+2

糾正我,如果我錯了,但是這看起來並不像一個seaborn color_palette的一個matplotlib CMAP轉型,這看起來像如何使matplotlib一個顏色表的替代解決方案。 如果我從您的代碼中刪除 sns.set_palette(flatui) 沒有任何更改。不過謝謝你展示了這個matplotlib的功能。 – Corrumpo

+1

這是功能方面的正確答案,但請不要使用離散的顏色組來映射連續變化的數據,這是非常具有誤導性的。 – mwaskom

+2

基於這個答案@Corrumpo你的代碼使用'cmap = ListedColormap(sns.color_palette()。as_hex())' – RafaelLopes

10

大多數seaborn方法來生成調色板有可選參數​​默認爲False。你可以用它來直接獲得Matplotlib顏色表:

import seaborn as sns 
import matplotlib.pylab as plt 
import numpy as np 

# construct cmap 
my_cmap = sns.light_palette("Navy", as_cmap=True) 

N = 500 
data1 = np.random.randn(N) 
data2 = np.random.randn(N) 
colors = np.linspace(0,1,N) 
plt.scatter(data1, data2, c=colors, cmap=my_cmap) 
plt.colorbar() 
plt.show() 

enter image description here

6

第一個答案是某種正確的,但太長了很多不必要的信息。正確的和簡單的答案是:

對任何sns.color_palette()轉換爲matplotlib兼容CMAP你需要的代碼

from matplotlib.colors import ListedColormap 
cmap = ListedColormap(sns.color_palette()) 
4

只是一個額外的小費兩條線 - 如果想連續彩條/顏色表,加入256 Seaborn colorscheme所需的顏色數量有很大幫助。

cmap = ListedColormap(sns.color_palette("Spectral",256)) 
相關問題