使用十六进制代码设置自定义的Seaborn调色板,并命名颜色

时间:2018-10-04 17:18:53

标签: python matplotlib seaborn

我的公司有一个正式的调色板,因此我需要在seaborn图表中使用这些颜色。因此,我想设置默认的seaborn调色板,并为这些颜色提供易于使用的名称,例如“ p”代表紫色,“ g”代表绿色。

这是我到目前为止要编写的代码:

# Required libraries
import matplotlib.pyplot as plt
import seaborn as sns

# Wanted palette details
enmax_palette = ["#808282", "#C2CD23", "#918BC3"]
color_codes_wanted = ['grey', 'green', 'purple']

# Set the palette
sns.set_palette(palette=enmax_palette)

# Assign simple color codes to the palette

请帮助我使用“ color_codes_wanted”列表为颜色分配简单的名称。

1 个答案:

答案 0 :(得分:3)

使用自定义功能

如前所述,您可以创建一个函数,如果使用自定义颜色名称进行调用,则会返回列表中的十六进制颜色。

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

# Wanted palette details
enmax_palette = ["#808282", "#C2CD23", "#918BC3"]
color_codes_wanted = ['grey', 'green', 'purple']

c = lambda x: enmax_palette[color_codes_wanted.index(x)]

x=np.random.randn(100)
g = sns.distplot(x, color=c("green"))

plt.show()

使用C {n}表示法。

应注意,seaborn中的所有颜色均为matplotlib颜色。 matplotlib提供的一个选项是所谓的C {n}表示法(n = 0..9)。通过指定类似“ C1”的字符串,您告诉matplotlib使用当前颜色循环中的第二种颜色。 sns.set_palette将颜色循环设置为您的自定义颜色。因此,如果您可以记住它们在循环中的顺序,则可以使用此信息,只需为第二种颜色指定"C1"

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

# Wanted palette details
enmax_palette = ["#808282", "#C2CD23", "#918BC3"]

sns.set_palette(palette=enmax_palette)

x=np.random.randn(100)
g = sns.distplot(x, color="C1")

plt.show()

操纵matplotlib颜色字典。

所有命名的颜色都存储在字典中,您可以通过

访问
matplotlib.colors.get_named_colors_mapping()

您可以使用自定义名称和颜色来更新此词典。请注意,这将覆盖具有相同名称的现有颜色。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors as mcolors
import seaborn as sns

# Wanted palette details
enmax_palette = ["#808282", "#C2CD23", "#918BC3"]
color_codes_wanted = ['grey', 'green', 'purple']
cdict = dict(zip(color_codes_wanted, [mcolors.to_rgba(c) for c in enmax_palette]))

mcolors.get_named_colors_mapping().update(cdict)
x=np.random.randn(100)
g = sns.distplot(x, color="green")

plt.show()

此处显示的所有代码将以“公司的绿色”颜色产生相同的图:

enter image description here