Heim >Java >javaLernprogramm >Wie kann die Domänenachse im CombinedDomainXYPlot von JFreeChart dynamisch neu skaliert werden?

Wie kann die Domänenachse im CombinedDomainXYPlot von JFreeChart dynamisch neu skaliert werden?

Linda Hamilton
Linda HamiltonOriginal
2024-12-01 12:55:12461Durchsuche

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

Neuskalierung der Domänenachse in CombinedDomainXYPlot

Bei der Verwendung eines CombinedDomainXYPlot zur gemeinsamen Nutzung einer Domänenachse zwischen mehreren Unterplots wird beobachtet, dass sich die Bereichsachsen anpassen Daten ändern sich, während die Domänenachse unverändert bleibt. Um dieses Problem zu verstehen und anzugehen, ist ein genauerer Blick auf die zugrunde liegenden Mechanismen des Plots erforderlich.

Kombinierte Bereiche für die Domänenachse

CombinedDomainXYPlot legt einen maximalen Bereich für die gemeinsame Domänenachse fest , was die gemeinsame Nutzung von Achsen ermöglicht. Änderungen der Reihensichtbarkeit wirken sich nicht direkt auf die gemeinsame Domänenachse aus. Durch eine Änderung des Datensatzes wird jedoch die Domänenachse über die Methode configure() aktualisiert. Dadurch können die Bereichsachsen der Unterplots unabhängig voneinander aktualisiert werden.

Domänenachse automatisch aktualisieren

Um die gemeinsame Domänenachse automatisch anzupassen, verwenden Sie addSeries() oder removeSeries () anstelle von setSeriesVisible(). Diese Methoden lösen die Konfiguration der Domänenachse aus.

Beispielanpassung

Das folgende Codebeispiel zeigt ein CombinedDomainXYPlot, bei dem die Domänenachse durch Aufruf von configure() aktualisiert wird, wenn a Die Nebenhandlung wird aktualisiert oder eine Serie wird aktualisiert versteckt.

mainPlot.getDomainAxis().configure();

Überlegungen

  • Stellen Sie sicher, dass die Anfangsfäden berücksichtigt werden und der Rahmen ordnungsgemäß verpackt ist.
  • Der vorgeschlagene Ansatz, setAutoRange() umzuschalten, kann durch einen einzelnen configure()-Aufruf ersetzt werden, der Effekt ist jedoch möglicherweise nicht spürbar, da die Daten und der maximale Bereich erhalten bleiben unverändert.

      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);
      }

Das obige ist der detaillierte Inhalt vonWie kann die Domänenachse im CombinedDomainXYPlot von JFreeChart dynamisch neu skaliert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn