为value_counts()设置条形图偏移量

时间:2018-11-04 17:02:37

标签: python pandas matplotlib

我想在同一图上绘制2个不同的条形图。

我要呈现的2个图是X.category_name.value_counts().plotX_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)

结果是这样的: photo

我需要为每个X轴设置偏移量,以使这些小节分开。但是我无法做到

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

因为在这种情况下x和y不是自变量。

2 个答案:

答案 0 :(得分:1)

要用熊猫绘制分组的条形图,可以将两个系列连接起来,并用.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

答案 1 :(得分:0)

在熊猫条形图中,手动调整条的位置并不像matplotlib本身那样自由。 (另请参阅@ImportanceOfBeingErnest的回答下的评论)
但是对于一般情况,让熊猫自动排列这些条并将几个数据列(应放在一个分组的条形图中)放入一个单独的数据帧中就足够了。

但是,对于那些想了解如何在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