Как построить только ось Y с помощью Seaborn - PullRequest
0 голосов
/ 11 апреля 2020

Я новичок в машинном обучении, и я хочу сравнить прогнозируемое и фактическое значение, теперь я хочу сравнить эти данные на графике, чтобы увидеть, являются ли оба значения одинаковыми или нет.

данные:

[-0.26112159,  1.84683522,  2.23912728,  1.58848056,  1.28589823,
        2.01355579, -0.144594  ,  0.8845673 , -0.19764173,  0.00837658,
        1.3515489 ,  0.18876488,  1.07088203,  1.11333346,  0.99854107,
        1.67141781,  1.74938417,  1.17907989,  1.57017018,  2.04269495,
       -0.10662102,  0.96283466, -0.01117658,  0.01610438,  1.31111783,
       -0.08608504, -0.09535655, -0.0227967 ,  1.82867539,  1.4492189 ]

это моя выборка данных для наборов данных A и B

я хочу построить график так,

enter image description here

Я предпочитаю использовать морского рожка

Ответы [ 3 ]

2 голосов
/ 11 апреля 2020

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

import numpy as np
from matplotlib import pyplot as plt

A = [-0.26112159, 1.84683522, 2.23912728, 1.58848056, 1.28589823,
     2.01355579, -0.144594, 0.8845673, -0.19764173, 0.00837658,
     1.3515489, 0.18876488, 1.07088203, 1.11333346, 0.99854107,
     1.67141781, 1.74938417, 1.17907989, 1.57017018, 2.04269495,
     -0.10662102, 0.96283466, -0.01117658, 0.01610438, 1.31111783,
     -0.08608504, -0.09535655, -0.0227967, 1.82867539, 1.4492189]
B = A
x = np.arange(len(A))
plt.scatter(x - 0.2, A, marker='o', color='tomato', label='Dataset A')
plt.scatter(x + 0.2, B, marker='o', color='deepskyblue', label='Dataset B')
plt.legend()

plt.show()

resulting plot

Для иметь крестики в качестве маркеров, используйте marker='x' или marker='+'.

Чтобы нарисовать swarmplot (очень похоже на stripplot ) через Seaborn:

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

# A, B = ...
sns.swarmplot(x=np.repeat(['Dataset A', 'Dataset B'], len(A)), y=np.concatenate([A, B]))

plt.show()

swarmplot

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

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

# A = ...
A = np.array(A)
B = A + np.random.normal(0,.1, len(A))
sns.kdeplot(A, label='Dataset A')
sns.kdeplot(B, label='Dataset B')

plt.show()

kde plot

1 голос
/ 11 апреля 2020

Если вы настаиваете на использовании морского рожка, один из способов заключается в следующем. Тем не менее, stripplot очень хорошо подходит для такого случая, поскольку вам не нужно явно передавать значения x.

import seaborn as sns
sns.set()

sns.scatterplot(range(len(A)), A, marker='x', color='orange', label='Dataset A')
sns.scatterplot(range(len(A)), A+0.1, marker='x', color='blue', label='Dataset B')

enter image description here

0 голосов
/ 11 апреля 2020

только что нашел способ сделать это, пожалуйста, дайте мне знать, если есть какой-то лучший способ построить график для сравнения двух массивов.

fig,_ax=plt.subplots(1,2,figsize=(15,10))
sns.stripplot(y=predictions,ax=_ax[0])
sns.stripplot(y=y_test,ax=_ax[1],color='red')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...