Google Colab: почему после импорта pandas_profiling поведение matplotlib отличается от поведения по умолчанию? - PullRequest
1 голос
/ 02 ноября 2019

При использовании записной книжки в Google Colab мои matplotlib графики ведут себя по-разному, независимо от того, импортирую ли я библиотеку pandas-profiling или нет.

Если нетimport pandas-profiling , графики отображаются inline по умолчанию . Но если я импортирую библиотеку, графики перестанут отображаться встроенными .

Обходные пути (возможные решения)

  • Обновление pandas-profiling библиотека перед импортом решает проблему.
  • Добавление %matplotlib inline после импорт pandas-profiling решает проблему.

Воспроизведение

Запустите этот код в Google Colab, чтобы воспроизвести проблему. Протестируйте его с импортом pandas_profiling и без него. Для каждого теста вам необходимо прекратить сеанс (время выполнения-> Управление сеансами-> Завершить). Недостаточно просто перезапустить среду выполнения.

import matplotlib.pyplot as plt
# importing the pandas_profiling makes matplotlib
# to stop showing the plot inline
# import pandas_profiling
plt.plot([1, 2], [1, 2])

Ожидаемое поведение - показать график по умолчанию, но после импорта pandas-profiling , графики перестанет отображаться в строке .

Реальная проблема

Я наткнулся на эту проблему, когда мои функции построения seaborn начали ломаться.

Например, рассмотрим следующий код.

import matplotlib.pyplot as plt
# import pandas_profiling
import seaborn as sns

def plot():
    ax = sns.pointplot([1, 2], [1, 2])
    print(len(ax.collections))

Теперь вызовите plot() в двух разных ячейках юпитера.

  • Без pandas-profiling :каждый вызов функции будет выводить 1.
  • с pandas-profiling : каждый вызов функции добавляет 1 к предыдущему выводу.

1 Ответ

0 голосов
/ 02 ноября 2019

Проблема в версии pandas_profiling, которая установлена ​​по умолчанию в Google Colab. Установленная версия (1.4.1) использовалась для изменения matplotlib бэкэнда на agg при импорте. Стандартный бэкенд matplotlib в Colab: module://ipykernel.pylab.backend_inline.

. Это можно увидеть, выполнив следующее до и после импорта pandas-profiling :

import matplotlib
matplotlib.get_backend()

Это поведение было изменено в pull-запросе # 125 , который прекращает изменять бэкэнд matplotlib .

Пока Google Colab не обновит установленную версиювручную обновление кажется лучшим решением. Просто запустите в вашем ноутбуке Colab следующее:

!pip install --upgrade pandas_profiling
...