Maison >Java >javaDidacticiel >Comment redimensionner dynamiquement l'axe du domaine dans CombinedDomainXYPlot de JFreeChart ?

Comment redimensionner dynamiquement l'axe du domaine dans CombinedDomainXYPlot de JFreeChart ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-01 12:55:12466parcourir

How to Dynamically Rescale the Domain Axis in JFreeChart's CombinedDomainXYPlot?

Redimensionnement de l'axe de domaine dans CombinedDomainXYPlot

Lors de l'utilisation d'un CombinedDomainXYPlot pour partager un axe de domaine entre plusieurs sous-parcelles, on observe que les axes de plage s'ajustent à les données changent tandis que l’axe du domaine reste inchangé. Comprendre et résoudre ce problème nécessite un examen plus approfondi des mécanismes sous-jacents de l'intrigue.

Plages combinées pour l'axe de domaine

CombinedDomainXYPlot établit une plage maximale pour l'axe de domaine partagé , qui permet le partage d'axes. Les changements de visibilité des séries n’affectent pas directement l’axe du domaine partagé. Cependant, la modification de l'ensemble de données met à jour l'axe du domaine via la méthode configure(). Cela permet aux axes de plage des sous-parcelles d'être mis à jour indépendamment.

Mise à jour automatique de l'axe du domaine

Pour ajuster automatiquement l'axe du domaine partagé, utilisez addSeries() ou removeSeries () plutôt que setSeriesVisible(). Ces méthodes déclenchent la configuration de l'axe du domaine.

Exemple de personnalisation

L'exemple de code ci-dessous montre un CombinedDomainXYPlot où l'axe du domaine est mis à jour en appelant configure() lorsqu'un la sous-intrigue est mise à jour ou une série est caché.

mainPlot.getDomainAxis().configure();

Considérations

  • Assurez-vous que les fils de discussion initiaux sont pris en compte et que le cadre est correctement emballé.
  • L'approche suggérée consistant à basculer setAutoRange() peut être remplacée par un seul appel configure(), mais l'effet peut ne pas être perceptible car les données et la plage maximale restent inchangé.

      public static void init() {
          XYItemRenderer renderer = new StandardXYItemRenderer(SHAPES_AND_LINES);
          XYPlot plot1 = new XYPlot(
              generateData(), null, new NumberAxis("Range 1"), renderer);
          XYPlot plot2 = new XYPlot(
              generateData(), null, new NumberAxis("Range 2"), renderer);
          final CombinedDomainXYPlot plot =
              new CombinedDomainXYPlot(new NumberAxis("Domain"));
          plot.setDomainPannable(true);
          plot.setRangePannable(true);
          plot.add(plot1);
          plot.add(plot2);
          plot.setOrientation(PlotOrientation.VERTICAL);
          JFreeChart chart = new JFreeChart(
              "Combined Plots", JFreeChart.DEFAULT_TITLE_FONT, plot, true);
          ChartPanel chartPanel = new ChartPanel(chart);
          chartPanel.setPreferredSize(new Dimension(800, 500));
    
          JPanel controlPanel = new JPanel();
          controlPanel.add(new JButton(new UpdateAction(plot, 0)));
          controlPanel.add(new JButton(new UpdateAction(plot, 1)));
          for (int i = 0; i < MAX; i++) {
              JCheckBox jcb = new JCheckBox(new VisibleAction(renderer, i));
              jcb.setSelected(true);
              renderer.setSeriesVisible(i, true);
              controlPanel.add(jcb);
          }
    
          JFrame frame = new JFrame("Combined Plot Example");
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.add(chartPanel, BorderLayout.CENTER);
          frame.add(controlPanel, BorderLayout.SOUTH);
          frame.pack();
          frame.setLocationRelativeTo(null);
          frame.setVisible(true);
      }

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn