我使用JFreeChart创建了一个XYBarChart并向其中添加了多个系列。目前,对于给定的x值和来自系列的不同Y值,所有这些都是堆叠在一起。JFreeChart - XYBarChart为每个系列显示单独的酒吧
对于一个给定的x值,将每个系列显示为不同的条可能吗?
编辑:我发布了我的代码的相关部分,用于创建图表供您参考。
注意我不能使用CategoryDataset因为这不提供域坐标轴缩放功能。这是我实施的基本要求。
XYSeriesCollection intervalXYDataSet = new XYSeriesCollection();
int countPlotPoints = populateBandData(intervalXYDataSet, optionList); //optionList is a HashMap<Integer,ArrayList<Integer>> where key = seriesKey, and ArrayList<Integer> builds up the value for each series
if (countPlotPoints == 0) {
print("No options selected.\n");
JOptionPane.showMessageDialog(this, "No Plot Points Were Selected!", "Warning", JOptionPane.WARNING_MESSAGE);
return;
}
/**
* Chart Creation Section
*/
JFreeChart chart = ChartFactory.createXYBarChart(tabTitle, "Frequency Bands", false, "rxlev", intervalXYDataSet, PlotOrientation.VERTICAL, true, true, false);
XYPlot plot = (XYPlot) chart.getPlot();
plot.getRangeAxis().setStandardTickUnits(NumberAxis.createIntegerTickUnits());
plot.getDomainAxis().setAutoRange(true);
//
final XYBarRenderer renderer = (XYBarRenderer) plot.getRenderer();
renderer.setDrawBarOutline(false);
renderer.setShadowVisible(false);
renderer.setMargin(0.2);
renderer.setDefaultShadowsVisible(false);
ChartPanel chartpanel = new ChartPanel(chart);
chartpanel.setDefaultDirectoryForSaveAs(new File(lastAnalyzedPath));
JFrame frame = new JFrame();
frame.setTitle(plotTitle);
frame.add(new JScrollPane(chartpanel));
frame.pack();
frame.setVisible(true);
frame.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent evt) {
try {
System.out.println(":: Clearning Memory ::");
System.out.println("\tFree Memory (Before cleanup): "+Runtime.getRuntime().freeMemory());
Component component = getComponent(0);
if(component instanceof ChartPanel){
JFreeChart chart = ((ChartPanel) component).getChart();
XYPlot plot = (XYPlot) chart.getPlot();
plot = null;
chart = null;
component = null;
}
} finally {
System.runFinalization();
System.gc();
System.out.println("\tFree Memory (Post cleanup): "+Runtime.getRuntime().freeMemory());
}
}
});
它是如何当前出现
是你的代码使用* XYBarRenderer *,而不是* StackedXYBarRenderer * ?.你可以请发布创建条形图的代码吗? – sperumal 2012-07-06 17:59:00
@sperumal:刚更新了我的帖子。这有帮助吗? – Sujay 2012-07-06 18:09:19