Настроить цвета гистограммы в XYJfree Chart - PullRequest
3 голосов
/ 14 сентября 2011

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

    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], подскажите пожалуйста. Большое спасибо.


Ответы [ 3 ]

3 голосов
/ 14 сентября 2011

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

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: Непонятая проблема ОП, новое решение в комментариях.

2 голосов
/ 18 сентября 2011

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

2 голосов
/ 14 сентября 2011

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

...