碰巧,有没有办法旋转下图中的 xticks(只是为了使其更具可读性)?通常
sns.xticks()
在新的 seaborn.objects 开发中不起作用(这太棒了!)
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"])).\
show()
此外,我的 x 轴是分类的,并且此警告: 使用分类单位绘制可解析为浮点数或日期的字符串列表。如果这些字符串应绘制为数字,请在绘制之前转换为适当的数据类型。 出现。我尝试使用:
import warnings
warnings.filterwarnings("ignore",category=UserWarning)
这可以通过创建 Axis 对象,旋转其中的轴,然后使用
so.Plot().on()
方法应用旋转轴标签来完成。请注意,如果您还计划添加构面,则这将不起作用(我在询问如何将其与构面结合时发现了您的问题)。
import seaborn.objects as so
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame({'a':[1,2,3],
'b':[4,5,6]})
fig, ax = plt.subplots()
ax.xaxis.set_tick_params(rotation=90)
(so.Plot(df, x = 'a', y = 'b')
.add(so.Line())
.on(ax))
涉及在您创建的 matplotlib 轴上绘制它的答案可能是正确的方法,但这样做会改变seaborn使用的布局引擎。幸运的是,您实际上可以获取seaborn绘制的底层
Figure
并直接操纵它,但这确实依赖于与seaborn内部的交互,因此很可能会在未来的版本中崩溃。
您可以获取底层图形的轴并更改刻度标签旋转,如下所示:
# This gives you the Plotter object used for rendering the plot
p = so.Plot(...).add(so.Line()).plot()
# Then you can get the internal Figure object with `._figure`:
p._figure.axes[0].xaxis.set_tick_params(rotation=90)
然后您可以像平常一样使用
p.show()
或 display(p)
或 p.save(...)
进行渲染。