Добавьте произвольные линии на морской участок - PullRequest
0 голосов
/ 13 мая 2019

Я могу построить совместное распределение двух переменных, используя jointplot.Тем не менее, я не могу найти способ добавить произвольные строки, показывающие конкретные значения в обоих измерениях.

Например, следующий код хорошо работает при отображении совместных и маргинальных распределений

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

sns.set(color_codes=True)

tips = sns.load_dataset("iris")
plot = sns.jointplot(x="sepal_length", y="sepal_width", data=tips, 
kind="kde")

Однако я не могу найти способ включить определенные вертикальные и горизонтальные линии в предварительно заданныеценности.Например, включение

plt.plot([6, 1.5], [6, 5], color="skyblue", lw=5, linestyle='solid', label="_not in legend")

создает строку на одном из полей, но ничего на jointplot.Есть ли способ, которым я мог бы добавить, например, вертикальные и горизонтальные линии при определенных значениях sepal_length и sepal_width?(скажем, вертикальная линия в 6 и горизонтальная линия в 3) И, вообще говоря, возможно ли сделать эти линии на основе конкретной статистики данных?(среднее значение медианы различных переменных).

Спасибо,

1 Ответ

0 голосов
/ 29 мая 2019

Вы можете изменить главные оси на стыке с помощью ax_join. Благодаря этому вы можете использовать стандартные команды matplotlib.pyplot, такие как axvline и axhline:

import seaborn as sns

sns.set(color_codes=True)

tips = sns.load_dataset("iris")
plot = sns.jointplot(x="sepal_length",y="sepal_width",data=tips,kind="kde")
plot.ax_joint.axvline(x=6)
plot.ax_joint.axhline(y=3)
plot.ax_joint.set_xlim(4,8)
plot.ax_joint.set_ylim(2,4.5)

На самом деле вы также можете построить общую линию, а не просто постоянную:

plot.ax_joint.plot([4,8], [2,5], 'b-', linewidth = 2)

Для константных строк, использующих статистику, вы можете использовать свойства dataframe pandas:

plot.ax_joint.axvline(x=tips.sepal_length.median(),linestyle='--')
plot.ax_joint.axhline(y=tips.sepal_width.mean(),linestyle='--')

Вы также можете добавить строки к маржинальному распределению, используя marg_x и marg_y:

plot.ax_marg_x.axvline(x=6)
plot.ax_marg_y.axhline(y=3)

Это выглядит так:

enter image description here

...