我想在同一图上绘制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)
结果是这样的: photo
我需要为每个X轴设置偏移量,以使这些小节分开。但是我无法做到
a1.plot(x-offset,y,kind='bar')
a2.plot(x,y,kind='bar')
因为在这种情况下x和y不是自变量。
答案 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()
答案 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)
结果: