matplotlib 从海运图中删除一些xtick标签

pprl5pva  于 2023-06-06  发布在  其他
关注(0)|答案(2)|浏览(337)

在下面的截图中,我所有的x标签都相互重叠。

g = sns.factorplot(x='Age', y='PassengerId', hue='Survived', col='Sex', kind='strip', data=train);

我知道我可以通过调用g.set(xticks=[])删除所有标签,但是有没有办法只显示一些年龄标签,比如0,20,40,60,80?

j91ykkif

j91ykkif1#

我不知道为什么没有像y轴上那样合理的默认刻度和值。
FormatStrFormatter示例是提供set_major_formatter所必需的。%d来自格式规范迷你语言。

import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

titanic = sns.load_dataset('titanic')
sns.factorplot(x='age',y='fare',hue='survived',col='sex',data=titanic,kind='strip')
ax = plt.gca()
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%d'))
ax.xaxis.set_major_locator(ticker.MultipleLocator(base=20))
plt.show()

这也适用于catplot,它取代了factorplot

titanic = sns.load_dataset('titanic')
sns.catplot(x='age', y='fare', hue='survived', col='sex', data=titanic, kind='strip')
ax = plt.gca()
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%d'))
ax.xaxis.set_major_locator(ticker.MultipleLocator(base=20))
plt.show()

fslejnso

fslejnso2#

  • factorplot用于主自变量为分类变量时,并已重命名为catplot
  • v0.3.0(2014年3月)新的绘图函数引入了factorplot
  • v0.9.0(2018年7月)API更改重命名为catplot
  • 通常,accepted answer提供了一种间距xtick的解决方案。
    *主要问题是这应该是一个定量图,而不是分类图,这就是为什么每个类别都有一个xtick。
    *正确图类型为relplotkind='scatter'
  • 这些都是在v0.9.0(2018年7月)中添加的,因此可能需要更繁琐的实现。
  • 主要的收获是使用正确的图类型,分类定量
    *分类图将始终显示所有xtick。
    *定量图通常会格式化xtick的步长。
  • 如果x轴使用的值是strings,而不是datetimenumeric,则将显示所有xtick。
import seaborn as sns

titanic = sns.load_dataset('titanic')
g = sns.relplot(x='age', y='fare', hue='survived', col='sex', data=titanic)

  • 如果没有relplotscatterplot,则可以直接用pandas.DataFrame.plot(或ax.scatter)绘制,但这是一个更复杂的实现。
import seaborn as sns
import matplotlib.pyplot as plt

titanic = sns.load_dataset('titanic')

fig, axes = plt.subplots(1, 2, figsize=(12, 5), sharex=True)

axes = axes.flat

for ax, (sex, data) in zip(axes, titanic.groupby('sex')[['survived', 'age', 'fare']]):
    ax.spines[['top', 'right']].set_visible(False)
    for (survived, sel), color in zip(data.groupby('survived'), ['tab:blue', 'tab:orange']):
        sel.plot(kind='scatter', x='age', y='fare', ec='w', s=30,
                 color=color, title=sex.title(), label=survived, ax=ax)
        
axes[0].get_legend().remove()
axes[1].legend(title='Survived', bbox_to_anchor=(1, 0.5), loc='center left', frameon=False)
plt.show()

相关问题