2017-04-25 3 views
0

私はJFreeChartを持っています。一部の値は、ある閾値を超えて変化する場合にのみ存在するため、値の一部にはnullが含まれる場合があります。JFreeChartは値を補間します

Chart

ヌルである値を無視し、間に(補間)を接続するよう指示する方法はありますか?

コードはここにある:

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); 

答えて

1

ChartFactory.createTimeSeriesChart()XYLineAndShapeRendererをインスタンス化するので、setDrawSeriesLineAsPath()を試してみてください。

XYPlot plot = timeChart.getXYPlot(); 
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer(); 
renderer.setDrawSeriesLineAsPath(true); 
+0

残念ながら、これは動作しません、それは違いはありません。 setDrawSeriesLineAsPath()をtrueまたはfalseに設定しても変更はありません。 – yglodt

+0

質問を編集して、問題を示す代表的なデータを含む[mcve]を含めてください。不足しているデータをソースから取得できますか?そうでない場合は、 'add()'の値を復元する必要があります。 – trashgod

関連する問題