Seaborn.objects中X轴刻度旋转及分类轴警告处理求助
Seaborn Objects 折线图两个问题的解决方法
1. X轴刻度旋转设置
旧版的sns.xticks()不适用于Seaborn Objects(so)API,可通过以下两种方式实现刻度旋转:
方法1:通过.theme()直接传递参数
在绘图链中添加.theme(xtick_rotation=45),角度可根据需求调整:
.theme(xtick_rotation=45)
方法2:手动获取Axes对象设置
如果需要更精细的控制,可先构建绘图对象,再获取Axes调整:
# 先构建绘图对象但不显示 plot = tcap.\ assign(date_time2 = tcap['date_time'].dt.date).\ groupby(['date_time2', 'person']).\ agg(counts = ('person', 'count')).\ reset_index().\ pipe(so.Plot, x = "date_time2", y = "counts", color = "person").\ add(so.Line(marker="o", edgecolor="w")).\ label(x = "Date", y = "# of messages", color = str.capitalize, title = "Plot 2: Volume of messages by person, by day").\ scale(color=so.Nominal(order=["lorne_a_20014", "kayla_princess94"])) # 获取Axes并设置X轴刻度旋转 ax = plot.on(plt.gca()) ax.tick_params(axis='x', rotation=45) # 显示图形 plot.show()
2. 分类X轴的类型警告消除
警告的核心原因是date_time2的date类型被Seaborn识别为可解析的数值/日期字符串,触发了类型推断警告。有两种可靠的解决方式:
方法1:显式指定X轴为分类类型
在.scale()中添加x=so.Nominal(),明确告知工具将X轴视为分类变量:
.scale(x=so.Nominal(), color=so.Nominal(order=["lorne_a_20014", "kayla_princess94"]))
方法2:保留datetime类型而非date对象
将date_time2转换为datetime64类型(而非dt.date()返回的date对象),让Seaborn正确识别为时间轴:
assign(date_time2 = tcap['date_time'].dt.floor('D')) # 仅保留日期部分,仍为datetime类型
整合后的完整代码
import seaborn.objects as so import matplotlib.pyplot as plt tcap.\ assign(date_time2 = tcap['date_time'].dt.floor('D')).\ groupby(['date_time2', 'person']).\ agg(counts = ('person', 'count')).\ reset_index().\ pipe(so.Plot, x = "date_time2", y = "counts", color = "person").\ add(so.Line(marker="o", edgecolor="w")).\ label(x = "Date", y = "# of messages", color = str.capitalize, title = "Plot 2: Volume of messages by person, by day").\ scale(x=so.Nominal(), color=so.Nominal(order=["lorne_a_20014", "kayla_princess94"])).\ theme(xtick_rotation=45).\ show()
内容的提问来源于stack exchange,提问作者Robert Chestnutt
相关产品推荐
相关产品推荐

