Scatterplot с использованием Seaborn - PullRequest
0 голосов
/ 08 мая 2019

У меня есть следующий фрейм данных df:

           A           B                  C               D           E       Gender
0          3.125       3.333333           3.333333        2.500       3.6     male
1          3.875       4.444444           4.555556        2.000       4.3     male
2          3.750       2.555556           4.111111        2.750       3.1     female
3          3.125       4.111111           4.444444        2.000       3.9     female
4          4.000       4.777778           4.777778        1.250       3.6     female
5          2.875       4.333333           4.000000        3.250       3.6     male
6          3.250       3.444444           2.333333        2.875       4.1     male

Теперь я хотел бы нарисовать следующий график, используя Seaborn:

ax = sns.stripplot(x=" ", y=" ", hue="Gender", data=df, jitter=True, palette="Set2", dodge=True)

К сожалению, я не знаю, что у меня естьположить в x и y, потому что формат моего dataframe как-то не совсем совпадает.Мне бы хотелось иметь 5 диаграмм рассеяния на оси x (A, B, C, D и E), а на оси y - значения значений A, B, C, D и E.

Как мне этого добиться?

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Попробуйте:

new_df = df.set_index('Gender').stack().reset_index()

sns.stripplot(x=new_df.level_1, y=new_df[0], hue=new_df.Gender)
plt.show()

Выход:

enter image description here

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

Вам нужно выбрать ось x . Вы можете взять одну из ваших столбцов. Однако все столбцы представляют собой некоторые данные, поэтому мы определим еще один x:

df["x"] = np.linspace(1, 7, 7)
df
>>>
       A         B         C      D    E  Gender    x
0  3.125  3.333333  3.333333  2.500  3.6    male  1.0
1  3.875  4.444444  4.555556  2.000  4.3    male  2.0
2  3.750  2.555556  4.111111  2.750  3.1  female  3.0
3  3.125  4.111111  4.444444  2.000  3.9  female  4.0
4  4.000  4.777778  4.777778  1.250  3.6    male  5.0
5  2.875  4.333333  4.000000  3.250  3.6    male  6.0
6  3.250  3.444444  2.333333  2.875  4.1    male  7.0

Теперь вы можете отобразить одну диаграмму рассеяния на столбец с циклом:

# style
plt.style.use('seaborn-darkgrid')

# create a color palette
palette = plt.get_cmap('Set1')

# Title
plt.title("A - B - C - D - E - Gender `plot`")
# multiple line plot
for i, column in enumerate(df.drop('x', axis=1)):
    plt.plot(df['x'], df[column], marker='', color=palette(i), linewidth=1, alpha=0.9, label=column)

plt.xlabel("x")

plt.show()

enter image description here

Вы можете сделать то же самое и отобразить один график на столбец :

# style
plt.style.use('seaborn-darkgrid')

# create a color palette
palette = plt.get_cmap('Set1')

# Title
plt.title("A - B - C - D - E `Spaghetti plot`", loc='left',
          fontsize=12, fontweight=0, color='orange')
# For each column
for i, column in enumerate(df.drop('x', axis=1)):
    plt.subplot(6,1,i+1)
    plt.plot(df['x'], df[column], marker='', color=palette(i), linewidth=1, alpha=0.9, label=column)

# Add legend
plt.legend(loc=2, ncol=2)

plt.xlabel("x")
plt.ylabel("y")

plt.show()

enter image description here

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