Python 如何使联合核密度图在黑色背景下看起来更好(seaborn)

Python 如何使联合核密度图在黑色背景下看起来更好(seaborn),python,pandas,matplotlib,plot,seaborn,Python,Pandas,Matplotlib,Plot,Seaborn,我有三个数据集(df1、df2、df3,这里随机生成作为示例),我想在黑色背景上一起绘制联合内核密度。我不喜欢关节KDE重叠部分的外观,因为当白色部分(最低密度)与黑色背景重叠时,它会突出。相比之下,这在白色背景下看起来不错(将包括在底部进行比较),但我需要它是黑色背景 如何改善这一点的想法可以是: 反转颜色栏,使最低密度为深色,较高密度为亮色 有人知道如何做到这一点或如何让它变得更好吗 我不知道从哪里开始寻找,但我在seaborn的GitHub上找到了这个,它讲述了一点阴影 import nu

我有三个数据集(df1、df2、df3,这里随机生成作为示例),我想在黑色背景上一起绘制联合内核密度。我不喜欢关节KDE重叠部分的外观,因为当白色部分(最低密度)与黑色背景重叠时,它会突出。相比之下,这在白色背景下看起来不错(将包括在底部进行比较),但我需要它是黑色背景

如何改善这一点的想法可以是:

  • 反转颜色栏,使最低密度为深色,较高密度为亮色
  • 有人知道如何做到这一点或如何让它变得更好吗

    我不知道从哪里开始寻找,但我在seaborn的GitHub上找到了这个,它讲述了一点阴影

    import numpy as np
    import seaborn as sns
    import pandas as pd
    import matplotlib.pyplot as plt
    
    
    # Uncomment for black background figure
    plt.rcParams.update({
        "grid.color": "white",
        'hatch.color': 'k',
        "lines.color": "white",
        "patch.edgecolor": "white",
        'patch.facecolor': ([0, 1, 1]),
        'grid.alpha': 0.4,
        "text.color": "lightgray",
        "axes.facecolor": "black",
        "axes.edgecolor": "lightgray",
        "axes.labelcolor": "white",
        "xtick.color": "white",
        "ytick.color": "white",
        "grid.color": "lightgray",
        "figure.facecolor": "black",
        "figure.edgecolor": "black",
        "savefig.facecolor": "black",
        "savefig.edgecolor": "black"})
    
    df1 = pd.DataFrame(np.random.randint(0,60,size=(1500, 4)), columns=list('ABCD'))
    df2 = pd.DataFrame(np.random.randint(20,80,size=(1500, 4)), columns=list('ABCD'))
    df3 = pd.DataFrame(np.random.randint(40,100,size=(1500, 4)), columns=list('ABCD'))
    
    f, axs = plt.subplots()
    
    # Draw density plots
    axs = sns.kdeplot(df1.A, df1.B, alpha=0.5,
                     cmap="Reds", shade=True, shade_lowest=False, cbar=True)
    axs = sns.kdeplot(df2.A, df2.B, alpha=0.5,
                     cmap="Oranges", shade=True, shade_lowest=False, cbar=True)
    axs = sns.kdeplot(df3.A, df3.B, alpha=0.5,
                     cmap="Blues", shade=True, shade_lowest=False, cbar=True)
    


    在引擎盖下,
    seaborn
    正在使用
    matplotlib
    彩色地图

    答案提供了一些有关反转
    matplotlib
    colormaps的见解,适用于以下情况:

    所有标准颜色贴图也都有反向版本。它们的名字都一样,末尾加了
    \r
    。()

    您的一些彩色地图在最新版本上无法使用,因此我使用了
    红色
    橙色
    ,以及
    蓝色
    。请注意,我将它们换成了
    Reds\u r
    Oranges\u r
    Blues\u r
    。我相信这就是你想要的结果

    # Draw density plots
    axs = sns.kdeplot(
        df1.A, df1.B, alpha=0.5, cmap="Reds_r", shade=True, shade_lowest=False, cbar=True,
    )
    axs = sns.kdeplot(
        df2.A, df2.B, alpha=0.5, cmap="Greens_r", shade=True, shade_lowest=False, cbar=True
    )
    axs = sns.kdeplot(
        df3.A, df3.B, alpha=0.5, cmap="Blues_r", shade=True, shade_lowest=False, cbar=True
    )
    

    更新:

    您可以通过获取所选颜色贴图并对其调用reverse来手动反转该颜色贴图:

    color_map = plt.cm.get_cmap('Blues')
    reversed_color_map = color_map.reversed()
    
    然后将您的反向颜色映射提供给
    kdeplot

    axs = sns.kdeplot(
        df3.A, df3.B, alpha=0.5, cmap=reversed_color_map , shade=True, shade_lowest=False, cbar=True
    )
    

    通过这种方式,您可以使用任何颜色贴图,即使没有预定义的
    \r

    嗨,Matthew!是的,这就是我要找的。您能告诉我您安装了什么版本的matplotlib吗?我得到错误:
    “Reds\u r”不是name的有效值;支持的值是“538”、“重音”、“acton”、“藻类”、“amp”、“balance”、“bamako”…
    ,并将不断迭代以解决此问题。你的身材看起来不错,这正是我想要的。@JAG2024 Matplotlib的版本是
    3.1.3
    ,Python的版本是
    3.7.6
    ,我注意到在你的原始代码中你使用了
    reds
    (全部为低值)。你可以试试红色。\r。回答不错+10。添加足够的间距使色条刻度标签不重叠可能也是有益的。一旦我使用
    pip install matplotlib==3.1.3
    切换到matplotlib版本,它就可以使用颜色贴图工作:
    reds\u r
    blues\u r
    ,等等。!非常感谢。是的,同意@TrentonMcKinney的足够间距,该间距适用于w/:
    plt.图(figsize=(10,6),dpi=80,facecolor='w',edgecolor='k')