Ändern der Farbe von jfreechart piechart
-
13-09-2019 - |
Frage
Ich möchte in meinem jfreechart PieChart3D die Farbe der „Stücke“ der Torte ändern, dies ist der Code, der die piechart macht:
<% 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);
%>
Jede Hilfe ist sehr geschätzt.
Lösung
Die Farbe für jeden Abschnitt wird in der Regel von der Handlung des DrawingSupplier bevölkert. Sie können die Standardwerte außer Kraft setzen, aber durch den Aufruf
PiePlot.setSectionPaint(Comparable key, Paint paint);
Mit diesem obwohl, müssen Sie jeden Abschnitt manuell einzustellen. Wenn Sie nur einen anderen Satz von Farben wünschen, sieht es aus wie Sie DrawingSupplier implementieren könnte.
Andere Tipps
Sie können mit
Color[] colors = {Color.green, Color.red, Color.yellow .. /* size of data set */};
PieRenderer renderer = new PieRenderer(colors);
renderer.setColor(plot, ds);
und als innere Klasse:
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]);
}
}
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow