使用来自seaborn的kdeplots绘制多个填充轮廓子图的白色空间

时间:2018-05-02 16:51:07

标签: python matplotlib seaborn

我编写了一个python函数,用于绘制一系列填充轮廓,使用kdeplot函数seaborn从一个numpy数组列表中获取数据集的某些列。代码如下:

import matplotlib.pyplot as plt
import seaborn as sns

def kdeplots_figure(dataset):
    cols = int((len(dataset)-2)/2)
    figure, axes = plt.subplots(1, cols, figsize=(15,6), sharey=True)
    f = 2
    for i in range (len(axes)):
        sns.set_style("white")
        axes[i].set_title(" Cluster {0}".format(i), fontsize = 16)
        axes[i].set_ylabel('Y Axis', fontsize = 14)
        axes[i].set_xlabel('X Axis', fontsize = 14)
        axes[i].set_xlim([95,130])
        axes[i].tick_params(labelsize=13)
        sns.kdeplot(dataset[f],dataset[f+1],cmap="Blues_d",shade_lowest=True,ax=axes[i])
        sns.kdeplot(dataset[f],dataset[f+1],cmap="Blues",shade_lowest=True,shade=True,ax=axes[i])
        f = f+2
    plt.show()

然而,一些轮廓在他们在x-y平面中采样的空间不同,当我绘制它们时,在一些图形的背景中有一个白色部分,我不知道如何填充。见下文:

Plot Output

两个图表看起来都应该位于右侧。我尝试使用ax.set_facecolor设置背景颜色,并借助此线程获取cmap调色板的最后一种颜色:Getting individual colors from a color map in matplotlib。但是,我得到的背景颜色略有不同。我也尝试使用sns.kdeplot的剪辑参数而没有运气。

我该如何解决这个问题?如果您需要其他信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

所以我做了一个黑客并摆脱了网格并使用gimp来获得最小的脸颜色。 (我使用剪切工具获取图像的图片,在一个名为gimp的免费程序中打开它,并获得十六进制代码。)然后我改变了轴的面部颜色。以下代码将为您提供所需的内容。

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

def kdeplots_figure(dataset):
    cols = int((len(dataset)-2)/2)
    figure, axes = plt.subplots(1, cols, figsize=(15,6), sharey=True)

    f = 2
    for i in range (len(axes)):
        sns.set_style("white")
        axes[i].set_title(" Cluster {0}".format(i), fontsize = 16)
        axes[i].set_ylabel('Y Axis', fontsize = 14)
        axes[i].set_xlabel('X Axis', fontsize = 14)

        axes[i].tick_params(labelsize=13)
        axes[i].grid(False) 

        axes[i].set_facecolor('#eef5fc')
        sns.kdeplot(dataset[f],dataset[f+1],cmap="Blues_d",ax=axes[i])
        sns.kdeplot(dataset[f],dataset[f+1],cmap="Blues",  shade=True, 
        extend='both', ax=axes[i])

        f = f+2
    plt.show()

a = np.random.rand(6,6)
kdeplots_figure(a)

enter image description here