当前位置: 首页 > 知识库问答 >
问题:

JFreeChart-时间序列和蜡烛棒在同一图表上

秦涵涤
2023-03-14

我试图在JFreeChart中生成一个图表,它由叠加的烛台图和Timeseries图组成。(有点像这样)

我曾尝试创建烛台图表,然后添加额外的XY系列和it渲染器,但这导致运行时错误org。jfree。数据xy。XYSeriesCollection无法强制转换为组织。jfree。数据xy。OHLCDataset

我的代码片段如下

private XYPlot plot;
private XYSeriesCollection dataTrend;
private XYItemRenderer renderer;

public OhlcChart(BarCollection bars)
{

JFreeChart jfreechart = ChartFactory.createCandlestickChart("FX Trader Prototype", "Time", "Value", getDataset(bars), true);
plot = (XYPlot)jfreechart.getPlot();
plot.setDomainPannable(true);


NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis();
numberAxis.setAutoRangeIncludesZero(false);
    numberAxis.setAutoRangeStickyZero(false);
numberAxis.setUpperMargin(0.0D);
numberAxis.setLowerMargin(0.0D);

DateAxis dateAxis = (DateAxis) plot.getDomainAxis();
    SimpleDateFormat formatter  = new SimpleDateFormat("dd MMM HH:mm.ss");
    dateAxis.setDateFormatOverride(formatter);

    this.renderer = plot.getRenderer();
    Stroke myStroke = new BasicStroke((float) 1.0);

    this.renderer = new XYLineAndShapeRenderer();
    this.renderer.setSeriesPaint(0, Color.blue);
    this.renderer.setSeriesStroke(0, myStroke);

}

public OhlcChart update(Timeseries<Double> ts)
{
    Stroke myStroke = new BasicStroke((float) 1.0);
    XYLineAndShapeRenderer timeSeriesRenderer = new XYLineAndShapeRenderer();
    timeSeriesRenderer.setBaseShapesVisible(false);
    timeSeriesRenderer.setSeriesPaint(0, Color.blue);
    timeSeriesRenderer.setSeriesStroke(0, myStroke);

    UiTimeseries series = new UiTimeseries(ts);
    dataTrend.addSeries(series);
    plot.setDataset(plot.getDatasetCount()+1, dataTrend);
    plot.setRenderer(plot.getDatasetCount()+1, timeSeriesRenderer);

    return this;
}

如有任何意见,将不胜感激

共有1个答案

韩禄
2023-03-14

这可以使用JFreeChart实现,关键是创建一个额外的数据集和渲染器

您需要创建一个新的TimeSeriesCollection来保存三个附加系列的数据

TimeSeriesCollection otherDataSet = new TimeSeriesCollection();
TimeSeries ts1 = new TimeSeries("Series 1");
otherDataSet.addSeries(ts1);
TimeSeries ts2 = new TimeSeries("Series 2");
otherDataSet.addSeries(ts2);
TimeSeries ts3 = new TimeSeries("Series 2");
otherDataSet.addSeries(ts3);

然后像往常一样将数据添加到TimeSeries中。

然后,您需要将therDataSet添加到OhlcChart中的Plot中,将其映射到原始图的同一轴(mapDatasetToRangeAxis),并提供一个渲染器

//Add the otherDataSet to the plot and map it to the same axis at the original plot 
int index = 1;
plot.setDataset(index, otherDataSet);
plot.mapDatasetToRangeAxis(index, 0);

XYItemRenderer renderer2 = new XYLineAndShapeRenderer();
plot.setRenderer(1, renderer2);
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);

下面是一个使用OHLCDataset而不是BoxAndWhiskerXYDataset

 类似资料:
  • 我有一秒钟的烛台数据存储在“BarData”对象的数组列表中,其中包含打开、高、低和关闭数据以及时间戳。我将这些数据聚合成5分钟的条形图,并在定制的JavaFX XYChart上显示数据以生成蜡烛。 聚合代码运行良好,我可以显示从1秒条创建的5分钟条。 现在,我想用列表中的24300组1秒数据来制作5分钟图表的动画,这样我就可以像回放实时市场数据源一样回放数据。 我试着使用时间线,但我很挣扎。是否

  • 主要内容:什么是JFreeChart 时间序列图,JFreeChart 时间序列图的示例什么是JFreeChart 时间序列图 时间序列图表表示以相等的时间间隔变化的数字数据序列。 下图显示了 JFreeChart 库中包含的时间序列图表的一些演示版本: JFreeChart 时间序列图的示例 让我们考虑以下时间序列图表的示例数据。 日期 列1 列2 2017-01-01 50 40 2017-01-02 40 35 2017-01-03 45 26 2017-01-04 30 45

  • 大多数财务图表库使用一些规则来为蜡烛着色: 如果<代码>关闭 jFreeChart似乎有自己的着色规则,可以更改它们。默认情况下,该图表如下所示(某些颜色已更改): 如您所见,可以更改蜡烛、背景、绘图边框等的颜色。 我想在图表中实现规则1和2(上面)。可能吗? 结果应该是这样的: 这是我目前在示例中使用的烛台: 似乎只需将设置为并绘制颜色不变即可。 但主要问题仍然存在: > 在jFreeChart

  • 我有一个烛台图表,显示价格,两个系列代表价格和数量。这一切工作正常,显示如下。 使用 然后,我在同一个图表区域添加一个新的系列,指示图表上的点,蜡烛的宽度会变细。然后,我必须将

  • 我在MPAndroidChart_GITHUB中使用了3.1.0版本 我试过这个代码 activity_test.xml 首先,更改文件是布局xml activity.java 但这太奇怪了

  • 这是这个问题的后续问题。 发生的情况如下: 当我启动图形并拖动图形时,奇怪的事情发生了:在一定的间隔内,似乎每7个周期,烛台就会越来越小,直到它们变成一条条纹。然后,当我进一步拖动时,它们再次变厚,直到它们再次变为正常大小。这似乎每7个周期发生一次。 这种现象的一个示例显示在以下3张图片上: 下面的代码将准确地显示我的意思。只需编译并运行它。然后按住,用鼠标在图形上单击并按住。现在尝试向右或向左拖