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
相关产品推荐
相关产品推荐

