我将绘制一条折线图,它会从实际数据到预测数据的位置变为虚线以示区分。我不确定是否需要扩展像XYLineAndShapeRenderer这样的类,或者也许有更方便的方法来实现这一点吗?
这是使用Excel绘制的演示图表。
我说的是图表中的灰色线条。那是我想要的。 我不知道是否有渲染器可以让我指示哪个范围是虚线还是实线。
这是使用Excel绘制的演示图表。
我说的是图表中的灰色线条。那是我想要的。 我不知道是否有渲染器可以让我指示哪个范围是虚线还是实线。
我能想到两种方法来做这件事。它们都不太优雅,但这可能是你面临问题的现实。
其中一种方法是定义两个相互连接的系列。这可能是你最好的选择,但你也必须修复你的图例。
这将使你的第二个系列显示为虚线:
plot.getRenderer().setSeriesStroke(
1,
new BasicStroke(
2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
1.0f, new float[] {6.0f, 6.0f}, 0.0f
)
编辑:我原来的“第二个选项”是错误的。这里有一个更好的方法:
在 AbstractRenderer
中覆盖 getItemStroke()
方法。
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;
}
};
您可以扩展XYLineAndShapeRenderer
,并覆盖getItemStroke
,在其中为不同的项目提供不同的笔画(stroke)。
默认实现只返回系列笔画(series stroke)。
getItemStroke
不应该每次都创建一个新的BasicStroke
。它将在每次重新绘制时为每个系列的每个项目调用。 - Reverend Gonzo