seaborn color_palette作为matplotlib colormap

huus2vyu  于 2023-04-21  发布在  其他
关注(0)|答案(5)|浏览(143)

Seaborn提供了一个名为color_palette的函数,它允许您轻松地为绘图创建新的color_palettes。

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”参数。

8nuwlpux

8nuwlpux1#

您必须将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()

oxalkeyp

oxalkeyp2#

大多数生成调色板的seaborn方法都有一个可选参数as_cmap,默认情况下为False。您可以使用直接获取Matplotlib色彩Map表:

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()

moiiocjp

moiiocjp3#

第一个答案在某种程度上是正确的,但太长了,有很多不必要的信息。正确和简短的答案是:
要将任何sns.color_palette()转换为matplotlib兼容的cmap,需要两行代码

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

sz81bmfz4#

只是一个额外的提示-如果一个人想要一个连续的颜色条/颜色Map表,添加256作为Seaborn配色方案所需的颜色数量帮助很大。

cmap = ListedColormap(sns.color_palette("Spectral",256))
bq3bfh9z

bq3bfh9z5#

Pandas plots(matplotlib plots)需要ListedColormap来定义颜色列表。如果使用as_cmap=True参数创建了seaborn调色板,则也可以直接使用seaborn调色板。
创建示例数据集

import pandas
import seaborn
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
df = pandas.DataFrame({'x':range(0,30), 'y':range(10,40)})
df.set_index('x', inplace=True)
df["z"] = 39
df["a"] = 10

使用简单的颜色列表绘制3个数据框列(这不需要海运)

df.plot(colormap=ListedColormap(["red","green","orange"]), figsize=(3,3))
plt.show()

使用使用as_cmap=True参数定义的seaborn调色板:

palette = seaborn.color_palette("rocket_r", as_cmap=True)
df.plot(colormap=palette, figsize=(3,3))
plt.show()

感谢Serenity,Generic Wevers和Ramon Crehuet的回答。

相关问题