简体   繁体   English

如何在时间序列jfree图表上添加文本/图像

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

Requirement: i need to display toolTip(No data available) and image on time series chart which have null data ie; 要求:我需要在时间序列图上显示具有空数据的toolTip(无可用数据)和图像 ,即; Image 2 on gray color area . 图像2在灰色区域
Problem:I am not able to get it. 问题:我无法得到它。
Image With some data ie; 具有一些数据的图像,即; series1.addOrUpdate(absoluteMSecond, data[i]); series1.addOrUpdate(absoluteMSecond,data [i]);
在此处输入图片说明

Image with null data ie; 具有空数据的图像,即; series1.addOrUpdate(absoluteMSecond, null); series1.addOrUpdate(absoluteMSecond,null);
在此处输入图片说明

COde: 码:

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

Thanks in advance 提前致谢

You can specify the desired image to the plot's setBackgroundImage() method, mentioned here and here . 您可以在此处此处提到的图的setBackgroundImage()方法中指定所需的图像。

The implementation of getToolTipText() in ChartPanel will return null if the dataset is empty, but you can override the method to return a suitable alternative string. 如果数据集为空,则ChartPanelgetToolTipText()ChartPanel将返回null ,但是您可以重写该方法以返回合适的备用字符串。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM