Подтвердить что ты не робот

Изменение поворота тик-ярлыков в Seaborn heatmap

Я рисую карту тепла в Сиборне. Проблема в том, что у меня слишком много квадратов в моем сюжете, поэтому ярлыки x и y слишком близки друг к другу, чтобы быть полезными. Поэтому я создаю список xticks и yticks для использования. Однако передача этого списка в функцию приводит к повороту меток на графике. Было бы очень приятно, если бы морская волна автоматически сбросила некоторые из тиков, но запрет на то, что я хотел бы иметь ягодицы в вертикальном положении.

import pandas as pd
import numpy as np
import seaborn as sns

data = pd.DataFrame(np.random.normal(size=40*40).reshape(40,40))

yticks = data.index
keptticks = yticks[::int(len(yticks)/10)]
yticks = ['' for y in yticks]
yticks[::int(len(yticks)/10)] = keptticks

xticks = data.columns
keptticks = xticks[::int(len(xticks)/10)]
xticks = ['' for y in xticks]
xticks[::int(len(xticks)/10)] = keptticks

sns.heatmap(data,linewidth=0,yticklabels=yticks,xticklabels=xticks)

enter image description here

4b9b3361

Ответ 1

seaborn использует matplotlib внутренне, поэтому вы можете использовать функции matplotlib для изменения ваших графиков. Я изменил код ниже, чтобы использовать plt.yticks для установки rotation=0, который исправляет проблему.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns


data = pd.DataFrame(np.random.normal(size=40*40).reshape(40,40))

yticks = data.index
keptticks = yticks[::int(len(yticks)/10)]
yticks = ['' for y in yticks]
yticks[::int(len(yticks)/10)] = keptticks

xticks = data.columns
keptticks = xticks[::int(len(xticks)/10)]
xticks = ['' for y in xticks]
xticks[::int(len(xticks)/10)] = keptticks

sns.heatmap(data,linewidth=0,yticklabels=yticks,xticklabels=xticks)

# This sets the yticks "upright" with 0, as opposed to sideways with 90.
plt.yticks(rotation=0) 

plt.show()

Plot

Ответ 2

Вы также можете вызвать методы объекта Heatmap:

    g = sns.heatmap(data,linewidth=0,yticklabels=yticks,xticklabels=xticks)
    g.set_yticklabels(g.get_yticklabels(), rotation = 0, fontsize = 8)

Я не уверен, почему это не в документации для sns.heatmap, но описаны те же методы: http://seaborn.pydata.org/generated/seaborn.FacetGrid.html

Я считаю, что эти методы доступны для каждого объекта сюжетной линии, но не могут найти общий API для этого.