Используя seaborn, как я могу добавить вертикальные линии на график распространения (sns.distplot) - PullRequest
0 голосов
/ 14 сентября 2018

Используя примеры из seaborn.pydata.org и Python DataScience Handbook , я могу создать комбинированный график распространения со следующим фрагментом:

Код:

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

# some settings
sns.set_style("darkgrid")

# Create some data
data = np.random.multivariate_normal([0, 0], [[5, 2], [2, 2]], size=2000)
data = pd.DataFrame(data, columns=['x', 'y'])

# Combined distributionplot
sns.distplot(data['x'])
sns.distplot(data['y'])

Участок: enter image description here

Как я могу объединить эту настройку с вертикальными линиями, чтобы я мог проиллюстрировать пороги следующим образом:

enter image description here

Я знаю, что могу сделать это с помощью matplotlib, как здесь Подплоты динамической гистограммы с линией, обозначающей цель , но мне действительно нравится простота графиков морского происхождения, и я действительно хотел бы знать, возможно ли сделать это больше элегантно (и да, я знаю, что морская волна строится на основе matplotlib).

Спасибо за любые предложения!

1 Ответ

0 голосов
/ 14 сентября 2018

Просто используйте

plt.axvline(2.8, 0,0.17)

И то же самое для другой линии

Здесь вместо 0,17 вы можете поместить максимумы вашего распределения, используя некоторую переменную, такую ​​как maxx = max(data) или что-то подобное. 2.8 - это позиция на оси х. О, помните, что значение y должно быть в диапазоне от 0 до 1, где 1 - верхняя часть графика. Вы можете изменить свои значения соответственно. Еще один очевидный вариант - просто

plt.plot([2.8, 2.8], [0, max(data)])
...