Cambiar el color del gráfico circular jfreechart
-
13-09-2019 - |
Pregunta
Quiero cambiar el color de las "piezas" de pastel en mi jfreechart PieChart3D, este es el código que hace que el gráfico circular:
<% response.setContentType("image/png"); %><%@page import="org.jfree.data.general.*"%><%@page import="org.jfree.chart.*"%><%@page import="org.jfree.chart.plot.*"%><%@page import="java.awt.Color" %><%
DefaultPieDataset ds = (DefaultPieDataset)session.getAttribute("usagePieOutputDataset");
JFreeChart chart = ChartFactory.createPieChart3D
(
null, // Title
ds, // Dataset
false, // Show legend
false, // Use tooltips
false // Configure chart to generate URLs?
);
chart.setBackgroundPaint(Color.WHITE);
chart.setBorderVisible(false);
PiePlot3D plot = ( PiePlot3D )chart.getPlot();
plot.setDepthFactor(0.0);
plot.setLabelGenerator(null); //null means no labels
plot.setLabelOutlinePaint(Color.LIGHT_GRAY);
plot.setLabelFont(new java.awt.Font("Arial", java.awt.Font.BOLD, 10));
ChartUtilities.writeChartAsPNG(response.getOutputStream(), chart, 150, 144);
%>
Cualquier ayuda es muy apreciada.
Solución
El color de cada sección se completa normalmente de DrawingSupplier de la trama. Puede anular los valores predeterminados, sin embargo, llamando
PiePlot.setSectionPaint(Comparable key, Paint paint);
Con, esto, sin embargo, necesitará configurar manualmente cada sección. Si lo que desea es un conjunto diferente de colores, parece que podría implementar DrawingSupplier.
Otros consejos
Puede utilizar
Color[] colors = {Color.green, Color.red, Color.yellow .. /* size of data set */};
PieRenderer renderer = new PieRenderer(colors);
renderer.setColor(plot, ds);
y como una clase interna:
static class PieRenderer
{
private Color[] color;
public PieRenderer(Color[] color)
{
this.color = color;
}
public void setColor(PiePlot plot, DefaultPieDataset dataset)
{
List <Comparable> keys = dataset.getKeys();
int aInt;
for (int i = 0; i < keys.size(); i++)
{
aInt = i % this.color.length;
plot.setSectionPaint(keys.get(i), this.color[aInt]);
}
}
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow