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