I want to create a bar graph using JFreeChart
that looks like this:
The bars are semitransparent and overlap. I tried to use DefaultCategoryDataset
, but it paints the bars next to each other which I don't want. I know how to make the bars semitransparent, I just want the bars to be overlapped. Is there a simple way to achieve this?
Update: Using trashgod's answer I've managed to get it done. Here is the code in case anyone is interested:
import java.awt.*;
import java.util.*;
import javax.swing.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
import org.jfree.chart.renderer.xy.*;
import org.jfree.data.statistics.*;
public class Histograph {
public static void main(String[] args) {
Random generator = new Random();
HistogramDataset dataset = new HistogramDataset();
double[] d1 = new double[100];
double[] d2 = new double[100];
double[] d3 = new double[100];
for (int i = 1; i < 100; i++) {
d1[i] = generator.nextInt(10);
d2[i] = generator.nextInt(10);
d3[i] = generator.nextInt(10);
}
dataset.addSeries("s1", d1, 10);
dataset.addSeries("s2", d2, 10);
dataset.addSeries("s3", d3, 10);
JFreeChart chart = ChartFactory.createHistogram("Histogram", "x", "y",
dataset, PlotOrientation.VERTICAL, false, false, false);
XYPlot plot = (XYPlot)chart.getPlot();
plot.setBackgroundPaint(Color.white);
XYBarRenderer renderer = (XYBarRenderer)plot.getRenderer();
renderer.setBarPainter(new StandardXYBarPainter());
renderer.setShadowVisible(false);
renderer.setSeriesPaint(0, new Color(1, 0, 0, 0.5f));
renderer.setSeriesPaint(1, new Color(0, 1, 0, 0.5f));
renderer.setSeriesPaint(2, new Color(0, 0, 1, 0.5f));
JFrame f = new JFrame("Histogram");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new ChartPanel(chart));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}