Matplotlib бок о бок - PullRequest
       0

Matplotlib бок о бок

1 голос
/ 28 января 2020

Я пытаюсь построить следующий фрейм данных с помощью matplotlib:

df = pd.DataFrame({'X': ["A", "A", "B", "B"], 'Z': ["a", "b", "a", "b"], 'Y': [5, 1, 10, 5]})
df

    X   Z   Y
0   A   a   5
1   A   b   1
2   B   a   10
3   B   b   5

Мне нужны два столбца, где столбцы расположены рядом друг с другом, а не друг над другом. Когда я запускаю это, столбцы располагаются друг над другом:

plt.barh(df['X'][df['Z'] == "a"], df['Y'][df['Z'] == "a"], color = 'blue')
plt.barh(df['X'][df['Z'] == "b"], df['Y'][df['Z'] == "b"], color = 'red')

И когда я пытаюсь изменить положение столбцов, я получаю ошибку: can only concatenate str (not "float") to str. Как я могу обойти это?

Ответы [ 3 ]

2 голосов
/ 28 января 2020

Если вы хотите, чтобы планки располагались рядом, вы можете использовать библиотеку seaborn :

import seaborn as sns
sns.barplot(data=df, x='Y', hue='Z', y='X')

enter image description here

2 голосов
/ 28 января 2020

Использование DataFrame.pivot с DataFrame.plot.barh:

df.pivot(*df).plot.barh()

enter image description here

или

df.pivot(*df).plot(kind = 'bar')

enter image description here

1 голос
/ 28 января 2020

Не совсем точно, что вы хотите, но вы можете попробовать это:

df.set_index(['X','Z'])['Y'].unstack().plot.barh()

enter image description here

Или

df.set_index(['X','Z'])['Y'].unstack().plot.bar()

enter image description here

Или

df.set_index(['X','Z'])['Y'].unstack().plot.barh(subplots=True, layout=(1,2))

enter image description here

или

df.set_index(['X','Z'])['Y'].unstack().plot.bar(subplots=True, layout=(1,2))

enter image description here

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