Вопрос-Ответ

First and last row cut in half of heatmap plot

Первая и последняя строки, вырезанные пополам на графике тепловой карты

При построении тепловых карт с помощью seaborn (и корреляционных матриц с помощью matplotlib) первая и последняя строки сокращаются пополам. Это происходит также, когда я запускаю этот пример минимального кода, который я нашел в Интернете.

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

data = pd.read_csv('https://raw.githubusercontent.com/resbaz/r-novice-gapminder-files/master/data/gapminder-FiveYearData.csv')
plt.figure(figsize=(10,5))
sns.heatmap(data.corr())
plt.show()

И получаем этот результат (мне пока не разрешено вставлять изображения)
Метки по оси y расположены в нужном месте, но строки расположены не полностью.

Несколько дней назад все работало так, как задумывалось. С тех пор я установил texlive-xetex, поэтому снова удалил его, но это не решило мою проблему.

Есть идеи, чего мне может не хватать?

Переведено автоматически
Ответ 1

К сожалению, matplotlib 3.1.1 нарушил работу тепловых карт seaborn; и в целом перевернул оси с фиксированными отметками.
Это исправлено в текущей версии разработки; следовательно, вы можете


  • вернуться к matplotlib 3.1.0

  • используйте matplotlib 3.1.2 или выше

  • установите ограничения тепловой карты вручную (ax.set_ylim(bottom, top) # set the ylim to bottom, top)

Ответ 2

Это ошибка в регрессии matplotlib между 3.1.0 и 3.1.1. Вы можете исправить это с помощью:

import seaborn as sns
df_corr = someDataFrame.corr()
ax = sns.heatmap(df_corr, annot=True) #notation: "annot" not "annote"
bottom, top = ax.get_ylim()
ax.set_ylim(bottom + 0.5, top - 0.5)
Ответ 3

Исправлено использование приведенного выше и установка ограничений тепловой карты вручную.

Первый

ax = sns.heatmap(...

проверил текущие оси с помощью

ax.get_ylim()
(5.5, 0.5)

Исправлено с помощью

ax.set_ylim(6.0, 0)
Ответ 4

Я решил проблему, добавив эту строку в свой код с помощью matplotlib==3.1.1:

ax.set_ylim(sorted(ax.get_xlim(), reverse=True))

ПРИМЕЧАНИЕ. Единственная причина, по которой это работает, заключается в том, что ось x не изменяется, поэтому используйте на свой страх и риск с будущими версиями mpl

python matplotlib