#java #swing #charts #jfreechart #bar-chart
#java #качать #Диаграммы #jfreechart #столбчатая диаграмма
Вопрос:
Я использую JFreeCharts
Java для создания столбчатой диаграммы. Мой вопрос довольно прост… как я могу выбрать пользовательский цвет для всех столбцов в столбчатой диаграмме? Я не уверен, будет ли эта настройка выполнена в GradientPaint
. Примером моего кода, определяющего цвет столбика, является:
final GradientPaint gp0 = new GradientPaint(
0.0f, 0.0f, Color.blue,
0.0f, 0.0f, Color.blue
);
Я не уверен, правильный ли это путь для пользовательских цветов или нет. В принципе, я не знаю, GradientPaint
это правильный путь или нет. Если это так, может кто-нибудь сообщить мне, как я мог бы отредактировать этот код, чтобы сделать его пользовательским цветом, а не синим?
Я не уверен, помогает ли это, но скажем, что информация для пользовательского цвета была
- оттенок: 142
- Сб: 109
- Количество: 126
- Красный: 79
- Зеленый: 129
- Синий: 189
С помощью этого есть ли способ настроить цвет диаграммы?
Комментарии:
1. Я благодарю всех за помощь. Но я обнаружил, что просто делаю это с моим уже установленным кодом final GradientPaint gp0 = new GradientPaint (0.0f, 0.0f, новый цвет (79, 129, 189), 0.0f, 0.0f, новый цвет (79, 129, 189)); исправлена проблема. Я новичок в кодировании, поэтому не уверен, лучше это или хуже, чем уже представленные ответы. Но для меня это было проще всего. Спасибо всем, кто ответил. Я ценю это.
Ответ №1:
Прошло некоторое время с тех пор, как я кодировал с помощью 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 или приобрести PDF-руководство по jfreechart.Там вы найдете все ссылки и образцы.Если можете, перейдите на JavaFX, я настоятельно рекомендую это, работа с jfreechart — это боль.Если честно.Реализация диаграмм в javafx проста и выглядит намного лучше 😉
Комментарии:
1. JavaFX интересен. Однако все данные, из которых состоят эти диаграммы, поступают из базы данных mysql. Я использую соединение jdbc для перебора значений из таблиц в моей базе данных и заполнения диаграммы. Будет ли у javafx эта функция / возможность?
2. Конечно. Вам просто нужно это реализовать. Простой диаграммы не существует.setMyData(dataOfAnyKind); // метод выполнения. Bud не имеет значения, откуда вы берете данные. Если это текстовый файл, база данных, файл csv и т.д. Прежде всего, вы должны проанализировать ее в соответствии с вашими потребностями или потребностями диаграммы. В общем, вы всегда подготавливаете свои данные, прежде чем что-то с ними делать. Применяется та же логика. Так что не бойтесь и переходите на JavaFX. С JFreeChart вам придется проделать тот же объем работы адаптировать пользовательский интерфейс, который намного сложнее по сравнению с SceneBuilder с javafx, fxml. Все зависит от вас.
3. @user3794422, как вы указали в комментарии. Вы уже извлекли данные из базы данных. Итак, вся работа выполнена. Теперь сосредоточьтесь на пользовательском интерфейсе. И JavaFX имеют лучшую реализацию диаграмм, чем jfreechart imo.
Ответ №2:
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()
, поскольку dataset имеет тип 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;
}
}
Ответ №3:
Пользовательские цвета в столбчатой диаграмме с помощью 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;
}
}
Ответ №4:
Я думаю, что самый простой способ — использовать 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));