2013-08-20 6 views
0

Dygraphs permet l'affichage facile de séries temporelles ...Supprimer heures de séries chronologiques

Cependant, si mes données ne contient que deux points de données, il remplit automatiquement les lacunes dans l'axe X avec des heures. Est-il possible de désactiver cette fonctionnalité?
J'ai cherché et essayé de nombreuses options mais je n'ai rien trouvé d'utile.

L'exemple peut être la 'Démo du dessin de série temporelle' de la galerie - si elle est exécutée sur quelques points de données seulement, elle remplit les 'trous' en heures.

Ceci est un bon exemple:

g = new Dygraph(document.getElementById('plot'),"a,b\n2008-12-01,0.9\n2008-12-02,0.3\n2008-12-03,0.7\n") 

cela semble MISE À JOUR travailler:

ticker: function(a, b, pixels, opts, dygraph, vals) { 
    var chosen = Dygraph.pickDateTickGranularity(a, b, pixels, opts); 
    if(chosen==12) chosen=13; 
    if (chosen >= 0) { 
    return Dygraph.getDateAxis(a, b, chosen, opts, dygraph); 
    } else { 
    // this can happen if self.width_ is zero. 
    return []; 
    } 
}; 

Répondre

0

Votre question n'est pas que vous avez deux points, mais que vos points couvrent une certaine quantité de temps. Dégraphes essaie de calculer la meilleure granularité pour les graduations de l'axe des x dans un ensemble donné de données.

Une façon de modifier le calcul par défaut consiste à utiliser l'option pixelsPerLabel.

Exemple: http://jsfiddle.net/kaliatech/P8ehg/

var data = "a,b\n2008-12-01,0.9\n2008-12-02,0.3\n2008-12-03,0.7\n"; 
g = new Dygraph(document.getElementById("plot"), data, { 
    axes: { 
    x: { 
     pixelsPerLabel: 100 
     } 
    } 
}); 

Cela nécessite coder en dur une largeur de pixel cependant, et il est encore en fin de compte dépend de l'ensemble de données que vous graphiques. Une approche plus flexible pourrait être d'utiliser l'option ticker, vous permettant de fournir votre propre fonction de calcul de la granularité de l'étiquette. Voir la documentation et les fonctions intégrées de dygraph-tickers.js.

Voir aussi:


EDIT: Exemple d'utilisation ticker. Cela nécessite que vous soyez familier avec les données et que la plage de données soit quelque peu constante, sinon vous risquez de vous retrouver avec des étiquettes d'axe X illisibles.

var g = new Dygraph(document.getElementById("demodiv3"), data(), { 
    title: 'Example for changing x-axis label granularity 3', 
    axes: { 
    x: { 
     ticker: function(a, b, pixels, opts, dygraph, vals) { 
      var chosen = Dygraph.pickDateTickGranularity(a, b, pixels, opts); 
      //Force to DAILY if built-in calculation returned SIX_HOURLY 
      //if(chosen==Dygraph.SIX_HOURLY) 
      // chosen=Dygraph.DAILY; 
      //or 

      //Force to DAILY always 
      chosen = Dygraph.DAILY; 

      if (chosen >= 0) { 
      return Dygraph.getDateAxis(a, b, chosen, opts, dygraph); 
      } else { 
      return []; 
      } 
     }   
     } 

    } 
}); 
+0

axisLabelFormatter semble désactiver heures lorsque appelé Dygraph.dateAxisFormatter (d, Dygraph.DAILY) mais remplit encore trop tickers intermédiaires ... – Mercier

+0

S'il vous plaît voir la question mise à jour - le plus facile, mais travailler? – Mercier

+0

Pas clair quelle est votre question à ce stade, et dépend de ce que vous voulez. L'exemple de ticker que vous avez édité dans votre question forcera la granularité à DAILY, mais seulement quand le calcul intégré détermine que SIX_HOURLY serait idéal. En fonction de vos données, peut-être que c'est suffisant, ou peut-être que vous voulez forcer à QUOTIDIEN malgré tout. Dans tous les cas, je suggère d'utiliser Dygraph.SIX_HOURLY & Dygraph.DAILY au lieu de 12 et 13 dans votre code pour le rendre plus lisible. – kaliatech

Questions connexes