Jfreechart гистограмма пользовательский цвет?
Я использую JFreeCharts
в java для создания гистограммы. Мой вопрос довольно прост... как выбрать пользовательский цвет для всех баров гистограммы? Я не уверен, что эта настройка будет выполнена в GradientPaint
. Пример моего кода, который определяет цвет бара:
final GradientPaint gp0 = new GradientPaint(
0.0f, 0.0f, Color.blue,
0.0f, 0.0f, Color.blue
);
Я не уверен, если это правильный путь для пользовательских цветов или нет. В принципе, я не знаю, если GradientPaint
- это правильный путь или нет. Если это так, может кто-нибудь дать мне знать, как я могу редактировать этот код, чтобы сделать его пользовательским цветом, а не синим?
Я не уверен, что это помогает, Но сказать, что информация для пользовательского цвета была
- hue: 142
- СБ: 109
- Lum: 126
- Красный: 79
- Зеленая: 129
- синий: 189
С этим есть способ настроить цвет диаграммы?
4 ответов
прошло некоторое время с тех пор, как я кодировал с jfreechart.БАД, если я правильно помню, это был код, который я написал, чтобы изменить штрих-краску ;).
CategoryPlot cplot = (CategoryPlot)chart.getPlot();
cplot.setBackgroundPaint(SystemColor.inactiveCaption);//change background color
//set bar chart color
((BarRenderer)cplot.getRenderer()).setBarPainter(new StandardBarPainter());
BarRenderer r = (BarRenderer)chart.getCategoryPlot().getRenderer();
r.setSeriesPaint(0, Color.blue);
Я смотрю на код для моего первого приложения, когда-либо написанного.Я не уверен, будет ли это работать сейчас.
на будущее я рекомендую google out или купить PDF Руководство по jfreechart.Вы найдете все ссылки и образцы.Bud если вы можете, перейдите к JavaFX, я настоятельно рекомендую его, работа с jfreechart-это боль.Быть честный.Реализация диаграмм в javafx проста и выглядит лучше;)
CategoryPlot plot = chart.getCategoryPlot();
BarRenderer renderer = (BarRenderer) plot.getRenderer();
// set the color (r,g,b) or (r,g,b,a)
Color color = new Color(79, 129, 189);
renderer.setSeriesPaint(0, color);
это установит все бары на этот конкретный цвет. Если вы хотите, чтобы цвета менялись для каждой строки (например, для столбчатой гистограммы), вы можете вызвать dataset.getRowCount()
, С набором данных типа CategoryDataset
, чтобы вернуть количество строк для каждого столбца гистограммы. Затем вы можете индексировать ряд в renderer.setSeriesPaint()
вызов на основе индекса строки.
for (int i = 0; i < dataset.getRowCount(); i++){
switch (i) {
case 0:
// red
color = new Color(255, 0, 0);
break;
case 1:
// blue
color = new Color(0, 0, 255);
break;
default:
// green
color = new Color(0, 255, 0);
break;
}
}
пользовательские цвета в гистограмме с помощью JfreeChart
CategoryItemRenderer barColor = new CustomRenderer(new Paint[]{});
plot.setRenderer(barColor);
создайте новое имя класса CustomRenderer extends BarRenderer3D
или BarRenderer
class CustomRenderer extends BarRenderer3D {
private Paint[] colors;
public CustomRenderer(final Paint[] colors) {
this.colors = colors;
}
public Paint getItemPaint(final int row, final int column) {
if(column==0)
return Color.blue;
else if(column==1)
return Color.CYAN;
else
return Color.RED;
}
}
Я думаю, что самый простой способ-использовать getRenderer().setSeriesPaint(index, color)
метод.
в качестве примера вы можете попробовать приведенный ниже код для гистограммы, которая имеет 3 сгруппированных бара.
JFreeChart barChart = ChartFactory.createBarChart(
"Bar Chart Titke",
"Category", "Score",
dataset,PlotOrientation.HORIZONTAL,
true, true, false);
CategoryPlot plot = barChart.getCategoryPlot();
plot.getRenderer().setSeriesPaint(0, new Color(128, 0, 0));
plot.getRenderer().setSeriesPaint(1, new Color(0, 0, 255));
plot.getRenderer().setSeriesPaint(2, new Color(0, 230, 255));