2017-05-26 95 views
1

我想創建使用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

如果您使用的是BarRenderer,指定一個負值setItemMargin(),如圖所示here。的-50值如下所示:

image

可替代地,考慮ChartFactory.createHistogram(),它使用與相鄰條的XYBarRenderer,如圖herehere

image1

image2

+0

謝謝trashgod。你的回答讓我朝着正確的方向前進。我已經使用工作代碼更新了我的原始帖子。順便說一句,你有沒有考慮過將你的用戶名改爲chartgod? – corneliu

+0

還有一件事。我的代碼工作,除了在圖表右側有一個輕微的偏移。有沒有簡單的方法來擺脫抵消?我希望所有系列具有完全相同的位置。 – corneliu

+0

很高興幫助。這看起來像一個新問題,但您可以嘗試'SimpleHistogramDataset',建議[這裏](https://stackoverflow.com/a/29283528/230513)來控制箱界限。嘗試使用'chart.getXYPlot()。getDomainAxis()。setUpperMargin(0.01)'來減少軸邊距。 – trashgod