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