Функция метки, используемая для отображения на сетку фасетов в seaborn - PullRequest
1 голос
/ 15 января 2020

Я играл с этим примером построения в Сиборне.

Однако меня немного смущает функция построения меток:

def label(x, color, label):
    ax = plt.gca()
    ax.text(0, .2, label, fontweight="bold", color=color,
            ha="left", va="center", transform=ax.transAxes)


g.map(label, "x")

Я предполагаю, что функция карты сетки фасетов (g.map) вызывает функцию метки с аргументом x. Однако внутри функции x не используется, только label. Как функция узнает, что представляют собой другие аргументы, если они не переданы функцией map?

Я явно что-то упускаю, поэтому любая помощь будет оценена.

1 Ответ

1 голос
/ 16 января 2020

Из определения seaborn.FacetGrid map подпись вызова FacetGrid.map имеет значение

def map(self, func, *args, **kwargs):
    """ 
    ...
    args : strings
            Column names in self.data that identify variables with data to
            plot. The data for each variable is passed to `func` in the
            order the variables are specified in the call.
    ... 
    """

Таким образом, допущение g имеет тип seaborn.FacetGrid - который мы подтверждаем строкой

g = sns.FacetGrid(df, row="g", hue="g", aspect=15, height=.5, palette=pal)

в связанном примере

Затем, когда вы звоните

g.map(label, "x")

"x" интерпретируется как столбец в self.data (df["x"] в данном случае). Используются ли эти данные в функции или нет, это не имеет значения: их наличие определяется подписью вызова.


Редактировать

Значения, которые передаются в аргумент label func в g.map, поступают из этой части источника :

def map(self, func, *args, **kwargs):
    # ...
    # Insert a label in the keyword arguments for the legend
    if self._hue_var is not None:
        kwargs["label"] = utils.to_utf8(self.hue_names[hue_k])
    # ...

В основном это получает имя hue от каждого datasubset и передает его в аргумент ключевого слова label, который затем передается в функцию рисования:

    # ...
    # Draw the plot
    self._facet_plot(func, ax, plot_args, kwargs)
    # ...

где функция func, переданная в g.map, наконец, называется

def _facet_plot(self, func, ax, plot_args, plot_kwargs):
    # ...
    func(*plot_args, **plot_kwargs)
    # ...

Таким образом, аргумент label исходит из указания df["g"] в качестве аргумента hue в линия

g = sns.FacetGrid(df, row="g", hue="g", aspect=15, height=.5, palette=pal)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...