首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JFreeChart插值法

JFreeChart插值法
EN

Stack Overflow用户
提问于 2017-04-26 04:48:18
回答 1查看 292关注 0票数 0

我有一个JFreeChart TimeSeriesChart,其中一些值可能包含空值,因为它们只有在超过某个阈值时才存在。

有没有一种方法可以告诉它忽略空值,并在其间连接(插值)?

代码如下:

代码语言:javascript
复制
final TimeSeries tseries = new TimeSeries("Temperature");
final TimeSeries hseries = new TimeSeries("Humidity");
final TimeSeries pseries = new TimeSeries("Pressure");

for (final Map<String, Object> value : list) {
    final Date datetime = (Date) value.get("datetime");
    final BigDecimal temperature = (BigDecimal) value.get("temperature");
    final BigDecimal humidity = (BigDecimal) value.get("humidity");
    final BigDecimal pressure = (BigDecimal) value.get("pressure");
    tseries.add(new Millisecond(datetime), temperature);
    hseries.add(new Millisecond(datetime), humidity);
    pseries.add(new Millisecond(datetime), pressure);
}

final JFreeChart timeChart = ChartFactory.createTimeSeriesChart(sensor.getName(), null, null, null, false, false, false);

timeChart.getXYPlot().setRangeAxis(new NumberAxis("Temperature (°C)"));
timeChart.getXYPlot().getRangeAxis().setRange(-10, 30);
((NumberAxis) timeChart.getXYPlot().getRangeAxis()).setTickUnit(new NumberTickUnit(5));

timeChart.getXYPlot().setDataset(0, new TimeSeriesCollection(tseries));
timeChart.getXYPlot().setDataset(1, new TimeSeriesCollection(hseries));
timeChart.getXYPlot().setDataset(2, new TimeSeriesCollection(pseries));

timeChart.getXYPlot().setRenderer(0, new StandardXYItemRenderer());
timeChart.getXYPlot().setRenderer(1, new StandardXYItemRenderer());
timeChart.getXYPlot().setRenderer(2, new StandardXYItemRenderer());

final NumberAxis humAxis = new NumberAxis("Humidity (%)");
humAxis.setRange(20, 80);
humAxis.setTickUnit(new NumberTickUnit(5));
timeChart.getXYPlot().setRangeAxis(1, humAxis);
timeChart.getXYPlot().mapDatasetToRangeAxis(1, 1);

final NumberAxis pressAxis = new NumberAxis("Pressure (hPa)");
pressAxis.setRange(970, 1020);
pressAxis.setTickUnit(new NumberTickUnit(10));
timeChart.getXYPlot().setRangeAxis(2, pressAxis);
timeChart.getXYPlot().mapDatasetToRangeAxis(2, 2);

final DateAxis axis = (DateAxis) timeChart.getXYPlot().getDomainAxis();
scheduledReportService.setChartScale(scheduledReport, axis);

ChartUtilities.writeChartAsPNG(baos, timeChart, Chart.WIDTH, Chart.HEIGHT);
EN

回答 1

Stack Overflow用户

发布于 2017-04-26 14:39:17

因为ChartFactory.createTimeSeriesChart()实例化了XYLineAndShapeRenderer,所以可以尝试setDrawSeriesLineAsPath()

代码语言:javascript
复制
XYPlot plot = timeChart.getXYPlot();
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer();
renderer.setDrawSeriesLineAsPath(true);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43620659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档