2009-07-20 4 views
2

J'ai un graphique combiné dans JFreechart composé de 4 diagrammes de temps de traitement avec un axe de domaine temporel commun.JFreechart Combiné temps réel - Rendu de la valeur précédente pour un sous-organigramme si aucun point de données n'a été reçu

Les données pour les sous-placettes arrivent à des vitesses différentes. Par exemple, je peux recevoir un événement de changement de prix tous les deux millisecondes et un changement de position chaque minute. Je suis en train de rendre ces séries avec le XYStepRenderer pour produire un graphique pas à pas.

Je voudrais pouvoir faire quelque chose comme ceci:

  • Un point de prix est reçu au temps T et est tracée sur le graphique
  • Aucune donnée n'a été reçue à l'instant T pour la position Nous supposons que la valeur n'a pas changé et que la valeur de la position précédente est affichée, c'est-à-dire que le point est positionné horizontalement
  • A l'instant T + 1 un point de position est reçu et est tracé en changeant le pas de pas
  • T + 1 aucun point de prix n'a été reçu et ainsi le p prix revious est tracée

Y a-t-il un moyen facile de le faire dans JFreechart? Actuellement, j'ai une implémentation de travail mais cela ne gère pas le rendu des valeurs supposées. Mes premières réflexions ont porté sur la modification du modèle de données afin que je puisse trouver rapidement la valeur précédente et modifier les appels pour indiquer à chaque sous-tracé de dessiner lorsqu'un événement est reçu pour un tracé.

Répondre

3

Je pense que vous devrez tamponner les changements entrants et appliquer un jeu de règles pour transférer les changements sur JFreeChart (qui n'est pas vraiment recommandé pour le travail en temps réel, mais j'ai trouvé que pour les mises à jour basse fréquence bien).

Je suppose que vous avez un jeu de données pour les prix et un jeu de données pour les positions. Est-ce que vos mises à jour de position et de prix arrivent avec un horodatage? Si ce n'est pas le cas, vous aurez le problème de les recevoir de manière séquentielle et d'essayer de les attacher (peut-être que les mises à jour arriveront dans une certaine carte timewindow à la même heure). Si elles ont des horodatages, vous pouvez en déduire une nouvelle position (identique à l'ancienne position) lorsque le prix arrive, puis le remplacer si nécessaire.

Je dissocierais la mise à jour du graphique des mises à jour de position/prix, quoi qu'il arrive, juste au cas où vous seriez inondé de changements de position/prix. Vous ne voulez pas que cela se traduise par de multiples mises à jour de cartes que vous allez devoir jeter immédiatement.

+0

Merci pour votre suggestion Brian. Je reçois des horodatages et je suis donc en mesure de contrôler les mises à jour de la carte moi-même. Ce que je voulais éviter, c'était tracer des points (c'est-à-dire des marqueurs) sur les cartes quand je n'avais pas reçu de nouvelles données. En tant que hack rapide bon marché, j'ai sous-classé la classe de rendu XYStepLine pour dessiner une ligne étendue pour le dernier point de l'ensemble de données. Cette ligne est corrigée lorsque de nouveaux points arrivent pour la série. Je vais essayer de créer un type de cache de données de graphique pour permettre la relecture de données anciennes et je suis susceptible d'intégrer vos suggestions dans ce service. – pjp

+0

Excellent. Heureux que c'était utile –

Questions connexes