Воспроизвести geom_vline и geom_text в seaborn? - PullRequest
0 голосов
/ 04 мая 2020

В R с ggplot2 мы можем использовать geom_text и geom_vline для построения вертикальных линий и записи аннотаций при построении диаграмм плотности или гистограмм с помощью facet_grid.

В Python с Seaborn, есть ли подобный способ выполнения этих задач?

Например, как добавить текст "Mean:xxx" в правый верхний угол в каждом из участков в следующем примере? Как добавить соответствующие вертикальные линии для средств в каждом подзаговоре?

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="darkgrid")

tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, row="sex", col="time", margin_titles=True)
bins = np.linspace(0, 60, 13)
g.map(plt.hist, "total_bill", color="steelblue", bins=bins)

1 Ответ

1 голос
/ 05 мая 2020

Вам необходимо определить пользовательскую функцию, которая принимает столбец в data.frame в качестве первого аргумента, а затем вы можете построить среднее значение, используя plt.axvline. Текст немного хитрый (надеюсь, я правильно понял); вам нужно использовать plt.text в координаты осей :

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="darkgrid")

def geom_vline(data,**kwargs):
    ax = plt.gca()
    m = data.mean()
    plt.axvline(m, **kwargs)
    plt.text(0.8,0.8,"Mean= "+str(round(m)),horizontalalignment='center',
             verticalalignment='center',transform=ax.transAxes)

tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, row="sex", col="time", margin_titles=True)
bins = np.linspace(0, 60, 13)
g.map(plt.hist, "total_bill", color="steelblue", bins=bins)
g.map(geom_vline,"total_bill", ls=":", c=".5")

enter image description here

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