如何使用seaborn.objects旋转xticks

问题描述 投票:0回答:2

碰巧,有没有办法旋转下图中的 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)
python rotation seaborn xticks seaborn-0.12.x
2个回答
5
投票

这可以通过创建 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))


0
投票

涉及在您创建的 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(...)
进行渲染。

© www.soinside.com 2019 - 2024. All rights reserved.