java中的柱状图,饼状图等
需要jar包:
jcommon-1.0.12.jar
jfreechart-1.0.8.jar
运行,看到路径下的图片,会生成对应的图。
package jfree;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.io.FileOutputStream;import java.text.DecimalFormat;import java.text.NumberFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.AxisLocation;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.CategoryLabelPositions;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.labels.ItemLabelAnchor;import org.jfree.chart.labels.ItemLabelPosition;import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;import org.jfree.chart.labels.StandardPieSectionLabelGenerator;import org.jfree.chart.labels.StandardPieToolTipGenerator;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PiePlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.BarRenderer3D;import org.jfree.chart.renderer.category.CategoryItemRenderer;import org.jfree.chart.title.LegendTitle;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.DefaultCategoryDataset;import org.jfree.data.general.DefaultPieDataset;import org.jfree.ui.TextAnchor;import org.jfree.util.Rotation;public class Jfreechart { //柱状图 public static void barCharts() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(300, "广州", "苹果"); dataset.addValue(200, "广州", "梨子"); dataset.addValue(500, "广州", "葡萄"); dataset.addValue(340, "广州", "芒果"); dataset.addValue(280, "广州", "荔枝"); dataset.addValue(null, "广州", "橘子"); /*以二维数组的形式 double [][]data=new double[][]{{672,766,223,540,126},{325,521,210,340,106},{332,256,523,240,526}}; String []rowKeys={"苹果","梨子","葡萄"}; String []columnKeys={"北京","上海","广州","武汉","深圳"}; CategoryDataset dataset=DatasetUtilities.createCategoryDataset(rowKeys, columnKeys,data); */ JFreeChart chart = ChartFactory.createBarChart3D("水果销售统计图", "水果", "销量", dataset, PlotOrientation.VERTICAL, //竖直显示 true, false, false); //重新设置图标标题,改变字体 chart.setTitle(new TextTitle("水果销售统计", new Font("黑体", Font.BOLD, 20))); //取得统计图标的第一个图例 LegendTitle legend = chart.getLegend(0); //修改图例的字体,必须把显示图片设置为ture,否则会包空指针异常 legend.setItemFont(new Font("宋体", Font.BOLD, 20)); //获取柱状图的Plot对象 CategoryPlot plot = chart.getCategoryPlot(); //设定图表数据显示部分背景色 plot.setBackgroundPaint(Color.PINK); //数据区的方向--用来控制数据时从左到右增长,还是从下到上增长的 plot.setOrientation(PlotOrientation.HORIZONTAL); //分类轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义) plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT); //分类轴网格是否可见(竖的分割线) plot.setDomainGridlinesVisible(false); //数据图例和数据区的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义) plot.setRangeAxisLocation(AxisLocation.TOP_OR_LEFT); plot.setRangeGridlinesVisible(true); //取得横轴 CategoryAxis categoryAxis = plot.getDomainAxis(); //设置横轴显示标签的字体 categoryAxis.setLabelFont(new Font("隶书", Font.BOLD, 20)); //分类标签以45度角倾斜 categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); //分类标签显示的字体 categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 20)); //取得纵轴 NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis(); //设置纵轴显示标签的字体 numberAxis.setLabelFont(new Font("隶书", Font.BOLD, 20)); //数据轴是否反向(默认为false) numberAxis.setInverted(false); //数据轴的数据标签是否自动确定(默认为true) numberAxis.setAutoTickUnitSelection(true); //设置最高的一个柱与图片顶端的距离 numberAxis.setUpperMargin(0.2); //numberAxis.setLowerMargin(0.2); //设置显示小于最高一个柱的值100所有柱子,纵轴从柱子最大值-100开始显示 numberAxis.setFixedAutoRange(400); //设置整数显示 numberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); numberAxis.setNegativeArrowVisible(true); //设置最大值 numberAxis.setUpperBound(1000); //设置最小值,如果小于的话不显示 numberAxis.setLowerBound(150); //设置百分比显示 //numberAxis.setNumberFormatOverride(new DecimalFormat("0%")); //numberAxis.setNumberFormatOverride(new DecimalFormat("0.00%")); //设置最小显示数,小于的话会显示在中间(正负) //numberAxis.setAutoRangeMinimumSize(1); plot.setNoDataMessage("没有使用数据"); plot.setNoDataMessagePaint(Color.blue); //柱子对象 BarRenderer3D renderer = new BarRenderer3D(); //设置柱子的宽度 renderer.setMaximumBarWidth(0.05); //设置柱子的高度 renderer.setMinimumBarLength(0.2); //设置柱子的颜色 renderer.setSeriesPaint(0, Color.GREEN); //设置每种水果代表的柱的 边框颜色 renderer.setSeriesOutlinePaint(0, Color.BLACK); //设置柱子边框可见 renderer.setDrawBarOutline(true); //设置柱子默认的边框颜色,必须设置边框可见才起效 renderer.setBaseOutlinePaint(Color.BLACK); //设置柱子的纵横背景色 renderer.setWallPaint(Color.BLUE); //设置平行柱的之间距离 renderer.setItemMargin(0.5); //显示每个柱子的数值,并修改改数值的字体属性 renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setBaseItemLabelFont(new Font("隶书", Font.BOLD, 22)); renderer.setBaseItemLabelsVisible(true); //设置显示值的位置 renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER)); renderer.setItemLabelAnchorOffset(12D);// 设置柱形图上的文字偏离值 //将修改后的属性值保存到图中,这一步很重要,否则上面对颜色的设置都无效 plot.setRenderer(renderer); //设置柱子的透明度,0.8相当于80%的透明度 plot.setForegroundAlpha(0.8f); drawToOut(chart); } //饼图 public static void pieCharts() { //与柱状图和折线图不同 DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("管理人员", 10.02D); dataset.setValue("市场人员", 20.23D); dataset.setValue("开发人员", 60.02D); dataset.setValue("OEM人员", 10.02D); dataset.setValue("其他人员", 5.11D); //createPieChart 2D; createPieChart3D 3D JFreeChart chart = ChartFactory.createPieChart("公司组织架构图", dataset, true, true, false); //设置标题字体,为了防止中文乱码 chart.setTitle(new TextTitle("公司组织架构统计图", new Font("黑体", Font.ITALIC, 22))); //取得统计图标的第一个图例 LegendTitle legend = chart.getLegend(0); //修改图例的字体,必须把显示图片设置为ture,否则会包空指针异常 legend.setItemFont(new Font("宋体", Font.BOLD, 20)); //取得图表显示对象(与柱状图和折线图不同) PiePlot plot = (PiePlot) chart.getPlot(); //设置区块标签的字体==为了防止中文乱码:必须设置字体 plot.setLabelFont(new Font("隶书", Font.BOLD, 22)); //图形边框颜色 plot.setBaseSectionOutlinePaint(Color.BLUE); //图形边框粗细 plot.setBaseSectionOutlineStroke(new BasicStroke(0.5f)); //设置饼状图的绘制方向,可以按顺时针方向绘制,也可以按逆时针方向绘制 plot.setDirection(Rotation.ANTICLOCKWISE);//逆时针,Rotation.CLOCKWISE顺时针 //设置绘制角度(图形旋转角度) plot.setStartAngle(70); //设置突出显示的数据块 //plot.setExplodePercent(1, 0.5D); //plot.setExplodePercent("One", 0.5D); //扇区分离显示,对3D图不起效 plot.setExplodePercent(dataset.getKey(0), 0.1d); //分类标签与图的连接线颜色 plot.setLabelLinkPaint(Color.BLUE); //分类标签边框颜色 plot.setLabelOutlinePaint(Color.black); //分类标签阴影颜色 plot.setLabelShadowPaint(Color.RED); //指定分类饼的颜色 plot.setSectionPaint(1, Color.BLACK); //饼状图标签显示百分比 :自定义,{0}表示选项,{1}表示数值,{2}表示所占比例,小数点后两位 plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}:{1}\r\n{2}", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%"))); //图例显示百分比 plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={2}")); //指定显示的拼图为:圆形(true),还是椭圆形(false) plot.setCircular(true); //没有数据的时候显示的内容 plot.setNoDataMessage("没有可用的数据..."); //设置鼠标悬停提示 plot.setToolTipGenerator(new StandardPieToolTipGenerator()); //设置热点链接 //plot.setURLGenerator(new StandardPieURLGenerator("detail.jsp")); drawToOut(chart); } //折线图 public static void lineCharts() { DefaultCategoryDataset dataSet = new DefaultCategoryDataset(); dataSet.addValue(0.0, "冰箱", "1月"); dataSet.addValue(4.2, "冰箱", "2月"); dataSet.addValue(3.9, "冰箱", "3月"); dataSet.addValue(1.0, "彩电", "1月"); dataSet.addValue(5.2, "彩电", "2月"); dataSet.addValue(7.9, "彩电", "3月"); dataSet.addValue(2.0, "洗衣机", "1月"); dataSet.addValue(9.2, "洗衣机", "2月"); dataSet.addValue(8.9, "洗衣机", "3月"); JFreeChart chart = ChartFactory.createLineChart("折线图", "时间", "销售额(百万)", dataSet, PlotOrientation.VERTICAL, true, true, false); // 获取一个图例 LegendTitle legendTitle = chart.getLegend(0); // 设置图例字体 legendTitle.setItemFont(new Font("宋体", Font.BOLD, 18)); CategoryPlot plot = (CategoryPlot) chart.getPlot(); // 取得横轴 CategoryAxis categoryAxis = plot.getDomainAxis(); // 设置横轴的字体 categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 18)); // 设置分类标签字体 categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 12)); // 取得纵轴 NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis(); // 设置纵轴的字体 numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 14)); numberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());//显示整数 CategoryItemRenderer xylineandshaperenderer = plot.getRenderer(); xylineandshaperenderer.setBaseItemLabelsVisible(true); xylineandshaperenderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE2, TextAnchor.BASELINE_RIGHT)); xylineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); drawToOut(chart); } public static void drawToOut(JFreeChart chart) { FileOutputStream fos; try { fos = new FileOutputStream("d://1.jpg"); ChartUtilities.writeChartAsJPEG(fos, chart, 1400, 800); } catch (Exception e) { e.printStackTrace(); } System.out.println("成功"); } public static void main(String[] args) { // Jfreechart.barCharts();//柱状图 // Jfreechart.pieCharts();//饼状图 Jfreechart.lineCharts(); }}