2012-09-17 13 views
14

Ho un grafico che vorrei visualizzare in base a un intervallo di date da parte dell'utente. Questo particolare grafico ha un punto dati ogni 15 minuti. Quindi ci possono essere molti punti dati per ogni serie se un utente seleziona un ampio intervallo di date. Ecco un paio di esempi:Highcharts non visualizza serie con molti punti di dati

Nel primo esempio il grafico fa visualizzazione. Nel secondo esempio il grafico non viene visualizzato. Esiste una demo di Highstock (52,000 points with data grouping) che funziona con molti punti dati. Ho provato a cambiare i grafici sopra in un grafico di highstock e ho ancora gli stessi risultati.

Cosa posso fare per risolvere il problema?

+0

Hai provato a cambiare le unità di dataGrouping? –

+0

In realtà ho. Ma se l'utente esegue lo zoom in avanti, vorrei che il raggruppamento fosse applicabile all'ambito. Cioè Se il grafico mostra molti dati e raggruppati a intervalli giornalieri. Se gli utenti eseguono lo zoom in un giorno, desidero che il raggruppamento cambi a intervalli di 15 minuti. Osservando l'esempio di highstock sopra, stanno usando le chiamate al server per popolare il grafico in base al periodo di tempo. Potrei dover capire come ottenere [** Caricamento **] (http://www.highcharts.com/component/content/article/2-news/48-loading-millions-of-points-in-highcharts) che funziona in un ambiente ASP.NET MVC 3. – Linger

risposta

23

Ciò è dovuto all'opzione turbo threshold:

"Quando una serie contiene una matrice di dati che è più lungo di questo, solo uno matrici dimensionali numeri o due matrici dimensionali con x ed y i valori sono consentiti Inoltre, solo il primo punto viene testato e il resto assume lo stesso formato, risparmiando costosi controlli di dati e indicizzazione in serie lunghe. "

È impostato su 1000 punti per impostazione predefinita. Il grafico non viene visualizzato perché ogni punto della serie è un oggetto e il loro numero è maggiore della soglia.

Ecco un jfFiddle dimostrando la vostra trama lavorare con la soglia fissata al 2000.

Ecco la sezione modificata di codice:

plotOptions: { 
    spline: { 
    turboThreshold: 2000, 
    ... 

Un'altra soluzione potrebbe essere quella di codificare i dati di serie in un 2-d matrice invece di avere ogni punto rappresentato da e oggetto con proprietà xy.

+2

Nice catch, @Linger dovresti usare la forma di array 2d di dati a meno che tu non abbia qualche forte use case da fare altrimenti –

0

una soluzione per turboThreshhold è qualcosa di simile se si generazione la vostra risposta con PHP:

    if(count($responseObj) > 1000){ 
        $modolo = round(count($responseObj)/1000); 
        for($i = count($responseObj)-1; $i >= 0 ; $i--){ 
         if(($i % $modolo) != 0){ 
          unset ($responseObj[$i]); 
         } 
        } 
        $responseObj = array_merge($responseObj); 
       } 
Problemi correlati