web-dev-qa-db-fra.com

Affichage de tracés 3D rotatifs dans iPython ou iPython Notebook

(Mac OSX 10.10.5)

Je peux reproduire depuis le site Web matplotlib http://matplotlib.org/gallery.html#mplot3d l'exemple de code pour un diagramme de dispersion 3D http://matplotlib.org/examples/mplot3d/scatter3d_demo.html , cependant, l’intrigue est rendue sous forme d’image statique. Je ne peux pas cliquer sur le graphique et effectuer une rotation dynamique pour afficher les données tracées en 3D. 

J'ai réalisé le tracé 3D statique en utilisant l'exemple de code - en utilisant (a) ipython à partir de Terminal, (b) ipython notebook à partir de terminal et (c) ipython notebook lancé à partir du lanceur Anaconda. 

Je pense qu'il me manque une étape très fondamentale en tant que connaissance supposée. 

Dans les apprentissages passés, le traçage a ouvert une application graphique Python qui possède un visualiseur de graphiques. (La solution 2 du code ci-dessous ouvre cette fenêtre.) Peut-être dois-je connaître le code permettant d’exporter le graphique de sortie vers cette méthode d’affichage? (Oui, utilisez% matplotlib (uniquement) en tant que première ligne sans inline ni notebook, comme indiqué dans les commentaires du bloc de code ci-dessous.)

Par exemple dans 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()

Quelqu'un peut-il identifier ce que je manque?

Dans la documentation Python 3.3.6, section 25.1 peut-être le paquet tkinter ...

Le paquet tkinter («interface Tk») est l'interface Python standard de la boîte à outils de l'interface graphique Tk. Tk et tkinter sont disponibles sur la plupart des plates-formes Unix, ainsi que sur les systèmes Windows.

Je pense cependant que cela concerne le développement de programmes d'interface graphique, je ne suis donc pas sûr que ce soit pertinent. (Correct, cela n'était pas nécessaire pour la solution.) 

47
Cam_Aust

Utilisez %matplotlib notebook au lieu de %matplotlib inline pour obtenir des figures interactives incorporées dans le cahier IPython - cela nécessite des versions récentes de matplotlib (1.4+) et IPython (3.0+).

105
jakevdp

Pour Windows (Windows 8.1 pour moi), vous pouvez utiliser

%matplotlib inline  
%matplotlib notebook
%pylab

au lieu.

Remarque: Vous devez exécuter la commande TOUTES LES TROIS en même temps. Sinon, vous obtiendrez une erreur de mort kernal et le cahier redémarrera automatiquement.

1
Statham