【问题标题】:How to plot another timeseries without affecting current timeseries in JFreeChart如何在不影响 JFreeChart 中的当前时间序列的情况下绘制另一个时间序列
【发布时间】:2017-04-11 05:58:11
【问题描述】:

所以我有一个包含 3 个不同时间序列的折线图:

“电压”线代表实时数据和整个“高”和 “低”系列实际上是从文件中动态加载的(每当用户单击 LOAD 按钮时)。

这里的问题是,如果我从 CSV 文件加载整个“高”和“低”系列,然后在实时数据到来时绘制它,它将只显示“高”的一些最终点和“Low”系列,然后我们要等待那个时间段的实时数据到来(这是可以理解的)。

然后我解决这个问题的想法是,当我添加一个“电压”系列的新点。

public void add(Data data) throws ParseException, CloneNotSupportedException {
    Date date = new SimpleDateFormat(PATTERN).parse(data.getDate());
    Millisecond milis = new Millisecond(date);
    timeSeries.add(milis, data.getNumber());
    Date maxDate = axis.getMaximumDate();
    Date minDate = dataset.getSeries(0).getTimePeriod(0).getStart();
    Millisecond maxMili = new Millisecond(maxDate);
    Millisecond minMili = new Millisecond(minDate);
    // highSeries and lowSeries are loaded from csv file
    TimeSeries tempHighSeries = highSeries.createCopy(minMili, maxMili);
    TimeSeries tempLowSeries = lowSeries.createCopy(minMili, maxMili);
    TimeSeriesCollection collection = new TimeSeriesCollection();
    collection.addSeries(tempHighSeries);
    collection.addSeries(tempLowSeries);
    plot.setDataset(1, collection);
}

结果就是上图。但是,我真正想要的是这样的:

我希望用户仍然可以看到这些边缘的下一部分(当“High”和“Low”系列的下一个点不在实时数据范围内时)

任何指针?

【问题讨论】:

  • 为什么不在实时电压数据到达时将高/低数据与实时电压数据合并?
  • 能否以几行代码为例提供更多细节?
  • 是的,在process() 的实现中添加数据,用于example
  • 所以您的意思是:使用 SwingWorker 读取该 csv 文件并在 process() 方法中更新高低系列?我的目的是在不影响电压系列的情况下加载高低系列
  • 太棒了!我已经在下面详细说明了。

标签: java swing jfreechart linechart


【解决方案1】:

您需要解决几个问题才能获得所需的结果。假设三个TimeSeries 具有键"High""Low""Voltage"

  • 使用SwignWorker在后台采集数据,如图here

  • 在您的process() 实现中,将新到达的值添加到"Voltage",并在相关时间合并"High""Low" 的现有值。

  • tn 成为这样的时间。在 tn+1 时,添加下一个值(例如 "High")还为时过早。相反,使用linear interpolation 确定位于"High" 投影上的新点的值,如here 所示。每条这样的线都以"High" 的连续值为界,在图表中以手绘的蓝色粗线显示。新点可能会临时添加,在连续值之间更新,并最终在需要"High" 的新值时替换。

  • "Low" 也一样。

  • 您可以通过覆盖getItemShape() 来省略临时点的形状,如here 所示,并根据需要返回一个空形状。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 2021-12-12
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多