You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:54:04