簡體   English   中英

如何在時間序列jfree圖表上添加文本/圖像

[英]How to add text/image on time series jfree chart

要求:我需要在時間序列圖上顯示具有空數據的toolTip(無可用數據)和圖像 ,即; 圖像2在灰色區域
問題:我無法得到它。
具有一些數據的圖像,即; series1.addOrUpdate(absoluteMSecond,data [i]);
在此處輸入圖片說明

具有空數據的圖像,即; series1.addOrUpdate(absoluteMSecond,null);
在此處輸入圖片說明

碼:

import java.util.Calendar;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class TextOnJFreeChart extends ApplicationFrame {

  public TextOnJFreeChart(final String title) {
    super(title);
    final XYDataset data = createDataset();
    final JFreeChart chart = createChart(data);
    final ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
    setContentPane(chartPanel);
  }

  private JFreeChart createChart(final XYDataset data) {

    final JFreeChart chart = ChartFactory.createTimeSeriesChart("Text/ToolTip Trying Demo", "X", "Y", data, true, true, true);
    final XYPlot plot = chart.getXYPlot();
    plot.getRenderer().setToolTipGenerator(StandardXYToolTipGenerator.getTimeSeriesInstance());
    plot.setNoDataMessage("Hai it is ok if i get this message.......");

    final DateAxis domainAxis = new DateAxis("Time");
    domainAxis.setUpperMargin(0.50);
    plot.setDomainAxis(domainAxis);

    final ValueAxis rangeAxis = plot.getRangeAxis();
    rangeAxis.setUpperMargin(0.30);
    rangeAxis.setLowerMargin(0.50);

    return chart;
  }

  private XYDataset createDataset() {

    final TimeSeriesCollection result = new TimeSeriesCollection();
    result.addSeries(createSupplier1Bids());
    return result;
  }

  private TimeSeries createSupplier1Bids() 
  {

    double[] data = {200.0, 195.0, 190.0, 188.0, 185.0, 180.0};
    long timeStamp = System.currentTimeMillis();
    Millisecond absoluteMSecond = getTimeInMillisecondFormat(timeStamp, 0L);
    final TimeSeries series1 = new TimeSeries("Supplier 1", Millisecond.class);
    for(int i = 0; i < data.length; i++)
    {
      absoluteMSecond = getTimeInMillisecondFormat(timeStamp + i * 1000, 0L);
      //series1.addOrUpdate(absoluteMSecond, data[i]);
      series1.addOrUpdate(absoluteMSecond, null);
    }
    return series1;
  }

  public Millisecond getTimeInMillisecondFormat(long timeStamp, long startTime)
  {
    try
    {
      long diff = timeStamp - startTime;
      Calendar calender = Calendar.getInstance();
      calender.setTimeInMillis(diff);
      Millisecond elapsedMSecond = new Millisecond(calender.getTime());
      return (elapsedMSecond);
    }
    catch (Exception e)
    {
      e.printStackTrace();
      return null;
    }
  }

  public static void main(final String[] args) {

    final TextOnJFreeChart demo = new TextOnJFreeChart("Text/ToolTip Trying Demo");
    demo.pack();
    RefineryUtilities.centerFrameOnScreen(demo);
    demo.setVisible(true);
  }
}

提前致謝

您可以在此處此處提到的圖的setBackgroundImage()方法中指定所需的圖像。

如果數據集為空,則ChartPanelgetToolTipText()ChartPanel將返回null ,但是您可以重寫該方法以返回合適的備用字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM