2014-01-12 3 views
6

Я вычисляю гистограмму красной составляющей изображения и сохраняю ее в redhisto []. Индекс массива представляет интенсивность (от 0 до 255) , а значение представляет количество пикселей с этой интенсивностью. Затем построим эти значения с помощью JFreeChart.Чтобы изменить начальное значение графика оси X в Jfreechart

Мой вопрос:

  1. Как сделать начальное значение оси Х от 0. Теперь его исходя из отрицательного числа.
  2. Можем ли мы изменить цвет баров на графике Output Graph obtained код является:

    public class Histogram extends ApplicationFrame { 
        public Histogram(final String title) throws IOException { 
        super(title); 
        IntervalXYDataset dataset = createDataset(); 
        JFreeChart chart = createChart(dataset); 
        final ChartPanel chartPanel = new ChartPanel(chart); 
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 270)); 
        setContentPane(chartPanel); 
        } 
    
        private IntervalXYDataset createDataset() throws IOException { 
        BufferedImage imageA = ImageIO.read(new File("XYZ.bmp")); 
        int[] red = new int[imageA.getHeight()*imageA.getWidth()]; 
        int[] redhisto = new int[256]; 
        int[] pixel; 
        int k= 0; 
        for (int y = 0; y < imageA.getHeight(); y++) { 
         for (int x = 0; x < imageA.getWidth(); x++) { 
         pixel = imageA.getRaster().getPixel(x, y, new int[3]);  
         red[k] = pixel[0]; 
         k++; 
         } 
        }   
    
        for(int x=0;x<red.length;x++){ 
         int y = red[x]; 
         redhisto[y]++; 
        } 
    
        final XYSeries series = new XYSeries("No of pixels"); 
        for(int i=0; i<redhisto.length;i++) 
        series.add(i,redhisto[i]); 
    
        final XYSeriesCollection dataset = new XYSeriesCollection(series); 
        return dataset; 
    } 
    
    private JFreeChart createChart(IntervalXYDataset dataset) { 
        final JFreeChart chart = ChartFactory.createXYBarChart("Color Intensity Histogram","X",false,"Y",dataset,PlotOrientation.VERTICAL,true,true,false); 
        XYPlot plot = (XYPlot) chart.getPlot(); 
        return chart;  
    } 
    
    public static void main(final String[] args) throws IOException { 
        final Histogram demo = new Histogram("Image Histogram"); 
        demo.pack(); 
        RefineryUtilities.centerFrameOnScreen(demo); 
        demo.setVisible(true); 
    } 
    } 
    

ответ

3

Вы можете изменить нижнюю границу оси домена и установите краску серии, как показано ниже. По умолчанию XYBarPainter имеет выделение цвета градиента, поэтому я использовал StandardXYBarPainter.

image

XYPlot plot = (XYPlot) chart.getPlot(); 
ValueAxis axis = plot.getDomainAxis(); 
axis.setLowerBound(0); 
XYBarRenderer r = (XYBarRenderer) plot.getRenderer(); 
r.setBarPainter(new StandardXYBarPainter()); 
r.setSeriesPaint(0, Color.blue); 
1
XYPlot plot = (XYPlot) chart.getPlot(); 

    //To change the lower bound of X-axis 
    NumberAxis xAxis = (NumberAxis) plot.getDomainAxis(); 
    xAxis.setLowerBound(0); 

    //To change the lower bound of Y-axis  
    NumberAxis yAxis = (NumberAxis) plot.getRangeAxis(); 
    yAxis.setLowerBound(0); 

    // To change the color 
    XYItemRenderer renderer = plot.getRenderer(); 
    renderer.setSeriesPaint(0, Color.green); 
Смежные вопросы