2016-02-09 9 views
5

Esiste un parametro in Plotly.js per la scalatura automatica degli assi per adattarsi automaticamente ai dati tracciati?Plotly.js autoscale

Scenario: sto calcolando la temperatura (asse y) rispetto al tempo (asse x) negli ultimi 30 minuti.

Problema: quando la pagina viene caricata, il grafico non mostra nulla. Fisserei gli assi, ma l'asse x deve mostrare gli ultimi 30 minuti e aggiornare ogni minuto. Tuttavia, quando faccio clic su "Autoscale" o "Reimposta assi", il grafico si adatta perfettamente ai dati!

Domanda: È possibile impostare il grafico automaticamente su "Scala automatica" quando viene caricata la pagina, anziché richiedere all'utente di fare clic su "Scala automatica"?

Vedi App qui: https://vast-fortress-23871.herokuapp.com/

risposta

4

Un davvero stupido trucco è quello di aggiungere questo:

document.querySelector('[data-title="Autoscale"]').click() 

Sarà cliccare automaticamente sul pulsante Autoscale. Un modo migliore sarebbe capire quale funzione il pulsante stia effettivamente chiamando e chiamarla.

+0

Questo è intelligente, grazie. Se tutto il resto fallisce, userò questo. – Matte3o

+0

@ Matte3o: Dato che stai usando JQuery, puoi ovviamente usare '$' invece di 'document.querySelector', per un supporto browser più ampio. – damd

0

Ho avuto lo stesso problema. Il codice che hai collegato è minuscolo quindi non posso (non lo leggerò), ma ecco cosa ho sbagliato:

Se plotly.newPlot() si esegue prima che tutti i dati siano caricati, non verrà autorangeato (perché ha nessun dato e non sa di controllare).

esempio

var plotdata = [x:[],y:[],type: 'scatter']; 
$.get('mydata.dat',(x) => {/*put parsed x into plotdata*/}); 
Plotly.newPlot('mydiv',plotdata,layout); 

nota che plotdata viene popolato dopo la trama è stato creato perché $.get() è asincrona.

0

Ho risolto questo problema con un relayout. Basta impostare la proprietà autorange su 'true' su xaxis e yaxis. Scorrimento automatico su entrambi gli assi:

// To call when data is ready, after your page loads. 
Plotly.relayout(yourGraph, { 
    'xaxis.autorange': true, 
    'yaxis.autorange': true 
}); 
Problemi correlati