JFreeChart与半透明重叠条

时间:2017-05-26 23:35:28

标签: java charts jfreechart

我想使用JFreeChart创建一个如下所示的条形图:

http://desk.stinkpot.org:8080/tricks/index.php/2006/07/how-to-make-a-transparent-histogram-in-matlab/

条形是半透明的并且重叠。我尝试使用DefaultCategoryDataset,但它描绘了我不想要的彼此相邻的条形图。我知道如何让酒吧半透明,我只想让酒吧重叠。有没有一种简单的方法来实现这一目标?

更新:使用trashgod的答案我已成功完成任务。以下是有兴趣的人的代码:

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

1 个答案:

答案 0 :(得分:2)

如果您使用的是BarRenderer,请为setItemMargin()指定一个负值,如图here所示。 -50的值如下所示:

image

或者,请考虑ChartFactory.createHistogram()here使用带有相邻小节的XYBarRenderer,如hereimage1所示。

image2

{{3}}