Seaborn在自定义pairgrid中增加标题字体大小

时间:2019-11-02 15:19:14

标签: python matplotlib seaborn

我在seaborn中有以下图,我设法使用SO帮助(主要是Is there a way to apply hue ONLY to lower part of PairGrid in seaborn)创建了该图,但目前我不得不增加图例Title的字体大小。怎么会呢? 我的绘图代码如下:

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

df = sns.load_dataset('iris')

my_plot = sns.PairGrid(df)
my_plot = my_plot.map_diag(sns.kdeplot, shade=True)
my_plot = my_plot.map_lower(sns.regplot, scatter_kws={'alpha':0.3})
my_plot.hue_vals = df["species"]
my_plot.hue_names = df["species"].unique()
my_plot.palette = sns.color_palette("Set2", len(my_plot.hue_names))
my_plot = my_plot.map_upper(sns.scatterplot).add_legend(title='Species', fontsize= 20, title_fontsize=25)

enter image description here

但是不幸的是,这并不起作用,只有图例会增加字体,而标题不会。 我走到了这个小坑:https://github.com/matplotlib/matplotlib/issues/8699,如果我正确理解的话,现在应该可以使用title_fontsize了。同样根据我在这里可以看到的文档:https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.axes.Axes.legend.html

我在这里理解不对吗?我不太确定我对seaborn的add_legend方法可以采用与matplotlib的Legend方法相同的论点的假设(如果我错了,请更正我,因为我对seaborn方法继承的理解还很弱...)

对于其他建议,我将非常满意,因为我将如何通过使用不同于add_legend的内容或采用更注重matplotlib的方法来修改图例元素。

1 个答案:

答案 0 :(得分:0)

因此,在代码中搜索了add_legend之后,我发现了这一部分:

title = self._hue_var if title is None else title
        try:
            title_size = mpl.rcParams["axes.labelsize"] * .85
        except TypeError:  # labelsize is something like "large"
            title_size = mpl.rcParams["axes.labelsize"]

        # Set default legend kwargs
        kwargs.setdefault("scatterpoints", 1)

        if self._legend_out:

            kwargs.setdefault("frameon", False)

            # Draw a full-figure legend outside the grid
            figlegend = self.fig.legend(handles, label_order, "center right",
                                        **kwargs)
            self._legend = figlegend
            figlegend.set_title(title, prop={"size": title_size})

根据我对这段代码的理解(这是有限的),我认为唯一的方法就是更改mpl.rcParams["axes.labelsize"]参数。这行得通,但结果是轴标签的大小也会改变:

import pandas as pd
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt

df = sns.load_dataset('iris')
mpl.rcParams["axes.labelsize"] = 20

my_plot = sns.PairGrid(df)
my_plot = my_plot.map_diag(sns.kdeplot, shade=True)
my_plot = my_plot.map_lower(sns.regplot, scatter_kws={'alpha':0.3})
my_plot.hue_vals = df["species"]
my_plot.hue_names = df["species"].unique()
my_plot.palette = sns.color_palette("Set2", len(my_plot.hue_names))
my_plot = my_plot.map_upper(sns.scatterplot).add_legend(title='Species', fontsize= '12')

这对我来说并不理想,因为它也会更改图表中不需要的部分。

enter image description here