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

Отображение вращающихся 3D-графиков в IPython или Jupyter Notebook

(Mac OSX 10.10.5)

Я могу воспроизвести на веб-сайте matplotlib mplot3d пример кода для трехмерного графика рассеяния scatter3d_demo.py, однако график отображается как статическое изображение. Я не могу нажать на график и динамически поворачивать для просмотра 3D-графиков данных.

Я достиг статического трехмерного графика, используя пример кода - используя (a) ipython из терминала, (b) записную книжку ipython из терминала и (c) записную книжку ipython, запущенную из средства запуска Anaconda.

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

В прошлом изучении, построение графиков открыло приложение Python с графическим интерфейсом, в котором есть средство просмотра графиков. (Решение 2 в коде, показанном ниже, открывает это.) Возможно, мне нужно знать код для экспорта выходного графика в этот метод отображения? (Да, используйте% matplotlib (только) в качестве первой строки без строки или записной книжки, как показано в комментариях в блоке кода ниже.)

Как пример в блокноте ipython:

    # These lines are comments
    # Initial setup from an online python notebook tutorial is below. 
    # Note the first line "%matplotlib inline" this is how the tutorial has it.
    # Two solutions 1. use: "%matplotlib notebook" graphs appear dynamic in the notebook.
    #               2. use: "%matplotlib" (only) graphs appear dynamic in separate window. 
    #    ( 2. is the best solution for detailed graphs/plots. )

    %matplotlib inline  
    import pandas as pd
    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D

    pd.set_option('html',False)
    pd.set_option('max_columns',30)
    pd.set_option('max_rows',10)


    # What follows is a copy of the 3D plot example code.
    # Data is randomly generated so there is no external data import.

    def randrange(n, vmin, vmax):
        return (vmax-vmin)*np.random.rand(n) + vmin

    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    n = 100
    for c, m, zl, zh in [('r', 'o', -60, -25), ('b', '^', -30, -5)]:
        xs = randrange(n, 23, 50)
        ys = randrange(n, 0, 100)
        zs = randrange(n, zl, zh)
        ax.scatter(xs, ys, zs, c=c, marker=m)

    ax.set_xlabel('X Label')
    ax.set_ylabel('Y Label')
    ax.set_zlabel('Z Label')

    plt.show()

Может ли кто-нибудь определить, чего мне не хватает?

Глядя на документацию по Python 3.3.6, раздел 25.1, возможно, пакет tkinter...

Пакет tkinter ('Tk interface') - это стандартный интерфейс Python для инструментария Tk GUI. Как Tk, так и tkinter доступны на большинстве платформ Unix, а также в системах Windows.

Я думаю, что это относится к разработке программ с графическим интерфейсом, поэтому я не уверен, что это актуально. (Правильно, это не было необходимо для решения.)

4b9b3361

Ответ 1

Используйте %matplotlib notebook вместо %matplotlib inline, чтобы получить встроенные интерактивные данные в ноутбуке IPython - для этого требуются последние версии matplotlib (1.4+) и IPython (3.0 +).

Ответ 2

Для Windows (Windows 8.1 для меня) вы можете использовать

%matplotlib inline  
%matplotlib notebook
%pylab

вместо этого.

Примечание: Вы должны выполнить команду ВСЕ ТРИ вместе, иначе вы получите ошибку "умерла", а затем ноутбук автоматически перезагрузится.

Ответ 3

В Windows я могу отобразить сюжет в интерактивном режиме, запустив блокнот с помощью:

from matplotlib import use
use("Qt5Agg")
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
...

При необходимости выключите ноутбук и перезапустите его.

Ответ 4

Для тех, кто еще менее знаком, как я, быстрый ответ:

% matplotlib (над импортом) (для интерактивных графиков в новом окне)

импорт матплота... и т.д.

% matplotlib notebook (для взаимодействия с графами в самом JupyterNotebook

импорт и т.д.

импорт и т.д.