我有一个时间序列的数据,我想在刻度而不是时间刻度上绘制。
例如,如果该系列包含有时收到的点:10、15、30、100。而不是将这些点绘制在常规时间序列轴上,其中 30 和 100 点之间的距离为 70,我想要每个点之间的距离这些点为1 个单位。本质上,我想在基础数据集中的点索引处绘制点。
这可以在 JFreechart 中轻松完成吗?
我曾尝试实施自己的时间线,但它变得一团糟。我还希望标签反映时间而不是刻度数。
我有一个时间序列的数据,我想在刻度而不是时间刻度上绘制。
例如,如果该系列包含有时收到的点:10、15、30、100。而不是将这些点绘制在常规时间序列轴上,其中 30 和 100 点之间的距离为 70,我想要每个点之间的距离这些点为1 个单位。本质上,我想在基础数据集中的点索引处绘制点。
这可以在 JFreechart 中轻松完成吗?
我曾尝试实施自己的时间线,但它变得一团糟。我还希望标签反映时间而不是刻度数。
我不知道如何使用具有时间坐标的数据元素创建图表,然后在绘制它们时忽略时间,但是当您创建 TimePeriodValues 时,您可以对数据点表示的 TimePeriod 撒谎为了让 JFreechart 相信它们是有规律的间隔的。当然,这意味着您必须手动预处理数据以对其进行排序,以便按顺序对事件进行编号(除非您已经拥有与该系列相关的事件编号?)
我不知道在轴上显示 x 坐标以外的其他内容的方法,但您可以在每个数据点旁边显示一个标签。(演示集合中的 Annotation 演示说明了如何。)
我通过使用 NumericAxis 而不是 DateAxis 来处理同样的事情,然后覆盖 refreshTicksHorizontal 方法来构建 NumericTicks 列表,但标签格式为日期。这有点麻烦,但为我完成了工作。
NumberAxis domainAxis = new NumberAxis("Date") {
@Override
protected List refreshTicksHorizontal(Graphics2D g2, Rectangle2D dataArea, RectangleEdge edge) {
List ticks = new ArrayList();
//you'll need to have corresponding date objects around
//or know how to match them up on the graph
for (int i = 0; i < dates.size(); i++) {
String label = dateFormat.format(dates.get(i));
NumberTick tick = new NumberTick(i, label, TextAnchor.TOP_CENTER, TextAnchor.CENTER, 0.0);
ticks.add(tick);
}
return ticks;
}
};