5

我将绘制一个从实线变为虚线的折线图,以指示真实数据和预测数据。我不确定是否需要扩展一些类,如 XYLineAndShapeRenderer 或其他东西,或者是否有一些方便的方法来实现这一点?

这是我使用 Excel 绘制的演示图。

在此处输入图像描述

我说的是图中的灰线。这就是我想要的。我不知道是否有一个渲染器可以让我指示哪个范围是虚线还是实线

4

3 回答 3

13

我可以想到两种方法来做到这一点。它们都不是优雅的,但这可能是您的问题的现实。

一个是您可以定义两个恰好相互连接的系列。这可能是您最好的选择,但您还必须修复您的传奇。

这将使您的第二个系列显示为虚线:

plot.getRenderer().setSeriesStroke(
    1, 
    new BasicStroke(
        2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
        1.0f, new float[] {6.0f, 6.0f}, 0.0f
    )

编辑:我原来的“第二个选项”是错误的。这是一个更好的方法:

覆盖中的getItemStroke()方法AbstractRenderer

     final BasicStroke dashedStroke = new BasicStroke(
                  2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
                  1.0f, new float[] {6.0f, 6.0f}, 0.0f);
     XYLineAndShapeRenderer render = new XYLineAndShapeRenderer() {
        @Override
        public Stroke getItemStroke(int row, int column) {
            if (column < dashedThreshold) {
                return lookupSeriesStroke(row);
            } else {
               return dashedStroke;
            }
       };
于 2011-10-17T18:02:58.847 回答
2

您可以扩展XYLineAndShapeRenderer和覆盖getItemStroke为不同项目提供不同笔划的位置。

默认实现只返回系列笔画。

于 2011-10-17T18:11:05.473 回答
0

也许您应该为真实数据和预测数据定义不同的数据集。更改线条样式不仅会更简单,而且代码也可能会更清晰。

于 2011-10-17T17:41:20.907 回答