Seaborn увеличивает размер шрифта заголовка в пользовательской паре - PullRequest
1 голос
/ 02 ноября 2019

У меня есть следующий график в seaborn, который мне удалось создать с помощью SO-помощи (в основном Есть ли способ применить оттенок ТОЛЬКО к нижней части PairGrid в seaborn ), но в данный момент я застрял в этой частигде я должен увеличить размер шрифта моей легенды Название. Как можно это сделать? Мой код для сюжета следующий:

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

Я понимаю, что здесь что-то не так? Я не уверен, что мое предположение о том, что метод add_legend для seaborn может принимать те же аргументы, что и метод легенды для matplotlib (пожалуйста, исправьте меня, если я ошибаюсь, поскольку мое понимание наследования метода seaborn довольно слабое ...)

Я был бы более чем рад любым другим предложениям относительно того, как бы я изменил элементы легенды, используя что-то отличное от add_legend или более ориентированный на matplotlib подход.

1 Ответ

0 голосов
/ 04 ноября 2019

Итак, после некоторого поиска в коде для 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...