Seaborn histplot无法与自定义调色板一起正常工作

2024-04-28 09:13:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我简直找不到方法让seaborn.histplot显示我创建的自定义调色板的正确颜色。它与其他函数(如seaborn.countplot)配合使用效果很好,但在seaborn.histplot中,它会降低所有颜色的饱和度。我也尝试过使用seaborn.color\u调色板,并使用desat=1和as\u cmap=True,但它对histplot无效

例如:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap

df_plot = pd.DataFrame(
    {
        "pl_letter": ['b', 'b', 'b', 'b', 'b', 'b', 'b', 'd', 'd', 'c', 'b', 'c', 'b', 'c', 'c', 'b', 'c', 'b', 'b', 'b'],
        "discoverymethod": ['Astrometry', 'Disk Kinematics', 'Eclipse Timing Variations', 'Eclipse Timing Variations', 'Eclipse Timing Variations', 'Eclipse Timing Variations', 'Eclipse Timing Variations', 'Eclipse Timing Variations', 'Eclipse Timing Variations', 'Eclipse Timing Variations', 'Eclipse Timing Variations', 'Eclipse Timing Variations', 'Eclipse Timing Variations', 'Eclipse Timing Variations', 'Eclipse Timing Variations', 'Eclipse Timing Variations', 'Eclipse Timing Variations', 'Eclipse Timing Variations', 'Eclipse Timing Variations', 'Eclipse Timing Variations']
    }
)

cat_var1 = "pl_letter"
cat_var2 = "discoverymethod"

n_groups = len(set(df_plot[cat_var1].values.tolist()))
cmap = LinearSegmentedColormap.from_list("my_palette", ["#111539", "#97A1D9"])
my_palette = [cmap(i/n_groups) for i in np.array(range(n_groups))]

levels_var1 = pd.crosstab(df_plot[cat_var1], df_plot[cat_var2]).sort_values(by = cat_var1).index.tolist()
levels_var2 = list(set(df_plot[cat_var2]))

fig = plt.figure(
    figsize = (20, 10),
    tight_layout = True
)
# ax = sns.countplot(
#     data = df_plot, 
#     x = cat_var2, 
#     hue = cat_var1,
#     hue_order = levels_var1,
#     dodge = False,
#     ec = "white",
#     palette = my_palette
# )
ax = sns.histplot(
    data = df_plot,
    x = cat_var2,
    hue = cat_var1,
    hue_order = levels_var1,
    stat = "probability",
    multiple = "fill",
    shrink = 0.8,
    palette = sns.color_palette(
        palette = my_palette, 
        as_cmap = True, 
        desat = 1
    )
)

histplot with desaturated colorscountplot with correct colors


Tags: importdfplotasseaborncatcmapeclipse