我将绘制一条折线图,该折线图将从实线变为虚线,以指示实际数据和预测数据。我不确定是否需要扩展一些类,如XYLineAndShapeRenderer或其他类,或者可能有一些方便的方法来实现这一点?
这是使用Excel绘制的演示图。
我说的是图中的灰线。这就是我想要的。 我不知道是否有渲染器允许我指示哪个范围是虚线还是实线
答案 0 :(得分:12)
我可以通过两种方式来考虑这样做。它们都不优雅,但这可能是你问题的现实。
一个是您可以定义两个恰好相互连接的系列。这可能是您最好的选择,但您还必须修复您的传奇。
这会让你的第二个系列节目显示为虚线:
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;
}
};
答案 1 :(得分:2)
您可以展开XYLineAndShapeRenderer
,并覆盖getItemStroke
,为不同的项目提供不同的笔划。
默认实现只返回系列描边。
答案 2 :(得分:0)
也许您应该为实际与预测数据定义不同的数据集。改变线条样式不仅简单,而且代码也可能更清晰。