Пользовательский цвет столбчатой диаграммы JFreeChart?

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