【问题标题】:How to reset the rendered colors used in JFreeChart如何重置 JFreeChart 中使用的渲染颜色
【发布时间】:2009-10-29 13:02:26
【问题描述】:

我正在使用 XYPlot 来显示包含 1 条或多条线的折线图。我将它与侦听器模式相结合,以便它可以接收更新:如果是这样,它使用dataset.removeAllSeries()(数据集的类型为XYSeriesCollection)调用删除行,然后使用dataset.addSeries(...) 添加新行但是,一个带有新线的新图形将具有不同的颜色!

所以颜色渲染器可能会继续分发新颜色。

是否有可能重置渲染器,使其再次以第一种颜色开始?

【问题讨论】:

    标签: java jfreechart


    【解决方案1】:

    您可以使用渲染器的setSeriesPaint() 方法为每个系列设置新的颜色。

    示例:

    renderer.setSeriesPaint(0, Color.red);
    renderer.setSeriesPaint(1, Color.blue);
    

    第一个参数是serie的索引。

    【讨论】:

    • 如果我这样做,我确定第一个 NEXT 颜色是红色,然后是蓝色(即使我已经在图表上画了一些系列?)
    • 你的剧情中有多少个系列?您可以在绘画前更改每个系列的颜色..
    • 哇,如果您确实首先在渲染器上使用此 setSeriesPaint 设置不同的颜色,效果会很好。通过这种方式,我摆脱了获取所有不同颜色的循环(随机)方式。
    • 您好,我遇到了同样的问题,但是通过使用此代码,我在图表中的两条线都被染成蓝色......而不是我想要一个是绿色的,另一个是蓝色的。
    【解决方案2】:
    plot.getRenderer().setSeriesPaint(serieindex, null);
    

    这是我自己发现的渲染器重置的替代品(作为初学者,我很自豪:))。我的图表中有许多系列,必须删除,然后由于新的计算再次添加。我需要 1 系列始终是黑色的,而其他系列则以除黑色以外的任何颜色涂漆。现在,因为我收到了可能是新订单的新系列,所以我不能使用:

    plot.getRenderer().setSeriesPaint(0, new Color(0,0,0);
    

    就像那样,因为如果我在第一次计算中将第一个系列设置为黑色,那么未来的每个第一个系列(在新计算中)都将始终是黑色,所以我不仅可以得到一个黑色的特定系列(因为添加系列),我不想这样做。如果我删除所有系列使用:

    dataset.removeAllSeries();
    

    它不会重置系列的固定颜色(如果您正在使用 setSeriesPaint(serieindex, new Color(RGB, RGB, RGB)),例如 3 系列,您删除它们并再次添加新系列,新系列将让您之前为具有相同索引的其他系列修复它们的颜色)。所以我正在考虑重置渲染器,我在互联网上一无所获,但我尝试将“null”作为颜色。使用固定的“null”作为颜色系列的线条几乎不可见(我现在不记得我是如何检查的),但它不是渲染器的颜色,因此它会自动从其列表中获取新颜色(您可以覆盖 BTW )。 所以现在我可以为一个特定的系列设置黑色。我使用它的随机索引:

    int serieindex = dataset.indexOf(seriename);
    

    因为我知道它的名字(键)。我正在为任何其他系列设置空“颜色”,因此它们从渲染器列表中获取第一个免费颜色。我想您也可以使用它来保持相同的新系列颜色,但是在最简单的情况下设置固定颜色当然比我的要好。

    总而言之,我发现了一个“颜色渲染器重置”,它删除了为具有特定编号的系列所做的一次颜色定义,因此在删除系列后,任何具有此编号的新系列都可以自动从列表中获取新颜色。我希望它会帮助某人:)。这是我的第一个答案,所以可能不是最好的。

    【讨论】:

      猜你喜欢
      • 2011-08-13
      • 2012-06-08
      • 1970-01-01
      • 2022-09-29
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多