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

Python中使用sns.relplot绘图时如何设置x轴刻度为12个月份

解决seaborn relplot x轴仅显示7个月份刻度问题

问题根因

当前代码的核心问题是创建了两个独立画布:先通过plt.subplots()生成了第一个画布和对应的axes对象,后续调用sns.relplot()时会自动生成第二个独立的画布和坐标轴,所有对前者axes的刻度设置完全没有作用到实际渲染的relplot图表上,导致刻度配置失效。

修正后的完整代码

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

def create_lineplot(dataframe):
    # 定义目标x轴标签
    months = ['2020-01', '2020-02', '2020-03', '2020-04', '2020-05', '2020-06', 
              '2020-07', '2020-08', '2020-09', '2020-10', '2020-11', '2020-12']

    # 数据预处理
    dataframe = dataframe[['dev_id', 'outside_temperature', 'datetime']]
    dataframe["datetime"] = pd.to_datetime(dataframe["datetime"])
    dataframe_2020 = dataframe[dataframe['datetime'].dt.year == 2020]
    mdf = pd.melt(dataframe_2020, id_vars=['datetime', 'dev_id'], var_name=['Temperature'])

    # 生成relplot图表
    g = sns.relplot(data=mdf, x='datetime', y='value', kind='line', hue='Temperature', height=5, aspect=3)
    g._legend.remove()

    # 手动绑定12个指定月份刻度,完全避免自动截断问题
    plt.xticks(
        ticks=pd.date_range(start='2020-01-01', end='2020-12-31', freq='MS'),
        labels=months,
        rotation='vertical'
    )

    plt.tight_layout()
    plt.legend(loc='upper left')
    plt.savefig('lineplot.png')
    plt.show()

关键修改说明

  • 移除了无效的plt.subplots()语句,避免生成冗余画布
  • 直接指定刻度值和对应标签,100%保证显示全部12个月份标签,不会被自动截断
  • 调整了刻度配置的作用逻辑,确保配置直接作用到实际渲染的图表上

内容的提问来源于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 18:15:00