Установить смещение гистограммы для value_counts (). Plot - PullRequest
0 голосов
/ 04 ноября 2018

Я хочу построить 2 разных гистограммы на одном графике.

2 графика, которые я хочу представить, это X.category_name.value_counts().plot и X_sample.category_name.value_counts().plot

Я пробовал это

plt.figure(figsize=(8,3))
X.category_name.value_counts().plot(kind = 'bar',
                                           color = 'blue', label = 'original',
                                           ylim = [0, upper_bound], width = 0.2,
                                           rot = 0, fontsize = 12)
X_sample.category_name.value_counts().plot(kind = 'bar',
                                           color = 'orange', label = 'sample',
                                           ylim = [0, upper_bound], width = 0.2,
                                           rot = 0, fontsize = 12)

И сюжет получился таким: фото

Мне нужно установить смещения для каждой из моих осей X, чтобы разделить эту полосу. Но я никак не могу сделать

a1.plot(x-offset,y,kind='bar')
a2.plot(x,y,kind='bar')

, поскольку x и y не были аргументом в этом случае.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Чтобы построить сгруппированную диаграмму с пандами, вы можете объединить две серии и построить результирующий кадр с .plot

import numpy as np;np.random.seed(42)
import pandas as pd
import matplotlib.pyplot as plt

s1 = pd.Series(np.random.choice(list("ABCD"), size=800))
s2 = pd.Series(np.random.choice(list("ABCD"), size=400))

df = pd.concat([s1.value_counts(), s2.value_counts()], axis=1, sort=True)
df.columns = ["original", "sample"]

df.plot(kind="bar")
plt.show()

enter image description here

0 голосов
/ 04 ноября 2018

На графиках панд вы не так свободны в ручной настройке положения прутка, как в самом matplotlib. (см. также комментарии под ответом @ImportanceOfBeingErnest)
Но для общего случая должно быть вполне достаточно, чтобы pandas автоматически организовал столбцы и поместил несколько столбцов данных, которые должны быть помещены в сгруппированный столбец, в один кадр данных.

Однако, для тех, кто хотел бы увидеть, как реализовать запрошенную идею в matplotlib:

Пример:

df = pd.DataFrame(np.array([[4,3,2,1], [2,1,.5,.2]]).T, columns=['A', 'B'], index=list('asdf'))

fig, ax = plt.subplots()

ax.bar(x=np.arange(df.A.size)-.1, height=df.A, color='b', width=.2)
ax.bar(x=np.arange(df.A.size)+.1, height=df.B, color='orange', width=.2)
ax.set_xticks(range(df.A.size))
ax.set_xticklabels(df.index)

Результат:

enter image description here

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