我创建了一个带有两个独立的独立 JFree 图表的框架(以 2x1 网格布局保存)。顶部图表显示 Canlestick 图表,底部显示时间序列图。我想做的是链接两个图表显示的 X 轴,这样当我放大一个图表时,另一个图表会放大到相应的时间段。
这可能吗?如果可以,你能给我举个例子吗
我创建了一个带有两个独立的独立 JFree 图表的框架(以 2x1 网格布局保存)。顶部图表显示 Canlestick 图表,底部显示时间序列图。我想做的是链接两个图表显示的 X 轴,这样当我放大一个图表时,另一个图表会放大到相应的时间段。
这可能吗?如果可以,你能给我举个例子吗
你需要的叫做CombinedDomainXYPlot
. 您需要创建一个组合图并将所有需要链接的图放在那里,而不是创建独立的 JFreeChart 对象。
JFreeChart#addChangeListener()
使用和同步DomainAxis
内部的两个图表添加一个侦听器,ChartChangeListener#chartChanged()
您将需要某种方法来防止无限循环。
我在正在编写的应用程序中对多个图表做了类似的事情...我只是将一个图表的 DomainAxis 设置为另一个图表的 DomainAxis,即它们都引用单个 DomainAxis。
JFreeChart chart1 = ChartFactory.createXYLineChart();
JFreeChart chart2 = ChartFactory.createXYLineChart();
XYPlot plot1 = chart1.getXYPlot();
XYPlot plot2 = chart2.getXYPlot();
plot2.setDomainAxis(plot1.getDomainAxis());
现在,当我放大 chart1 时,两个图表都显示相同的缩放域。
请注意,我通过在图表之外进行数据修改来确保域在我的图表中的大小/长度相同。
使用JFreeChartCombinedXYPlotDemo1演示的 CombinedDomainXYPlot 是可行的方法。
如果您使用此页面上的替代解决方案(“只需将一个图表的 DomainAxis 设置为另一个图表的 DomainAxis”),这仅适用于两个图表上的点具有相同的开始和结束 xAxis 值(可能还有其他问题) .