2013-09-18 2 views
2

Я уже искал достаточно на сайте, но не повез ..Изменения пользовательских цветов в JFreeChart сложены 3D гистограмма

Я создал многослойную 3d гистограммы, где я не могу изменить значение по умолчанию colors.I пытались все советы предоставлены.

ниже небольшого фрагмента моего кода. это мой вход Мои данные из БД: А 0 2 B 15 53 С 0 2 D 0 2 Е 0 1 F 1 0 G 0 1

Каким-то образом я конвертированы это набор данных требование, а также добавлены элементы и модель ..

CategoryDataset dataset = DatasetUtilities.createCategoryDataset(item,models, data); chart = ChartFactory.createStackedBarChart3D(chartDescription, X-axis, Y-axis, dataset,PlotOrientation.VERTICAL, true, true, true); CategoryPlot plot = chart.getCategoryPlot(); CategoryItemRenderer r = plot.getRenderer(); r.setSeriesPaint(0, Color.GREEN); r.setSeriesPaint(1, Color.GRAY); plot.setRenderer(new StackedBarRenderer3D() {

  @Override 
      public Paint getItemPaint(int row, int col) { 
       System.out.println("row:"+row); 
       System.out.println("Col:"+col); 
       return Color.getHSBColor(row/42f, 1, 1); 
      } 
     }); 
      CategoryAxis domainAxis = plot.getDomainAxis(); 
      domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_90); 

      NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); 
      rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); 

      StackedBarRenderer3D renderer = (StackedBarRenderer3D)plot.getRenderer(); 
      //renderer.setBarPainter(new StandardBarPainter()); 
      renderer.setSeriesFillPaint(0,Color.BLACK); 
      renderer.setSeriesFillPaint(1,Color.GREEN); 
      renderer.setDrawBarOutline(false); 
      renderer.setShadowVisible(false); 
      renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.CENTER,TextAnchor.CENTER)); 
      renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); 
      renderer.setIgnoreZeroValues(true); 
      renderer.setMaximumBarWidth(.05); 
      renderer.setBaseItemLabelsVisible(true); 
      renderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator()); 
      renderer.setPositiveItemLabelPositionFallback(new ItemLabelPosition(
      ItemLabelAnchor.CENTER, TextAnchor.CENTER_RIGHT)); 
      renderer.setNegativeItemLabelPositionFallback(new ItemLabelPosition(
      ItemLabelAnchor.CENTER, TextAnchor.CENTER_RIGHT)); 
      renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(
      ItemLabelAnchor.CENTER, TextAnchor.TOP_CENTER)); 
      renderer.setBaseNegativeItemLabelPosition(new ItemLabelPosition(
      ItemLabelAnchor.CENTER, TextAnchor.TOP_CENTER)); 
      LegendTitle legend = chart.getLegend(0); 
      legend.setBackgroundPaint(Color.white); 
      legend.setFrame(new BlockBorder(Color.green)); 
      StandardChartTheme theme = (StandardChartTheme)org.jfree.chart.StandardChartTheme.createJFreeTheme(); 
      theme.setTitlePaint(Color.decode("#4572a7")); 
      theme.setExtraLargeFont(new Font("Arial",Font.BOLD, 16)); 
      theme.setLargeFont(new Font("Arial",Font.BOLD, 15)); 
      theme.setRegularFont(new Font("Arial",Font.PLAIN, 11)); 
      theme.setRangeGridlinePaint(Color.RED); 
      theme.setPlotBackgroundPaint(Color.white); 
      theme.setChartBackgroundPaint(Color.white); 
      theme.setItemLabelPaint(Color.YELLOW); 
      theme.setShadowVisible(true); 
      theme.setAxisLabelPaint(Color.decode("#666666") ); 
      theme.apply(chart); 

Даже я использовал setSeriespaint, но он не работает .. есть ли что-нибудь сделать с порядком создания в графике, р много и рендеринга?

Когда я напечатать строку и столбец я получить

строки: 1 Колонка: 0 ряд: 0 Колонка: 1 ряд: 1 Колонка: 1 ряд: 1 Колонка: 2 строку : 1 Col: 3 ряд: 1 Колонка: 4 ряд: 0 Колонка: 5 ряд: 1 Колонка: 6

Благодаря.

ответ

3

Вы можете переопределить getItemPaint() рендера, как показано на рисунке here.

plot.setRenderer(new StackedBarRenderer3D() { 

    @Override 
    public Paint getItemPaint(int row, int col) { 
     return Color.getHSBColor(row/42f, 1, 1); 
    } 
}); 

plot colors

+0

trashgod: спасибо и отлично! теперь я могу изменить цвет с вашего кода, но весь цвет штриха изменился на красный. Вместо этого я предпочитаю менять каждый стек разного цвета. Как 1-й стек должен иметь ЗЕЛЕНЫЙ, а второй стек должен иметь желтый цвет. Любые предложения, пожалуйста .. – user2228697

+1

@ user2228697: Используйте 'row' и' col', чтобы решить, какой цвет использовать. –

+1

@CatalinaIsland имеет правильную идею: сделайте четыре палитры, каждая из которых имеет ряд связанных цветов, например. зелень, желтые и т. д .; выберите палитру на основе 'col'; вот связанный [пример] (http://stackoverflow.com/a/8949913/230513); см. также подход 'DrawingSupplier', приведенный здесь [http://stackoverflow.com/a/14820173/230513]. – trashgod

Смежные вопросы