有下面一段程序:按我的想法应该有两条横轴,一条的刻度是1,2,3,4,另外一条是Jan,Feb,Mar,Apr.但是程序运行结果却是两条横轴的刻度都是1,2,3,4,让我非常不理解。有熟悉JFreeChart的朋友请帮忙看一下怎么回事。程序在JFreeChart1.0.2下可以直接运行,谢谢指教
package test;import java.awt.Color;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;public class BarChartDemo3 extends ApplicationFrame {
public BarChartDemo3(String title) {
super(title);
CategoryDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
}
private CategoryDataset createDataset() { final String series1 = "Active drug";
final String series2 = "Placebo";
final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(1.0, series1, "1");
dataset.addValue(4.0, series1, "2");
dataset.addValue(3.0, series1, "3");
dataset.addValue(5.0, series1, "4");
dataset.addValue(2.0, series2, "1");
dataset.addValue(3.0, series2, "2");
dataset.addValue(4.0, series2, "3");
dataset.addValue(1.0, series2, "4");
return dataset;
}
private CategoryDataset createDataset2() {
final DefaultCategoryDataset result = new DefaultCategoryDataset(); result.addValue(2.3, "active", "Jan");
result.addValue(2.2, "active", "Feb");
result.addValue(1.9, "active", "Mar");
result.addValue(1.4, "active", "Apr");
return result;
}
private JFreeChart createChart(CategoryDataset dataset) { JFreeChart chart = ChartFactory.createBarChart(
"Dosing", // chart title
"", // domain axis label
"Dose volume", // range axis label
dataset, // data
PlotOrientation.VERTICAL, // the plot orientation
true, // include legend
true,
false
); chart.setBackgroundPaint(Color.lightGray); // get a reference to the plot for further customisation...
CategoryPlot plot = chart.getCategoryPlot();
plot.setNoDataMessage("NO DATA!");
CategoryAxis catAxis = new CategoryAxis("Visite Date");
plot.setDomainAxis(1,catAxis);
plot.setDataset(1,createDataset2());
plot.mapDatasetToDomainAxis(1,1);
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
plot.setDomainAxisLocation(1, AxisLocation.BOTTOM_OR_RIGHT);
catAxis.setTickLabelPaint(Color.blue);
return chart; }
public static void main(String[] args) { BarChartDemo3 demo = new BarChartDemo3("Bar Chart Demo 3");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}}
package test;import java.awt.Color;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.DatasetRenderingOrder;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;public class BarChartDemo3 extends ApplicationFrame {
public BarChartDemo3(String title) {
super(title);
CategoryDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
}
private CategoryDataset createDataset() { final String series1 = "Active drug";
final String series2 = "Placebo";
final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(1.0, series1, "1");
dataset.addValue(4.0, series1, "2");
dataset.addValue(3.0, series1, "3");
dataset.addValue(5.0, series1, "4");
dataset.addValue(2.0, series2, "1");
dataset.addValue(3.0, series2, "2");
dataset.addValue(4.0, series2, "3");
dataset.addValue(1.0, series2, "4");
return dataset;
}
private CategoryDataset createDataset2() {
final DefaultCategoryDataset result = new DefaultCategoryDataset(); result.addValue(2.3, "active", "Jan");
result.addValue(2.2, "active", "Feb");
result.addValue(1.9, "active", "Mar");
result.addValue(1.4, "active", "Apr");
return result;
}
private JFreeChart createChart(CategoryDataset dataset) { JFreeChart chart = ChartFactory.createBarChart(
"Dosing", // chart title
"", // domain axis label
"Dose volume", // range axis label
dataset, // data
PlotOrientation.VERTICAL, // the plot orientation
true, // include legend
true,
false
); chart.setBackgroundPaint(Color.lightGray); // get a reference to the plot for further customisation...
CategoryPlot plot = chart.getCategoryPlot();
plot.setNoDataMessage("NO DATA!");
CategoryAxis catAxis = new CategoryAxis("Visite Date");
plot.setDomainAxis(1,catAxis);
plot.setDataset(1,createDataset2());
plot.mapDatasetToDomainAxis(1,1);
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
plot.setDomainAxisLocation(1, AxisLocation.BOTTOM_OR_RIGHT);
catAxis.setTickLabelPaint(Color.blue);
return chart; }
public static void main(String[] args) { BarChartDemo3 demo = new BarChartDemo3("Bar Chart Demo 3");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}}
org.jfree.chart.plot.CategoryPlot - getRangeAxis
org.jfree.chart.axis.ValueAxis - setAutoTickUnitSelection
org.jfree.chart.axis.NumberAxis - setTickUnit
特别是active这组和series1, series2都没有关系
String series1 = "January"
String series2 = "February" 这样?不然楼主似乎是需要3维(月,日,series)了
为什么要画2维图