jfreechart报表,事例是其他人的





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();
	}
}


你可能感兴趣的:(jfreechart)