Как соединить среднюю вершину баров в барплоте с линией, используя морскую волю или матплотлиб? - PullRequest
0 голосов
/ 11 апреля 2020
myDict = {'a':[3,13,18,16,19,9,13,15,0,2],\
      'b':[23,14,18,24,19,9,14,13,21,22],\
      'c':[38,17,12,15,39,38,23,19,16,16]}

df = pd.DataFrame (myDict) df_melted = df.melt (value_vars = ['a', 'b', 'c'])

fig, ax1 = plt. subplots () sns.barplot (x = 'variable', y = 'value', data = df_melted, capsize = 0.1, ax = ax1, order = ['b', 'a', 'c']) plt , plt.show () plt.close ()

1 Ответ

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

Используйте lineplot, но сначала вам нужно сохранить тот же порядок, потому что lineplot не имеет аргумента order как barplot. Шаги:

  1. Создайте копию фрейма данных
  2. Установите variable категориальным с линейным графиком order из ['b','a','c']
  3. в тот же топор

Код будет:

order = ['b', 'a', 'c']
df_2 = df_melted.copy()
df_2['variable'] = pd.Categorical(df_2['variable'], order)
df_2.sort_values('variable', inplace=True)

#plot
fig, ax1 = plt.subplots()
sns.barplot(x='variable', y='value', data=df_melted, capsize=0.1, ax=ax1,
            order=order)
sns.lineplot(x='variable', y='value', data=df_2,
             ax=ax1, color='r', marker='+', linewidth=5, ci=None)
plt.show()

Это даст:

enter image description here

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