seaborn color_palette as matplotlib colormap

Dre*_*met 40 python plot matplotlib seaborn

Seaborn提供了一个名为color_palette的功能,可以让您轻松地为绘图创建新的color_palettes.

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

color_palette = sns.color_palette(colors)
Run Code Online (Sandbox Code Playgroud)

我想将color_palette转换为cmap,我可以在matplotlib中使用,但我不知道如何做到这一点.

可悲的是,像"cubehelix_palette","light_palette"这样的函数,......有一个"as_cmap"参数.不幸的是,"color_palette"没有.

Ser*_*ity 38

你必须将一个颜色列表从seaborn调色板转换为matplolib的颜色映射(thx到@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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 根据这个答案@Corrumpo,你的代码使用`cmap = ListedColormap(sns.color_palette().as_hex())` (3认同)
  • 纠正我,如果我错了,但这看起来不像是将seaborn color_palette转换为matplotlib cmap,这看起来像是如何使用matplotlib制作色彩映射的替代解决方案.如果我从你的代码中删除sns.set_palette(flatui)没有任何变化.不过感谢您展示这个matplotlib功能. (2认同)
  • 这是功能方面的正确答案,但请不要使用离散的颜色集来映射连续变化的数据,这是非常具有误导性的。 (2认同)

Ram*_*uet 25

生成调色板的大多数seaborn方法都有一个可选参数as_cmap,默认情况下是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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Gen*_*ers 20

第一个答案在某种程度上是正确的,但是对于很多不必要的信息来说太长了.正确而简短的答案是:

要将any转换sns.color_palette()为matplotlib兼容的cmap,您需要两行代码

from matplotlib.colors import ListedColormap
cmap = ListedColormap(sns.color_palette())
Run Code Online (Sandbox Code Playgroud)

  • 而相反呢?是否有类似的代码将 matplotlib 颜色图(如“[0.0, 'rgb(30, 136, 229)'], [0.01, 'rgb(30, 135, 228)'], ...”转换为seaborn兼容的调色板? (3认同)

小智 9

只是一个额外的提示 - 如果你想要一个连续的colorbar/colormap,加上256,因为Seaborn colorscheme所需的颜色数量有很大帮助.

cmap = ListedColormap(sns.color_palette("Spectral",256))   
Run Code Online (Sandbox Code Playgroud)