Обертати текст етикетки у новонароджених фактором


152

У мене простий факторплот

import seaborn as sns
g = sns.factorplot("name", "miss_ratio", "policy", dodge=.2, 
    linestyles=["none", "none", "none", "none"], data=df[df["level"] == 2])

введіть тут опис зображення

Проблема полягає в тому, що всі мітки x працюють разом, що робить їх нечитабельними. Як ви обертаєте текст, щоб мітки читалися?


29
import matplotlib.pylab as plt. plt.xticks(rotation=‌​45)
rafaelvalle

Бібліотека Dexplot має можливість обгортати мітки, встановлювати розмір фігури, dpi все без використання matplotlib.
Тед Петру

Відповіді:


137

Aman вірно, що ви можете використовувати звичайні команди matplotlib, але це також вбудовано в FacetGrid:

import seaborn as sns
planets = sns.load_dataset("planets")
g = sns.factorplot("year", data=planets, aspect=1.5, kind="count", color="b")
g.set_xticklabels(rotation=30)

введіть тут опис зображення

Є деякі коментарі та ще одна відповідь, яка стверджує, що це "не працює", проте кожен може запустити код, як написано тут, і побачити, що він працює. Інший відповідь не дає відтворений приклад того , що не працює, що робить його дуже важко адреса, але я думаю, що люди намагаються застосувати це рішення на виході функцій , які повертають в Axesоб'єкт замість Facet Grid. Це різні речі, і Axes.set_xticklabels()метод дійсно вимагає переліку міток і не може просто змінити властивості існуючих міток на Axes. Урок полягає в тому, що важливо звернути увагу на те, з якими предметами ви працюєте.


Я отримую помилку: IndexError: занадто багато індексів. Мій код! g = sns.factorplot ("month_date", "num_proposals", "account", sorted_data, col = "рахунок", col_wrap = 3, sharex = False); g.set_xticklabels (обертання = 30)
йошизеррі

10
@soupault - це працювало для мене, подібно до того, що ви придумали, але, можливо, трохи чистіше - для сокири в g.axes.flatten (): ax.set_xticklabels (ax.get_xticklabels (), обертання = 30)
odedbd

6
Використовуйте ha="right"для центру вирівнювання міток осі x до їх галочок. тобтоg.set_xticklabels([label1, label2], rotation=30, ha='right')
Манавалан Гаджапатія

72
схоже на пару коментарів вище, це дало мені помилку , поки я не змінив , g.set_xticklabels(rotation=30)щоб g.set_xticklabels(g.get_xticklabels(), rotation=30)завдяки цій відповіді: stackoverflow.com/a/39689464/1870832
Максимальна потужність

1
Деякі методи побудови графіку Seaborn повертають FacetGridоб'єкт, інші повертають об'єкт Matplotlib Axes. Для перших не встановлення міток спрацює, для останніх - не буде. Ви можете побачити, які є FacetGridоб'єкти, переглянувши документацію: seaborn.pydata.org/api.html . Наприклад, якщо ви користуєтеся g = sns.catplot()цим, це буде працювати, але sns.barplot()не буде, оскільки він повертає Axesоб'єкт.
getup8

252

У мене виникла проблема з відповіддю від @mwaskorn, а саме з цим

g.set_xticklabels(rotation=30)

не вдається, тому що для цього потрібні також мітки. Трохи простіше, ніж відповідь @Aman - просто додати

plt.xticks(rotation=45)

33
Ви також можете отримати етикетки так g.set_xticklabels(g.get_xticklabels(), rotation=30). Призначте його змінній, якщо ви хочете придушити вихід.
joelostblom

3
Я думаю, що це правильно, коли налаштування plt.xticsпрацювало для мене.
Муаммар

спробував усі варіанти вище для скрипкового сюжету та plt.xticks (обертання = n) - це лише один, з якого я міг би
приступити

29

Це все ще об'єкт matplotlib. Спробуйте це:

# <your code here>
locs, labels = plt.xticks()
plt.setp(labels, rotation=45)

8

Якщо хтось задається питанням, як це зробити для кластерної карти CorrGrids (частина даного прикладу новонароджених):

import seaborn as sns
import matplotlib.pyplot as plt
sns.set(context="paper", font="monospace")

# Load the datset of correlations between cortical brain networks
df = sns.load_dataset("brain_networks", header=[0, 1, 2], index_col=0)
corrmat = df.corr()

# Set up the matplotlib figure
f, ax = plt.subplots(figsize=(12, 9))

# Draw the heatmap using seaborn
g=sns.clustermap(corrmat, vmax=.8, square=True)
rotation = 90 
for i, ax in enumerate(g.fig.axes):   ## getting all axes of the fig object
     ax.set_xticklabels(ax.get_xticklabels(), rotation = rotation)


g.fig.show()

6

Ви також можете використовувати plt.setpнаступне:

import matplotlib.pyplot as plt
import seaborn as sns

plot=sns.barplot(data=df,  x=" ", y=" ")
plt.setp(plot.get_xticklabels(), rotation=90)

повертати мітки на 90 градусів.


5

Для seaborn.heatmap, ви можете обертати їх , використовуючи ( на основі @ відповідь Амана )

pandas_frame = pd.DataFrame(data, index=names, columns=names)
heatmap = seaborn.heatmap(pandas_frame)
loc, labels = plt.xticks()
heatmap.set_xticklabels(labels, rotation=45)
heatmap.set_yticklabels(labels[::-1], rotation=45) # reversed order for y

1
це працювало для мене, просто проходження в параметрі обертання нічого не робило, мені довелося також пройти мітки, щоб отримати це робоче
Raveen Beemsingh

0

Будь-які сюжетні ділянки, які підтримуються фасетгридом, не працюватимуть (наприклад, catplot)

g.set_xticklabels(rotation=30) 

однак barplot, countplot тощо працюватимуть, оскільки їх не підтримує facetgrid. Нижче буде працювати для них.

g.set_xticklabels(g.get_xticklabels(), rotation=30)

Крім того, якщо у вас два графіки накладені один на одного, спробуйте встановити на графіку set_xticklabels, який його підтримує.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.