1. 程式人生 > >【JSP中使用Jfreechart繪製折線、餅圖和柱狀圖】

【JSP中使用Jfreechart繪製折線、餅圖和柱狀圖】

寫的簡單,知識為了測試
<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="org.jfree.data.general.DefaultPieDataset"%>
<%@ page import="org.jfree.data.category.CategoryDataset" %>
<%@ page import="org.jfree.data.category.DefaultCategoryDataset" %>
<%@ page import="org.jfree.chart.JFreeChart"%>
<%@ page import="org.jfree.chart.plot.PiePlot"%>
<%@ page import="org.jfree.chart.ChartRenderingInfo"%>
<%@ page import="org.jfree.chart.servlet.ServletUtilities"%>
<%@ page import="org.jfree.chart.urls.StandardPieURLGenerator"%>
<%@ page import="org.jfree.chart.entity.StandardEntityCollection"%>
<%@ page import="org.jfree.chart.encoders.SunPNGEncoderAdapter"%>
<%@ page import="org.jfree.chart.StandardChartTheme"%>
<%@ page import="org.jfree.chart.ChartFactory"%>
<%@ page import="org.jfree.chart.plot.CategoryPlot"%>
<%@ page import="org.jfree.chart.plot.PlotOrientation"%>
<%@ page import="org.jfree.chart.axis.CategoryAxis"%>
<%@ page import="org.jfree.chart.renderer.category.BarRenderer"%>
<%@ page import="org.jfree.chart.labels.StandardCategoryItemLabelGenerator"%>
<%@ page import="java.awt.Font"%>
<%@ page import="java.awt.Color"%>

<%
	//實現餅狀圖
	DefaultPieDataset data = new DefaultPieDataset();
	data.setValue("六月", 500);
	data.setValue("七月", 580);
	data.setValue("八月", 828); 
	
	PiePlot plot = new PiePlot(data);
	JFreeChart chart = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot, true);

	chart.setBackgroundPaint(java.awt.Color.white);  //可選,設定圖片背景色
	chart.setTitle("Welcome to Jfreechart !"); //可選,設定圖片標題
	
	ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
	
	//500是圖片長度,300是圖片高度
	String filename = ServletUtilities.saveChartAsPNG(chart, 800, 500, info, session);
	String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;  
%>
<%
	//顯示柱狀圖
	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, "清華大學", "管理人員");
	
	//建立主題樣式
	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);
	
	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);
	
	//500是圖片長度,300是圖片高度
	String filenamebar = ServletUtilities.saveChartAsPNG(mChart, 800, 500, info, session);
	String graphURLbar = request.getContextPath() + "/servlet/DisplayChart?filename=" + filenamebar;  
 %>
 
 <%
 	//實現折現圖
 	DefaultCategoryDataset mDatasetline = new DefaultCategoryDataset();
	mDatasetline.addValue(1, "First", "2013");
	mDatasetline.addValue(3, "First", "2014");
	mDatasetline.addValue(2, "First", "2015");
	mDatasetline.addValue(6, "First", "2016");
	mDatasetline.addValue(5, "First", "2017");
	mDatasetline.addValue(12, "First", "2018");
	mDatasetline.addValue(14, "Second", "2013");
	mDatasetline.addValue(13, "Second", "2014");
	mDatasetline.addValue(12, "Second", "2015");
	mDatasetline.addValue(9, "Second", "2016");
	mDatasetline.addValue(5, "Second", "2017");
	mDatasetline.addValue(7, "Second", "2018");
	
	StandardChartTheme mChartThemeline = new StandardChartTheme("CN");
	mChartThemeline.setLargeFont(new Font("黑體", Font.BOLD, 20));
	mChartThemeline.setExtraLargeFont(new Font("宋體", Font.PLAIN, 15));
	mChartThemeline.setRegularFont(new Font("宋體", Font.PLAIN, 15));
	ChartFactory.setChartTheme(mChartThemeline);
			
	JFreeChart mChartline = ChartFactory.createLineChart(
				"折線圖",
				"年份",
				"數量",
				mDatasetline,
				PlotOrientation.VERTICAL,
				true, 
				true, 
				false);
		
	CategoryPlot mPlotline = (CategoryPlot)mChart.getPlot();
	mPlotline.setBackgroundPaint(Color.LIGHT_GRAY);
	mPlotline.setRangeGridlinePaint(Color.BLUE);//背景底部橫虛線
	mPlotline.setOutlinePaint(Color.RED);//邊界線
	
	//500是圖片長度,300是圖片高度
	String filenameline = ServletUtilities.saveChartAsPNG(mChartline, 800, 500, info, session);
	String graphURLline = request.getContextPath() + "/servlet/DisplayChart?filename=" + filenameline; 
  %>

<HTML>
<HEAD>
      <TITLE>Welcome to Jfreechart !</TITLE>
</HEAD>
<BODY>
<P ALIGN="CENTER">
<img src="<%= graphURLbar %>" width=500 height=300 border=0 usemap="#<%= filenamebar %>">
<img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>">
<img src="<%= graphURLline %>" width=500 height=300 border=0 usemap="#<%= filenameline %>">
</P>
</BODY>
</HTML>

附上效果圖: