2016-06-18 53 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)) 
相关问题