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

我正在计算图像的红色成分的直方图,并将其存储在redhisto []中。 数组的索引表示强度(0到255),值表示具有该强度的像素数。 然后使用JFreeChart绘制这些值。

我的问题是:

  1. 如何使X轴值从0开始。现在从负数开始。
  2. 我们可以更改图表中条形的颜色 获得输出图 代码是:

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

您可以更改域轴的下限并设置系列绘制,如下所示。 默认的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);