如何在Matplotlib分组柱状图中增大X轴柱子间的间距?
解决分组柱状图X轴柱子无间距问题
你的问题出在width参数设置为1.0,这会让每组柱子完全占满X轴刻度的宽度,导致组与组之间没有空隙。下面是具体的解决方法:
方法1:调整width参数减小组宽度
将width从1.0改为0.7左右的数值,这样每组柱子的总宽度会小于X轴刻度间距,组与组之间自动留出空隙,同时组内柱子也会有合理间距。
修改后的代码:
import pandas as pd import matplotlib.pyplot as plt data = [['Tom', 'a'], ['Tom', 'a'],['nick', 'a'], ['juli', 'a'],['juli', 'a'],['juli', 'b'],['Simon', 'b'],['Tom', 'b'],['Sandra', 'a'],['Stefan', 'b'],['Johnny', 'a'],['Johnny', 'b'],['Johnny', 'b'],['Johnny', 'b']] df = pd.DataFrame(data, columns=['name', 'category']) ax= df.groupby('name')['category'].value_counts().unstack(0).plot( kind ="bar", width=0.7, # 减小width值以留出间距 figsize = (20, 8), color=['#F9986C', '#C9B265', 'blue', 'red', '#6ABFD0','#C4A5F6','yellow'] # 匹配name数量的颜色 ) plt.ylabel('Count',fontsize=23) plt.xlabel('Category', fontsize=23) plt.legend(bbox_to_anchor=(0.99, 0.99), loc='upper right', borderaxespad=0) plt.show()
方法2:调整分组逻辑(更常用的布局)
如果你希望每个姓名作为X轴标签,每个标签下显示对应a/b类别的计数,这种布局的间距会更直观。只需调整分组和unstack的方向:
import pandas as pd import matplotlib.pyplot as plt data = [['Tom', 'a'], ['Tom', 'a'],['nick', 'a'], ['juli', 'a'],['juli', 'a'],['juli', 'b'],['Simon', 'b'],['Tom', 'b'],['Sandra', 'a'],['Stefan', 'b'],['Johnny', 'a'],['Johnny', 'b'],['Johnny', 'b'],['Johnny', 'b']] df = pd.DataFrame(data, columns=['name', 'category']) # 切换分组和unstack的维度 ax= df.groupby('category')['name'].value_counts().unstack(0).plot( kind ="bar", width=0.8, figsize = (20, 8), color=['#F9986C', '#C9B265'] ) plt.ylabel('Count',fontsize=23) plt.xlabel('Name', fontsize=23) plt.legend(bbox_to_anchor=(0.99, 0.99), loc='upper right', borderaxespad=0) plt.show()
内容的提问来源于stack exchange,提问作者Shannah
相关产品推荐
相关产品推荐

