Как добавить дроплайны на диаграмму рассеяния морского происхождения? - PullRequest
0 голосов
/ 27 марта 2019

Используя следующий пример кода в записной книжке Jupyter:

import pandas as pd
import seaborn as sns
import numpy as np

%matplotlib inline
%config InlineBackend.figure_format = 'svg'

df = pd.DataFrame(np.random.rand(5, 2), columns=['a', 'b'])
sns.set()
g = sns.relplot(data=df, x='a', y='b', kind='scatter');
g.set(xlim=(0, 1))
g.set(ylim=(0, 1));

В полученном графике показаны точки данных, но я также хотел бы иметь вертикальные и иногда горизонтальные линии.Чтобы прояснить, что я имею в виду под каплями, вот макет фактического и желаемого результата:

Actual vs desired output

Обновление: немного более сложный ввод, которыйзатрудняет рисование линий вручную:

import pandas as pd
import seaborn as sns
import numpy as np

%matplotlib inline
%config InlineBackend.figure_format = 'svg'

df = pd.DataFrame(np.random.rand(20, 3), columns=['a', 'b', 'c'])
df['d'] = ['apples', 'bananas', 'cherries', 'dates'] * 5
sns.set()
g = sns.relplot(data=df, x='a', y='b', hue='c', col='d', col_wrap=2, kind='scatter');
g.set(xlim=(0, 1))
g.set(ylim=(0, 1));

1 Ответ

1 голос
/ 27 марта 2019

Существует несколько способов построения вертикальных / горизонтальных линий. Одним из них является использование hlines или vlines. Это может быть сделано с помощью цикла для удобства.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(121)

fig, ax = plt.subplots()

df = pd.DataFrame(np.random.rand(5, 2), columns=['a', 'b'])
sns.set()
g = sns.relplot(data=df, x='a', y='b', kind='scatter', color='blue', ax=ax);

for x, y in zip(df['a'], df['b']):
    ax.hlines(y, 0, x, color='blue')
    ax.vlines(x, 0, y, color='blue')
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)

plt.close(g.fig)

enter image description here

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