简体   繁体   English

在Jfreechart中更改图形的X轴起始值

[英]To change the X-axis starting value of graph in Jfreechart

I am calculating histogram of red component of the image and stored it in redhisto[]. 我正在计算图像红色分量的直方图,并将其存储在redhisto []中。 The index of the array represent the intensity(0 to 255) and the value represent the number of pixel with that intensity. 数组的索引表示强度(0到255),值表示具有该强度的像素数。 Then plotting those values with JFreeChart. 然后使用JFreeChart绘制这些值。

My question is: 我的问题是:

  1. How to make X-axis value start from 0. Now its starting from negative number. 如何使X轴值从0开始。现在从负数开始。
  2. Can we change the color of the bars in the graph 我们可以更改图表中条形的颜色 获得输出图 code is : 代码是:

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

You can change the lower bound of the domain axis and set the series paint as shown below. 您可以更改域轴的下限并设置系列绘制,如下所示。 The default XYBarPainter has a gradient color highlight, so I used a StandardXYBarPainter . 默认的XYBarPainter有一个渐变颜色高亮,所以我使用了StandardXYBarPainter

图片

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM