Удалите несколько ярлыков с помощью Seaborn
На скриншоте ниже все мои x-метки перекрывают друг друга.
g = sns.factorplot(x='Age', y='PassengerId', hue='Survived', col='Sex', kind='strip', data=train);
Я знаю, что могу удалить все ярлыки, позвонив g.set(xticks=[])
, но есть ли способ просто показать некоторые метки возраста, например, 0, 20, 40, 60, 80?
2 ответа
Решение
Я не уверен, почему нет разумных тиков по умолчанию и значений, как на оси Y. В любом случае вы можете сделать что-то вроде следующего:
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()
Результат:
- предназначен для использования, когда основная независимая переменная является категориальной и переименована в .
- v0.3.0 (март 2014 г.) Представлены новые функции построения графиков.
factorplot
. - v0.9.0 (июль 2018 г.) Изменения API переименованы в
catplot
.
- v0.3.0 (март 2014 г.) Представлены новые функции построения графиков.
- Принятый ответ , как правило, предлагает решение для разделения xticks.
- Основная проблема заключается в том, что это должен быть количественный график, а не категориальный график, и именно поэтому для каждой категории есть галочка.
- Правильный тип сюжета с
kind='scatter'
.- Они были добавлены в версии 0.9.0 (июль 2018 г.), поэтому могла потребоваться более громоздкая реализация.
- Правильный тип сюжета с
- Основной вывод — использовать правильный тип графика: категориальный или количественный .
- Категориальные графики всегда будут показывать все галочки.
- количественные графики обычно форматируют размер шага xticks.
- Все xticks будут показаны, если значения, используемые для оси X, являются
strings
, вместоdatetime
илиnumeric
.
- Все xticks будут показаны, если значения, используемые для оси X, являются
import seaborn as sns
titanic = sns.load_dataset('titanic')
g = sns.relplot(x='age', y='fare', hue='survived', col='sex', data=titanic)
- Без
relplot
иscatterplot
, это можно было бы построить непосредственно с помощью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()