我试图在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;
}
如有任何意见,将不胜感激
这可以使用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张图片上: 下面的代码将准确地显示我的意思。只需编译并运行它。然后按住,用鼠标在图形上单击并按住。现在尝试向右或向左拖