我正在使用最新版本的
seaborn中出色的
seaborn.objects
模块。
我想制作一个情节:
seaborn.objects
不直接支持旋转 x 轴标签(制作图表后像 plt.xticks()
这样的标准东西不起作用),但文档建议使用 .on()
方法来实现。 .on()
采用 matplotlib 图形/子图或轴对象并在其之上构建。正如我在回答这个问题时指出的,以下代码可用于旋转轴标签:
import seaborn.objects as so
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame({'a':[1,2,3,4],
'b':[5,6,7,8],
'c':['a','a','b','b']})
fig, ax = plt.subplots()
ax.xaxis.set_tick_params(rotation=90)
(so.Plot(df, x = 'a', y = 'b')
.add(so.Line())
.on(ax))
但是,如果我通过将图形代码更改为
来添加构面(so.Plot(df, x = 'a', y = 'b')
.add(so.Line())
.on(ax)
.facet('c'))
我收到错误
Cannot create multiple subplots after calling Plot.on with a <class 'matplotlib.axes._axes.Axes'> object. You may want to use a <class 'matplotlib.figure.SubFigure'> instead.
但是,如果我按照说明操作,而是使用
fig
对象,旋转其中的轴,我会得到一个奇怪的双 x 轴,其旋转标签与数据无关,而实际图形的标签未旋转:
fig, ax = plt.subplots()
plt.xticks(rotation = 90)
(so.Plot(df, x = 'a', y = 'b')
.add(so.Line())
.on(fig)
.facet('c'))
如何将旋转轴标签与面合并?
Plot.on
的参数说明:
通过
将添加艺术家,而无需修改图形。否则,将在给定matplotlib.axes.Axes
或matplotlib.figure.Figure
的空间内创建子图。matplotlib.figure.SubFigure
此外,
pyplot
函数(即plt.xticks
)仅作用于“当前”轴,而不是当前图形中的所有轴。
所以,两步解决方案:
Plot
示例:
fig = plt.figure()
(so.Plot(df, x = 'a', y = 'b')
.add(so.Line())
.on(fig)
.facet('c')
.plot()
)
for ax in fig.axes:
ax.tick_params("x", rotation=90)
请注意,可能可以直接通过
Plot
API 控制刻度标签旋转,尽管旋转刻度标签(尤其是 90 度)通常不是使重叠标签可读的最佳方式。