Visualización de gráficos 3D rotativos en IPython o IPython Notebook


(Mac OSX 10.10.5)

Puedo reproducir desde el sitio web de matplotlib http://matplotlib.org/gallery.html#mplot3d el código de ejemplo para un gráfico de dispersión 3D http://matplotlib.org/examples/mplot3d/scatter3d_demo.html , sin embargo la gráfica se representa como una imagen estática. No puedo hacer clic en el gráfico y girar dinámicamente para ver los datos trazados en 3D.

He logrado la gráfica estática 3D usando el código de ejemplo-usando (a) ipython desde dentro de la Terminal, (b) ipython notebook desde dentro de la terminal, y (c) notebook ipython lanzado desde el lanzador Anaconda.

Creo que me falta un paso muy básico como conocimiento supuesto.

En el aprendizaje pasado, el trazado ha abierto una aplicación GUI Python que tiene un visor de gráficos. (La solución 2 en el código que se muestra a continuación abre esto.) Tal vez necesito saber el código para exportar el gráfico de salida a ese método de visualización? (Sí, use %matplotlib (solo) como primera línea sin en línea o portátil como se muestra en los comentarios en el bloque de código debajo.)

Como ejemplo en ipython notebook:

    # 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()

¿Puede alguien identificar lo que me estoy perdiendo?

Mirando la documentación de Python 3.3.6, sección 25.1 quizás el paquete tkinter ...

El paquete tkinter ("interfaz Tk") es la interfaz estándar de Python para el kit de herramientas GUI de Tk. Tanto Tk como tkinter están disponibles en la mayoría de plataformas Unix, así como en sistemas Windows.

Creo que sin embargo, esto se relaciona con el desarrollo de programas GUI, por lo que no estoy claro que esto es relevante. (Correcto, esto no era necesario para la solución.)

Author: Cam_Aust, 2015-10-30

1 answers

Use %matplotlib notebook en lugar de %matplotlib inline para obtener figuras interactivas incrustadas en el cuaderno IPython – esto requiere versiones recientes de matplotlib (1.4+) e IPython (3.0+).

 95
Author: jakevdp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-30 16:33:06