2017-08-16 3 views
1

J'utilise JavaScript pour produire des parcelles de dispersion 3D dans Plotly. Initialement, je ne spécifie pas les gammes d'axes. Cependant, je souhaite que l'utilisateur définisse manuellement la plage zaxis une fois les tracés dessinés. Dans cette interaction utilisateur, je veux remplir les valeurs de plage avec les paramètres existants (tels que dessinés). Comment puis-je extraire la gamme zaxis d'un graphique existant de Plotly scatter3d?Obtenir zaxis gamme de Plotly 3D

Plotly.d3.csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv', function(err, rows) { 
 
    function unpack(rows, key) { 
 
    return rows.map(function(row) { 
 
     return row[key]; 
 
    }); 
 
    } 
 

 
    
 
    var data = []; 
 
    
 
    for (i = 0; i < 24; i += 1) { 
 

 
    var x_row = [], 
 
     y_row = [], 
 
     z_row = unpack(rows, i); 
 
    
 
    for (var j = 0; j < z_row.length; j++) { 
 
     x_row.push(i); 
 
     y_row.push(j); 
 
    } 
 
    
 
    data.push({ 
 
     x: x_row, 
 
     y: y_row, 
 
     z: z_row, 
 
     mode: 'lines', 
 
     line: { 
 
     color: '#FF00FF' 
 
     }, 
 
     type: 'scatter3d' 
 
    }); 
 
    } 
 
    
 
    Plotly.newPlot('myDiv', data); 
 

 
    document.getElementById('cmax').innerHTML = 'Max: ' + data[0].cmax; 
 
    document.getElementById('cmin').innerHTML = 'Min: ' + data[0].cmin; 
 
});
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script> 
 
<div id='cmax'></div> 
 
<div id='cmin'></div> 
 
<div id="myDiv"></div>

Répondre

1

Comme indiqué dans le commentaire, il est un terrain de scatter3D, la solution fonctionne ci-dessous pour des parcelles de surface 3D. Pour Plotly parcelle scatter3D calcule les plages d'axes en fonction de la valeur min et max du tableau d'entrée.

sceneBounds[0][i] = Math.min(sceneBounds[0][i], objBounds[0][i]/dataScale[i]); 

De là, vous pouvez définir vos gammes manuellement les valeurs min/max (+ un peu d'espace supplémentaire) ou laisser les plages vides et remplir vos valeurs par défaut avec le resp max. valeurs min.


Plotly définit la valeur max et min à cmax resp. cmin de l'objet de données transmis à la fonction newPlot.

Plotly.d3.csv('https://raw.githubusercontent.com/plotly/datasets/master/api_docs/mt_bruno_elevation.csv', function(err, rows) { 
 
    function unpack(rows, key) { 
 
    return rows.map(function(row) { 
 
     return row[key]; 
 
    }); 
 
    } 
 

 
    var z_data = [] 
 
    for (i = 0; i < 24; i += 1) { 
 
    z_data.push(unpack(rows, i)); 
 
    } 
 

 
    var data = [{ 
 
    z: z_data, 
 
    type: 'surface' 
 
    }]; 
 
    
 
    Plotly.newPlot('myDiv', data); 
 
    
 
    document.getElementById('cmax').innerHTML = 'Max: ' + data[0].cmax; 
 
    document.getElementById('cmin').innerHTML = 'Min: ' + data[0].cmin; 
 
});
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script> 
 
<div id='cmax'></div> 
 
<div id='cmin'></div> 
 
<div id="myDiv"></div>

+0

Merci pour votre réponse. Il semble que j'ai laissé de côté une information cruciale. Le type de graphique est scatter3d. Dans ce cas, cmax et cmin ne sont pas ajoutés aux données [0]. Je vais mettre à jour ma question avec un exemple semblable au vôtre. –

+0

@JimNorman: voir la mise à jour, j'espère que la réponse est aussi simple que je le pense. –