Настройка цветов столбцов на диаграмме XYJfree

как покрасить разные полосы в разные цвета, я пытался использовать рендерер, вот мой пример кода:

    public IntervalXYDataset createDataset() throws InterruptedException {
    parseFile();
    final XYSeries series = new XYSeries("Analysis");

    int i=0;
    while(parsedArray[i]!=0)
        {

        series.add(xaxisArray[i], yaxisArray[i]);

        i++;
    }

    final XYSeriesCollection dataset = new XYSeriesCollection(series);

     dataset.setIntervalWidth(0.15);//set width here

    return dataset;
}

и вот как я рисую график:

public className (final String title) throws InterruptedException {
    super(title);
    IntervalXYDataset dataset = createDataset();
    JFreeChart chart = createChart(dataset);
    final ChartPanel chartPanel = new ChartPanel(chart);
     XYPlot plot = (XYPlot) chart.getPlot();
    plot.getRenderer().setSeriesPaint( 0, Color.black);//0 works and paints all 40 bars in black, 1 and above fails. 
             // plot.getRenderer().setSeriesPaint( 1, Color.green);// this fails
    chartPanel.setPreferredSize(new java.awt.Dimension(2000,1000));//(width,height) of display
    setContentPane(chartPanel);

}

Я могу установить ширину, как я прокомментировал в своей программе, однако теперь я хочу установить цвет для разных столбцов, например, я хочу получить столбец на диаграмме и нарисовать красный для массива [0] и синий для [ 3] и оранжевый для ячейки [17], не могли бы вы помочь мне в этом. Большое Вам спасибо.



person David Prun    schedule 14.09.2011    source источник


Ответы (3)


Что вы хотите сделать, так это следующее:

XYPlot plot = (XYPlot) chart.getPlot();
plot.getRenderer().setSeriesPaint(1, Color.yellow);

Замените 1 на (отсчитываемый от нуля) индекс полосы, цвет которой вы хотите изменить.

Изменить, чтобы ответить на комментарий:

List<Color> myBarColors = .....

XYPlot plot = (XYPlot) chart.getPlot();
XYItemRenderer renderer = plot.getRenderer();

for (int i = 0; i < 40; i++) {
    renderer.setSeriesPaint(i, myBarColors.get(i));
}

Редактировать 2: Непонятая проблема ОП, новое решение в комментариях.

person Jordan Bentley    schedule 14.09.2011
comment
Это прямой подход; но Color.yellow является четвертым цветом по умолчанию, поэтому он не подходит для более чем трех серий. - person trashgod; 15.09.2011
comment
Привет, я пытался сделать это, это работает для значения «0», как в setSeriesPaint (0, Color.yellow); но у меня около 40 тактов - это повторяется 40 раз:-(series.add(xaxisArray[i], yaxisArray[i]);) не могли бы вы помочь мне исправить эту ошибку. Я хочу установить цвет для каждого бара. Большое спасибо. - person David Prun; 15.09.2011
comment
@helloMaga Я не знаю, точно что вы пытаетесь сделать, но я обновил свой ответ, чтобы показать настройку цветов в цикле. - person Jordan Bentley; 15.09.2011
comment
Здравствуйте Джордан, пожалуйста, смотрите мой вопрос выше, я заявил о своей проблеме. - person David Prun; 15.09.2011
comment
@helloMaga Хорошо, я еще раз взглянул на исходный пост. Я думаю, что вы используете неправильный класс для своего набора данных. У меня нет ничего перед собой, чтобы проверить это, но попробуйте использовать CatagoricalDataset или XYBarDataset. Если вы используете их, метод setSeriesPaint() должен работать для того, что вы пытаетесь сделать. - person Jordan Bentley; 15.09.2011

Самый гибкий подход — переопределить getItemPaint() метод AbstractRenderer в пользовательском XYBarRenderer, как показано здесь для XYLineAndShapeRenderer.

person trashgod    schedule 14.09.2011

Я нашел ответ. Создайте две серии, а затем добавьте, сколько столбцов вы хотите, и установите цвет для каждой серии. используя setSeriesPaint

person David Prun    schedule 18.09.2011