understanding plots boxplots java plot statistics jfreechart evaluation

java - understanding - boxplots



JFreeChart Boxplot Outlier y Farout apariencia (1)

Estoy usando JFreeChart con Java para evaluar resultados experimentales usando el diagrama de diagrama de caja. Quiero cambiar el color y la forma de los valores atípicos y las entradas de Farout.

Así es como se ven mis trazados actualmente cuando uso el BoxAndWhiskerRenderer normal: Configuré el renderizador de esta manera:

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);

Aquí, no puedo cambiar el color y la forma de los valores atípicos. Los quisiera en negro, no en el color de su serie. Y me gustaría que parezcan pequeñas cruces en lugar de estos grandes círculos vacíos. Además, no se muestran valores de farout en absoluto y parece que uno de los valores atípicos está cortado.

Luego encontré ExtendedBoxAndWhiskerRenderer que permite editar el color y la forma de ambos outliers y farouts. Esto es lo que parece: Configuré el renderizador como antes, pero agregué dos líneas para establecer el color para los valores atípicos y las entradas de farout:

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

También experimenté con la forma de los valores atípicos al reducir los raduis cirle en la implementación del renderizador extendido a 1.0 en lugar de 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; }

Sin embargo, tampoco me gustan demasiado estas tramas. Los Bigotes / Contornos de mis tramas ya no son negros a pesar de que los puse en negro. La media es visible nuevamente aunque lo configuré como invisible. Y la gran cantidad de outliers parece ridícula y me hace preguntarme por qué no hay farouts en las tramas con el renderizador normal.

Si alguien pudiera ayudarme con estos pequeños problemas de apariencia, sería muy agradable. De lo contrario, tomaré las tramas actuales con los valores atípicos de aspecto extraño y las líneas muertas perdidas ...


Si bien ExtendedBoxAndWhiskerRenderer es ejemplar, está anticuado y gran parte de su funcionalidad se ha incorporado a la versión principal. Su experimento sugiere que el renderizador anterior y el nuevo conjunto de datos son incompatibles.

Debido a que los métodos de representación de valores atípicos son privados, un enfoque alternativo es anular el método draw*Item() pertinente y permitir que invoque sus propias variaciones. Tendrá que recapitular el código existente, utilizando los accesadores públicos según sea necesario. En resumen, las siguientes variaciones demuestran el uso de Color.black , que se ilustra a continuación.

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); } }