2016-09-08 2 views
0

J'ai un dataframe comme ceci:En utilisant mplot3D pour tracer dataframe

 f1  model cost_threshold sigmoid_slope 
366 0.140625 open   0.0001   0.0001 
445 0.356055 open   0.0001   0.0010 
265 0.204674 open   0.0001   0.0100 
562 0.230088 open   0.0001   0.0500 
737 0.210923 open   0.0001   0.1500 
117 0.161580 open   0.0001   0.1000 
763 0.231648 open   0.0001   0.3000 
466 0.186228 open   0.0001   0.5000 
580 0.255686 open   0.0001   0.7500 
520 0.163478 open   0.0001   1.0000 
407 0.152488 open   0.0010   0.0001 
717 0.183946 open   0.0010   0.0010 
708 0.201499 open   0.0010   0.0100 
570 0.179720 open   0.0010   0.0500 
722 0.200326 open   0.0010   0.1500 
316 0.187692 open   0.0010   0.1000 
240 0.243612 open   0.0010   0.3000 
592 0.274322 open   0.0010   0.5000 
254 0.309560 open   0.0010   0.7500 
400 0.225460 open   0.0010   1.0000 
148 0.494311 open   0.0100   0.0001 
100 0.498199 open   0.0100   0.0010 
155 0.473008 open   0.0100   0.0100 
494 0.484625 open   0.0100   0.0500 
754 0.504391 open   0.0100   0.1500 
636 0.425798 open   0.0100   0.1000 
109 0.446701 open   0.0100   0.3000 
759 0.509829 open   0.0100   0.5000 
345 0.522837 open   0.0100   0.7500 
702 0.511971 open   0.0100   1.0000 

Il y a plus de blocs, mais comme vous pouvez le voir, chaque cost_threshold contient 10 types de pistes sigmoïde. Il existe également 10 seuils de coûts. J'essaye de faire une intrigue 3D de ceci par la parcelle here de surface. Dont la démo est:

from mpl_toolkits.mplot3d import axes3d 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
X, Y, Z = axes3d.get_test_data(0.05) 
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10) 

plt.show() 

X, Y et Z doivent être des tableaux 2D.

Comment puis-je créer les X, Y et Z dont j'ai besoin pour obtenir le format dont ils ont besoin?

Z, l'axe vertical, devrait être f1 et cost_threshold et sigmoid_slope serait X et Y. De plus, comment ajouter un graphique de surface séparé, où le modèle est no_model, puis superposez ce graphique de surface à celui-ci, où les valeurs de la colonne f1 sont différentes?

MISE À JOUR

Je sais comment obtenir le tableau 2D pour Z, via le tableau croisé dynamique:

Z = df.pivot_table('f1', 'cost_threshold', 'sigmoid_slope', fill_value=0).as_matrix() 

Je ne sais toujours pas comment créer un pour X et Z.

Répondre

0

Voici comment obtenir X, Y et Z respectivement:

Z = df.pivot_table('f1', 'cost_threshold', 'sigmoid_slope', fill_value=0).as_matrix() 

Y = df.groupby("cost_threshold").sigmoid_slope.apply(pd.Series.reset_index, drop=True).unstack().values 

Z = df.groupby("sigmoid_slope").cost_threshold.apply(pd.Series.reset_index, drop=True).unstack().values 

Si vous passez ces derniers dans l'intrigue, vous obtenez:

enter image description here