seaborn柱状图避免柱体重叠及自定义x轴刻度显示频率问询
问题1 同x值柱体重叠+ dodoge=True柱子过窄解决方案
问题根源是dodge=False时同x坐标的柱子会完全重合,开启dodge=True后柱子过窄是因为seaborn会为所有x值的全部hue分组预留占位,无数据的位置也会留空挤压有效柱子宽度。直接调整barplot的width参数放大整体柱宽即可,示例场景下可设为0.9。
问题2 自定义x轴刻度显示频率解决方案
通过matplotlib轴对象的set_xticks方法自定义即可,先匹配需要显示的刻度在排序后的x唯一值中的位置,再指定显示的标签即可。
完整修改后代码
import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt xvar = [1,2,2,3,4,5,6,8] yvar = [3,6,-4,4,2,0.5,-1,0.5] year = [2010,2011,2012,2010,2011,2012,2010,2011] df = pd.DataFrame({ 'xvar': xvar, 'yvar': yvar, 'year': year }) sns.set_style('whitegrid') fig,ax=plt.subplots() fig.set_size_inches(10,5) # 解决柱体重叠+过窄问题:开启dodge,调宽柱子宽度 sns.barplot(data=df,x='xvar',y='yvar',hue='year',lw=0,dodge=True, width=0.9) # 自定义x轴刻度,仅显示1、3、6 sorted_x = sorted(df['xvar'].unique()) show_x = [1,3,6] tick_positions = [sorted_x.index(v) for v in show_x] ax.set_xticks(tick_positions) ax.set_xticklabels(show_x) plt.show()
内容的提问来源于stack exchange,提问作者soom
相关产品推荐
相关产品推荐

