Heim >Java >javaLernprogramm >Wie kann die Domänenachse im CombinedDomainXYPlot von JFreeChart dynamisch neu skaliert werden?
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
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!