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

Python中Seaborn(sns)如何手动设置x轴刻度并指定起始值

Python Seaborn手动设置x轴刻度解决方案

你之前直接调用g.set_xticklabels()的方法存在两个核心问题:

  1. 该方法仅替换现有刻度的文本标签,不会修改x轴的实际数值范围,会将原本从2020-02开始的刻度硬套上2020-01的标签,导致数据整体左移,看起来2020-01也有数据
  2. 你代码中单独创建的fig, axes = plt.subplots()对象不会作用到Seaborn绘图上:sns.relplot是Figure级别的接口,会自动创建独立的画布,你对axes的刻度设置完全不会生效,这也是刻度对齐异常的原因

正确修改方案

直接调整x轴的数值范围,再对Seaborn返回的FacetGrid自带的坐标轴做刻度设置即可,修改后的代码如下:

def create_lineplot(dataframe):
    months = mdates.MonthLocator()  # 每一个月显示一个刻度
    years_fmt = mdates.DateFormatter('%Y-%m')  # 日期显示格式

    # 过滤数据,仅保留2020年的记录和需要的字段
    dataframe = dataframe[['dev_id', 'temp_20', 'temp_60', 'datetime']]
    dataframe["datetime"] = pd.to_datetime(dataframe["datetime"])
    soil = dataframe[dataframe['datetime'].dt.year == 2020]

    # 删掉原本没用的fig, axes = plt.subplots(figsize=(20, 2))代码
    mdf = pd.melt(soil, id_vars=['datetime', 'dev_id'], var_name=['Temperature'])
    g = sns.relplot(data=mdf, x='datetime', y='value', kind='line', hue='Temperature', height=5, aspect=3)

    # --------------------插入的正确代码开始--------------------
    # 手动设置x轴范围,左边界扩展到2020-01-01,右边界到2020-12-31,空出2020-01的空白区域
    g.ax.set_xlim(pd.to_datetime('2020-01-01'), pd.to_datetime('2020-12-31'))
    # 对Seaborn实际绘图的坐标轴做刻度设置,保证生效
    g.ax.xaxis.set_major_locator(months)
    g.ax.xaxis.set_major_formatter(years_fmt)
    g.ax.xaxis.set_minor_locator(months)
    # --------------------插入的正确代码结束--------------------

    g._legend.remove()
    plt.xticks(rotation='vertical')
    plt.tight_layout()
    plt.legend(loc='upper right')
    plt.savefig('lineplot.png')
    plt.show()

额外疑问解答:刻度对齐

上述代码直接对Seaborn绘图的实际坐标轴g.ax进行刻度设置,配合MonthLocator会自动将刻度对齐到每个月的起始位置,不需要手动写死刻度标签,也不会出现刻度偏移的问题。

内容的提问来源于stack exchange,提问作者Buster3650

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:36:02