1
我想創建使用JFreeChart
,看起來像這樣的條形圖:的JFreeChart與半透明交疊酒吧
酒吧是半透明和重疊。我試圖使用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);
}
}
謝謝trashgod。你的回答讓我朝着正確的方向前進。我已經使用工作代碼更新了我的原始帖子。順便說一句,你有沒有考慮過將你的用戶名改爲chartgod? – corneliu
還有一件事。我的代碼工作,除了在圖表右側有一個輕微的偏移。有沒有簡單的方法來擺脫抵消?我希望所有系列具有完全相同的位置。 – corneliu
很高興幫助。這看起來像一個新問題,但您可以嘗試'SimpleHistogramDataset',建議[這裏](https://stackoverflow.com/a/29283528/230513)來控制箱界限。嘗試使用'chart.getXYPlot()。getDomainAxis()。setUpperMargin(0.01)'來減少軸邊距。 – trashgod