В своей записной книжке Jupyter я теперь использую %matplotlib notebook вместо %matplotlib inline, это здорово, что теперь я могу взаимодействовать со своими графиками на Jupyter. Однако, когда я пытаюсь сделать гистограмму, я получаю пустой график:

%matplotlib notebook

Если я использую %matplotlib inline, все работает нормально: % matplotlib inline

В чем дело?

26
João Abrantes 13 Дек 2016 в 19:16

4 ответа

Лучший ответ

Видя, что мой комментарий выше действительно помог кому-то решить проблему, я опубликую его как ответ.

Проблема возникает, если вы переключаетесь с %matplotlib inline на %matplotlib notebook без перезапуска ядра.

Переключение с %matplotlib notebook на %matplotlib inline работает нормально.

Поэтому решение состоит в том, чтобы либо перезапустить ядро, либо запустить новый ноутбук.

Кажется, что в некоторых случаях это помогает повторить настройку бэкэнда ноутбука, то есть вызвать его дважды как

%matplotlib notebook
%matplotlib notebook

Анализ причин этого можно найти в этом комментарии

65
ImportanceOfBeingErnest 11 Авг 2019 в 02:45

Ответ не обязательно для перезапуска всего ядра.

Если вы перезагрузите модуль matplotlib, он тоже будет работать. Если вы используете Python 3.6, как я, и у вас import matplotlib.pyplot as plt, как я:

from importlib import reload
reload(plt)
%matplotlib notebook

Это делает трюк. Да, это все еще взломать. По крайней мере, это независимая кодовая ячейка, которую вы можете использовать в середине ноутбука. Обратный переход через %matplotlib inline не является проблемой.

Вы также можете удалить импортированные имена из списка sys.modules, после чего они снова будут импортированы при повторном вызове импорта.

import sys
sys.modules.pop('matplotlib')
from matplotlib import pyplot as plt

Во многих случаях это менее хорошая идея. Но иногда это может быть единственной соломинкой, чтобы держаться.

6
Anderas 3 Окт 2019 в 15:25

В новой записной книжке, если вы начнете использовать% matplotlib notebook, вы можете без проблем переключаться между ними. Я подтверждаю, что как перезапуск ядра, так и выполнение кода делают свое дело!

0
Periklisk 3 Янв 2020 в 09:54

Кажется, проблема заключается во взаимодействии между коммутаторами:

%matplotlib notebook
%matplotlib inline

И используя цифру «кнопка включения» на интерактивных участках:

enter image description here

Решение : если вы нажали кнопку и получаете пустые участки, перезапустите Jupyter и больше не используйте кнопку питания , если вам нужно переключиться между notebook и inline

0
Justas 6 Янв 2019 в 01:35