JFreechart(Java)-如何绘制部分为虚线和部分为实线的直线?

JFreechart(Java)-如何绘制部分为虚线和部分为实线的直线?,java,jfreechart,forecasting,Java,Jfreechart,Forecasting,我将绘制一个从实线到虚线的折线图,以指示实际数据和预测数据。我不确定是否需要扩展一些类,比如xylineandshaperender或其他什么,或者有什么方便的方法来实现这一点 这是我用Excel绘制的演示图 我说的是图表中的灰线。这就是我想要的。 我不知道是否有渲染器允许我指示虚线或实线的范围也许您应该为真实数据和预测数据定义不同的数据集。更改行样式不仅会更简单,而且代码可能也会更清晰。我可以想到两种方法。它们都不优雅,但这可能是你问题的现实所在 一个是,您可以定义两个碰巧相互连接的系列。这

我将绘制一个从实线到虚线的折线图,以指示实际数据和预测数据。我不确定是否需要扩展一些类,比如xylineandshaperender或其他什么,或者有什么方便的方法来实现这一点

这是我用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;
            }
       };
final BasicStroke dashedStroke=新BasicStroke(
2.0f,基本行程。CAP_轮,基本行程。连接_轮,
1.0f,新浮点数[]{6.0f,6.0f},0.0f);
XylineandShaperender render=新的XylineandShaperender(){
@凌驾
公共笔划getItemStroke(int行,int列){
如果(列
您可以扩展和覆盖为不同项目提供不同笔划的位置


默认实现只是返回序列笔划。

+1刚刚在编辑了我的笔划后看到了您的解决方案…我保证我没有试图欺骗您:p+1…尽管
getItemStroke
不应该每次都创建一个新的
BasicStroke
。每次重新绘制序列时,它都会被调用。谢谢u、 我也这么想。只是想看看是否有更简单的解决方案,谢谢:)