首页
学习
活动
专区
圈层
工具
发布

matplotlib
EN

Stack Overflow用户
提问于 2021-11-08 21:34:05
回答 1查看 46关注 0票数 1

我试图从合并的数据中绘制一个分组条形图。下面的条形码是堆叠的,我怎样才能把它并排放在一起,就像一个分组条形图一样?

代码语言:javascript
复制
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
df1 = pd.DataFrame({
    'key':  ['A', 'B', 'C', 'D'],
    'value':[ 10  ,6,   6,   8]})
df2 = pd.DataFrame({
    'key':  ['B', 'D', 'A', 'F'],
    'value':[ 3,   5,   5,  7]})

df3 = pd.merge(df1, df2, how='inner', on=['key'])
print(df1)
print(df2)
print(df3)

fig, ax = plt.subplots(figsize=(12, 8))

b1 = ax.bar(df3['key'],df3['value_x'])
b2 = ax.bar(df3['key'],df3['value_y'])

pngname = "demo.png"
fig.savefig(pngname, dpi=fig.dpi)
print("[[./%s]]"%(pngname))

当前产出:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-09 13:52:15

问题是x轴数据是相同的,在你的例子中它不是数字,它是键:"A","B","C“。所以matplotlib把它们堆在一起。

有一个简单的方法绕过它,一些教程在线显示https://www.geeksforgeeks.org/create-a-grouped-bar-plot-in-matplotlib/

所以,您所做的基本上是枚举键,即A=1、B=2、C=3。在此之后,选择所需的条形宽度,例如选择0.4。现在,将一组条形图按bar_ bars /2向左移动,另一组按bar_width/2向右移动。

也许代码比我解释得更好:

代码语言:javascript
复制
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
df1 = pd.DataFrame({
    'key':  ['A', 'B', 'C', 'D'],
    'value':[ 10  ,6,   6,   8]})
df2 = pd.DataFrame({
    'key':  ['B', 'D', 'A', 'F'],
    'value':[ 3,   5,   5,  7]})

df3 = pd.merge(df1, df2, how='inner', on=['key'])

fig, ax = plt.subplots(figsize=(12, 8))

# modifications
x = np.arange(len(df3['key']))  # enumerate the keys
bar_width = 0.4  # choose bar length

b1 = ax.bar(x - bar_width/2,df3['value_x'], width=bar_width, label='value_x')  # shift x values left
b2 = ax.bar(x + bar_width/2,df3['value_y'], width=bar_width, label='value_y')  # shift x values right
plt.xticks(x, df3['key'])  # replace x axis ticks with keys from df3.
plt.legend(['value_x', 'value_y']) 
plt.show()

结果:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69890195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档