如何在seaborn图中更改轴刻度的数量

19

我希望能够控制Python 3.5中seaborn绘图的轴刻度数量。我非常习惯于使用R语言的ggplot,因此在Python中找到类似的功能有些困难。

以下是我目前使用的数据示例:

test = pd.DataFrame()
test["X"] = [1,2,3,1,2,3]
test["Y"] = [1,5,3,7,2,4]
test["Category"] = ["A", "A", "A", "B", "B", "B"]

我想要做类似于ggplot的facet_wrap()的事情,可以通过以下方式实现:

sns.set(style = "ticks", color_codes = True)
test_plot = sns.FacetGrid(test, col = "Category")
test_plot = (test_plot.map(sns.plt.plot, "X", "Y").add_legend())
test_plot.set_xticks(np.arange(1,4,1))
sns.plt.show(test_plot)

然而,我遇到了以下错误。问题似乎与在FacetGrid中设置轴标签有关,但我不知道该如何解决。这是Python 3的问题还是在面板绘图上指定轴的问题?

UserWarning: tight_layout : falling back to Agg renderer

警告:tight_layout :回退到Agg渲染器

test_plot.set_xticks(np.arange(1,4,1))
AttributeError: 'FacetGrid' object has no attribute 'set_xticks'
1个回答

24

set_xticks 是一个 matplotlib Axes 对象的方法,但是 FacetGrid 有许多坐标轴。你可以循环遍历它们并在每个上设置 xticks,但更简单的方法是调用 FacetGrid.set(xticks=np.arange(1,4,1)),这将在内部执行循环。

test_plot = sns.FacetGrid(test, col = "Category")
test_plot = test_plot.map(sns.lineplot, "X", "Y")
test_plot.set(xticks=np.arange(1,4,1), yticks=np.arange(1,10,1))

输入图像描述

  • 现在应该使用sns.relplotkind='line'来实现此操作。
p = sns.relplot(data=test, kind='line', x='X', y='Y', col='Category')
p.set(xticks=np.arange(1,4,1), yticks=np.arange(1,10,1))

输入图像描述

  • 这也适用于轴级别的绘图
p = sns.lineplot(data=test, x='X', y='Y', hue='Category')
_ = p.set(xticks=np.arange(1,4,1), yticks=np.arange(1,10,1))

在此输入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接