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