JFreeChart可以实现普通柱状图和3D柱状图
1、普通柱状图
package Bar; import java.awt.Font; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.chart.StandardChartTheme; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.labels.CategoryItemLabelGenerator; import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.chart.title.LegendTitle; import org.jfree.chart.title.TextTitle; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; public class Bar { @SuppressWarnings("deprecation") public static void main(String[] args) { CategoryDataset mDataset = GetDataset(); /* //创建主题样式 StandardChartTheme mChartTheme = new StandardChartTheme("CN"); //设置标题字体 mChartTheme.setExtraLargeFont(new Font("黑体", Font.BOLD, 20)); //设置轴向字体 mChartTheme.setLargeFont(new Font("宋体", Font.CENTER_BASELINE, 15)); //设置图例字体 mChartTheme.setRegularFont(new Font("宋体", Font.CENTER_BASELINE, 15)); //应用主题样式 ChartFactory.setChartTheme(mChartTheme); ///////////////以上主题设置必须位于创建图表函数之前才能生效//////////// */ JFreeChart mBarChart = ChartFactory.createBarChart( "学校人员分布图", //图表标题 "类型", //横轴(目录轴)标签 "数量", //纵轴(数值轴)标签 mDataset, //数据集 PlotOrientation.VERTICAL, //图表方向 true, //是否显示图例 true, //是否生成提示工具 false); //是否生成url连接 //图表标题设置 TextTitle mTextTitle = mBarChart.getTitle(); mTextTitle.setFont(new Font("黑体", Font.BOLD, 20)); //mBarChart.setTitle(new TextTitle("学校人员分布图",new Font("黑体", Font.BOLD, 20))); //图表图例设置 LegendTitle mLegend = mBarChart.getLegend(); if(mLegend != null) mLegend.setItemFont(new Font("宋体", Font.CENTER_BASELINE, 15)); //mBarChart.getLegend().setItemFont(new Font("宋体", Font.CENTER_BASELINE, 15)); //设置柱状图轴 CategoryPlot mPlot = (CategoryPlot)mBarChart.getPlot(); //x轴 CategoryAxis mDomainAxis = mPlot.getDomainAxis(); //设置x轴标题的字体 mDomainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 15)); //设置x轴坐标字体 mDomainAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 15)); //y轴 ValueAxis mValueAxis = mPlot.getRangeAxis(); //设置y轴标题字体 mValueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 15)); //设置y轴坐标字体 mValueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 15)); //柱体显示数值 BarRenderer mRenderer= new BarRenderer(); mRenderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator()); mRenderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 10)); mRenderer.setItemLabelsVisible(true); mPlot.setRenderer(mRenderer); ChartFrame mChartFrame = new ChartFrame("学校人员分布图", mBarChart); mChartFrame.pack(); mChartFrame.setVisible(true); } public static CategoryDataset GetDataset() { DefaultCategoryDataset mDataset = new DefaultCategoryDataset(); mDataset.addValue(2000, "清华大学", "本科生"); mDataset.addValue(2000, "北京大学", "本科生"); mDataset.addValue(2000, "复旦大学", "本科生"); mDataset.addValue(1500, "清华大学", "研究生"); mDataset.addValue(1500, "北京大学", "研究生"); mDataset.addValue(1500, "复旦大学", "研究生"); mDataset.addValue(1000, "清华大学", "博士生"); mDataset.addValue(1000, "北京大学", "博士生"); mDataset.addValue(1000, "复旦大学", "博士生"); mDataset.addValue(900, "清华大学", "讲师"); mDataset.addValue(900, "北京大学", "讲师"); mDataset.addValue(900, "复旦大学", "讲师"); mDataset.addValue(800, "清华大学", "副教授"); mDataset.addValue(800, "北京大学", "副教授"); mDataset.addValue(800, "复旦大学", "副教授"); mDataset.addValue(300, "清华大学", "教授"); mDataset.addValue(300, "北京大学", "教授"); mDataset.addValue(300, "复旦大学", "教授"); mDataset.addValue(600, "清华大学", "行政人员"); mDataset.addValue(600, "北京大学", "行政人员"); mDataset.addValue(600, "复旦大学", "行政人员"); mDataset.addValue(400, "清华大学", "管理人员"); mDataset.addValue(400, "北京大学", "管理人员"); mDataset.addValue(400, "复旦大学", "管理人员"); /* mDataset.addValue(2000, "清华大学", "本科生"); mDataset.addValue(1500, "清华大学", "研究生"); mDataset.addValue(1000, "清华大学", "博士生"); mDataset.addValue(900, "清华大学", "讲师"); mDataset.addValue(800, "清华大学", "副教授"); mDataset.addValue(300, "清华大学", "教授"); mDataset.addValue(600, "清华大学", "行政人员"); mDataset.addValue(400, "清华大学", "管理人员"); */ return mDataset; } }
package Bar; import java.awt.Font; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.chart.StandardChartTheme; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; public class Bar3D { @SuppressWarnings("deprecation") public static void main(String[] args) { //创建主题样式 StandardChartTheme mChartTheme = new StandardChartTheme("CN"); //设置图表标题 mChartTheme.setExtraLargeFont(new Font("黑体", Font.BOLD, 20)); //设置轴向字体 mChartTheme.setLargeFont(new Font("宋体", Font.PLAIN, 15)); //设置图例字体 mChartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 15)); //应用主题 ChartFactory.setChartTheme(mChartTheme); //创建图表 CategoryDataset mDataset = GetDataset(); JFreeChart mChart = ChartFactory.createBarChart3D( "学校人员分布图", "类型", "数量", mDataset, PlotOrientation.VERTICAL, true, true, true); //设置内部属性 CategoryPlot mPlot = (CategoryPlot)mChart.getPlot(); //设置纵轴和横轴 CategoryAxis mDomainAxis = mPlot.getDomainAxis(); //设置柱状图距离x轴最左端(即y轴)的距离百分比10% //mDomainAxis.setLowerMargin(0.1); mDomainAxis.setUpperMargin(0.1); //柱体显示数值 BarRenderer mRenderer = new BarRenderer(); mRenderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator()); mRenderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 15)); mRenderer.setItemLabelsVisible(true); mPlot.setRenderer(mRenderer); //图表显示 ChartFrame mChartFrame = new ChartFrame("学校人员分布图", mChart); mChartFrame.pack(); mChartFrame.setVisible(true); } public static CategoryDataset GetDataset() { DefaultCategoryDataset mDataset = new DefaultCategoryDataset(); mDataset.addValue(2000, "清华大学", "本科生"); mDataset.addValue(1500, "清华大学", "研究生"); mDataset.addValue(1000, "清华大学", "博士生"); mDataset.addValue(900, "清华大学", "讲师"); mDataset.addValue(800, "清华大学", "副教授"); mDataset.addValue(300, "清华大学", "教授"); mDataset.addValue(600, "清华大学", "行政人员"); mDataset.addValue(400, "清华大学", "管理人员"); return mDataset; } }
本文为xyw_Eliot原创,转载请注明出处:http://blog.csdn.net/xyw_eliot/article/details/8692583