【问题标题】:How to add a simple horizontal line at Y value of JFreeChart TimeSeries如何在 JFreeChart TimeSeries 的 Y 值处添加一条简单的水平线
【发布时间】:2017-09-15 00:57:34
【问题描述】:

我已经创建了一个这样的图表:

用于添加和/或更新信息的主要代码:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd H:mm:ss");
Date date = simpleDateFormat.parse(dateAsStringToParse);
Second second = new Second(date);
myInfo.getSeries().addOrUpdate(second, maxValue); // maxValue is an Integer

对于实际图表的创建:

final XYDataset dataset = new TimeSeriesCollection(myInfo.getSeries());
JFreeChart timechart = ChartFactory.createTimeSeriesChart(myInfo.getName()
    + " HPS", "", "HPS", dataset, false, false, false);

我想简单地以恒定值添加一条水平线(平行于 X(时间)轴),比如说 10,000。所以图表看起来像这样:

用我的代码实现这一目标的最简单(最正确)的方法是什么?

【问题讨论】:

  • 可能是XYLineAnnotation,对于example,带有沉重的Stroke
  • @trashgod 这是一个绝妙的建议,但是当我尝试timechart.getXYPlot().addAnnotation(new XYLineAnnotation(0, 1.5, 100000, 1.5)); 时,x1, y1, x2, y2 的值应该是多少才能像我的图片一样在图表中显示它?

标签: java time-series jfreechart simpledateformat timeserieschart


【解决方案1】:

看起来您想要一个XYLineAnnotation,但TimeSeries 的坐标可能很麻烦。从TimeSeriesChartDemo1 开始,我做了以下更改以显示图表。

  1. 首先,我们需要TimeSeries 中第一个和最后一个RegularTimePeriodx 值。

     long x1, x2;
     …
     x1 = s1.getTimePeriod(0).getFirstMillisecond();
     x2 = s1.getNextTimePeriod().getLastMillisecond();
    
  2. 那么,常量y的值就简单了;我选择了 140。

     double y = 140;
    

    例如,您也可以从TimeSeries 中获取一个值。

     double y = s1.getMinY() + ((s1.getMaxY() - s1.getMinY()) / 2);
    
  3. 最后,我们构造注释并将其添加到绘图中。

     XYLineAnnotation line = new XYLineAnnotation(
         x1, y, x2, y, new BasicStroke(2.0f), Color.black);
     plot.addAnnotation(line);
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多