您的位置:首页 > 编程语言 > Java开发

Java语言用jfreechart绘制柱状图、饼状图和时序图

2015-02-09 11:33 260 查看
1.柱状图:

public void test1() {
try {
//设置字体
StandardChartTheme sct = new StandardChartTheme("CN");
sct.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));
sct.setRegularFont(new Font("隶书", Font.BOLD, 20));
sct.setLargeFont(new Font("隶书", Font.BOLD, 20));
ChartFactory.setChartTheme(sct);

DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "JAVA", "1");
dataset.addValue(200, "js", "1");
dataset.addValue(200, "C++", "2");
dataset.addValue(300, "C", "3");
dataset.addValue(400, "HTML", "4");
dataset.addValue(400, "CSS", "5");
JFreeChart chart = ChartFactory.createBarChart3D("编程语言统计", "语言", "学习人数", dataset, PlotOrientation.VERTICAL, true, false, false);

CategoryPlot plot = chart.getCategoryPlot();
//设置网格背景颜色
plot.setBackgroundPaint(Color.gray);
//设置网格横线颜色
plot.setRangeGridlinePaint(Color.GREEN);

//显示每个柱的数值,并修改该数值的字体属性
BarRenderer3D renderer = new BarRenderer3D();
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setBaseItemLabelsVisible(true);

//默认的数字显示在柱子中,通过如下两句可调整数字的显示
//注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题
renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
renderer.setItemLabelAnchorOffset(12D);
renderer.setItemMargin(0.1);//组内柱子间隔为组宽的10%
plot.setRenderer(renderer);

ChartUtilities.saveChartAsPNG(new File("D://BarChart3D.png"), chart, 800, 500);

System.out.println("绘图完成");
} catch (IOException e) {
e.printStackTrace();
}
}
运行结果:



2.饼状图:

public void test2() throws IOException {

StandardChartTheme sct = new StandardChartTheme("CN");
sct.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));
sct.setRegularFont(new Font("隶书", Font.BOLD, 20));
sct.setLargeFont(new Font("隶书", Font.BOLD, 20));
ChartFactory.setChartTheme(sct);

DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("苹果", 100);
dataset.setValue("梨子", 200);
dataset.setValue("葡萄", 300);
dataset.setValue("香蕉", 400);
dataset.setValue("荔枝", 500);
JFreeChart jfreechart = ChartFactory.createPieChart3D("fruit", dataset, true, true, true);
ChartUtilities.saveChartAsPNG(new File("D://fruit3D.png"), jfreechart, 800, 500);
// ChartFrame frame = new ChartFrame("报表练习", jfreechart);
// frame.setVisible(true);
// frame.pack();
}
运行结果:



3.时序图:

public void test3() throws IOException {

StandardChartTheme sct = new StandardChartTheme("CN");
sct.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));
sct.setRegularFont(new Font("隶书", Font.BOLD, 20));
sct.setLargeFont(new Font("隶书", Font.BOLD, 20));
ChartFactory.setChartTheme(sct);

TimeSeries timeSeries = new TimeSeries("某网站访问量统计");
//时间曲线数据集合
TimeSeriesCollection lineDataset = new TimeSeriesCollection();
//构造数据集合
timeSeries.add(new Month(1, 2010), 1100);
timeSeries.add(new Month(2, 2010), 1200);
timeSeries.add(new Month(3, 2010), 1000);
timeSeries.add(new Month(4, 2010), 900);
timeSeries.add(new Month(5, 2010), 1000);
timeSeries.add(new Month(6, 2010), 1200);
timeSeries.add(new Month(7, 2010), 1300);
timeSeries.add(new Month(8, 2010), 1400);
timeSeries.add(new Month(9, 2010), 1200);
timeSeries.add(new Month(10, 2010), 1500);
timeSeries.add(new Month(11, 2010), 1600);
timeSeries.add(new Month(12, 2010), 1300);
lineDataset.addSeries(timeSeries);

JFreeChart chart = ChartFactory.createTimeSeriesChart("访问量统计时间线", "月份", "访问量", lineDataset, true, true, true);
//设置主标题
chart.setTitle(new TextTitle("某网站访问量统计", new Font("隶书", Font.ITALIC, 15)));
//设置子标题
TextTitle subtitle = new TextTitle("2010年度", new Font("黑体", Font.BOLD, 12));
chart.addSubtitle(subtitle);
chart.setAntiAlias(true);
XYPlot plot = (XYPlot) chart.getPlot();

//设置最大坐标范围
// ValueAxis axis = plot.getRangeAxis() ;
// axis.setRange(800,1800) ;
// plot.setRangeAxis(axis);
//设置曲线图与xy轴的距离 [上,左,下,右]
// plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 12D));
//设置曲线是否显示数据点
XYLineAndShapeRenderer xylinerenderer = (XYLineAndShapeRenderer) plot.getRenderer();
xylinerenderer.setBaseShapesVisible(true);

//设置曲线显示各数据点的值
XYItemRenderer xyitem = plot.getRenderer();

xyitem.setBaseItemLabelsVisible(true);
xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 12));
plot.setRenderer(xyitem);
ChartUtilities.saveChartAsPNG(new File("D://time3D.png"), chart, 800, 500);

}


 运行结果:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息