我试图从合并的数据中绘制一个分组条形图。下面的条形码是堆叠的,我怎样才能把它并排放在一起,就像一个分组条形图一样?
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))当前产出:

发布于 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向右移动。
也许代码比我解释得更好:
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()结果:

https://stackoverflow.com/questions/69890195
复制相似问题