gpt4 book ai didi

java - JFreeChart Boxplot Outlier 和 Farout 外观

转载 作者:行者123 更新时间:2023-11-29 05:11:14 41 4
gpt4 key购买 nike

我将 JFreeChart 与 Java 结合使用,以使用箱线图评估实验结果。我想更改异常值和 farout 条目的颜色和形状。

这就是当我使用普通的 BoxAndWhiskerRenderer 时我的绘图目前的样子:Current plot我这样设置渲染器:

BoxAndWhiskerRenderer renderer = new BoxAndWhiskerRenderer();
renderer.setFillBox(true);
renderer.setSeriesPaint(0, Color.DARK_GRAY);
renderer.setSeriesPaint(1, Color.LIGHT_GRAY);
renderer.setSeriesOutlinePaint(0, Color.BLACK);
renderer.setSeriesOutlinePaint(1, Color.BLACK);
renderer.setUseOutlinePaintForWhiskers(true);
Font legendFont = new Font("SansSerif", Font.PLAIN, 15);
renderer.setLegendTextFont(0, legendFont);
renderer.setLegendTextFont(1, legendFont);
renderer.setMeanVisible(false);

在这里,我无法更改异常值的颜色和形状。我希望它们是黑色的,而不是它们系列的颜色。我希望它们看起来像小十字,而不是这些大的空心圆圈。也根本没有显示 farout 值,似乎其中一个异常值被切断了。

然后我找到了 ExtendedBoxAndWhiskerRenderer它允许编辑离群值和远值的颜色和形状。这就是它的样子: ExtendedRenderer plot我像以前一样设置渲染器,但我添加了两行来设置异常值和 farout 条目的颜色:

renderer.setOutlierPaint(Color.BLACK);      renderer.setFaroutPaint(Color.LIGHT_GRAY);

我还通过将扩展渲染器实现中的圆半径减少到 1.0 而不是 2.0 来试验异常值的形状:

private Shape createEllipse(Point2D point, double oRadius) {
Ellipse2D dot = new Ellipse2D.Double(point.getX(), point.getY(), oRadius*1.0, oRadius*1.0);
return dot;
}

不过,我也不太喜欢这些情节。即使我将它们设置为黑色,我情节的晶须/轮廓也不再是黑色。即使我将其设置为不可见,均值再次可见。大量的异常值看起来有点荒谬,让我想知道为什么在使用普通渲染器的绘图中根本没有 farouts。

如果有人能帮我解决这些较小的外观问题,那就太好了。否则,我将只采用当前的图,其中包含看起来很奇怪的异常值和缺失的 farouts...

最佳答案

同时 ExtendedBoxAndWhiskerRenderer是典范,它有些过时,并且它的大部分功能已合并到主线版本中。您的实验表明旧渲染器和新数据集不兼容。

因为异常值渲染方法是私有(private)的,另一种方法是覆盖相关的 draw*Item() 方法并让它调用您自己的变体。您需要根据需要使用公共(public)访问器来概括现有代码。大体上,以下变体演示了如何使用 Color.black,如下图所示。

plot.setRenderer(new BoxAndWhiskerRenderer() {

@Override
public void drawVerticalItem(Graphics2D g2, …) {
// existing code that calls the methods below
}

private void drawEllipse(Point2D point, double oRadius, Graphics2D g2) {
Paint temp = g2.getPaint();
g2.setColor(Color.black);
Ellipse2D dot = new Ellipse2D.Double(point.getX() + oRadius / 2,
point.getY(), oRadius, oRadius);
g2.draw(dot);
g2.setPaint(temp);
}

private void drawHighFarOut(double aRadius, Graphics2D g2, double xx,
double m) {
Paint temp = g2.getPaint();
g2.setColor(Color.black);
double side = aRadius * 2;
g2.draw(new Line2D.Double(xx - side, m + side, xx + side, m + side));
g2.draw(new Line2D.Double(xx - side, m + side, xx, m));
g2.draw(new Line2D.Double(xx + side, m + side, xx, m));
g2.setPaint(temp);
}
}

image

关于java - JFreeChart Boxplot Outlier 和 Farout 外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28365288/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com