今天用jfreechart做圖,發現生產的柱狀圖無法顯示數值,經過一段時間摸索終于解決,現給一demo如下:
test.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="org.jfree.chart.*"%>
<%@ page import="org.jfree.chart.axis.AxisLocation"%>
<%@ page import="org.jfree.chart.plot.*"%>
<%@ page import="org.jfree.data.*"%>
<%@ page import ="java.text.DecimalFormat"%>
<%@ page import ="java.text.NumberFormat"%>
<%@ page import ="java.awt.Color"%>
<%@ page import="java.awt.Font"%>
<%@ page import="org.jfree.chart.renderer.category.*"%>
<%@ page import="org.jfree.chart.axis.*"%>
<%@ page import="org.jfree.chart.title.TextTitle"%>
<%@ page import="org.jfree.chart.labels.*"%>
<%@page import="org.jfree.data.category.*"%>
<%@page import="org.jfree.chart.plot.PlotOrientation"%>
<%@page import="org.jfree.chart.servlet.ServletUtilities"%>
<%
CategoryDataset dcd= getDataset();
JFreeChart chart= ChartFactory.createStackedBarChart3D("各部門參加培訓情況", "部門", "人數", dcd, PlotOrientation.VERTICAL, true, false, false);
// 圖例字體清晰
//chart.setTextAntiAlias(false);
//chart.setBackgroundPaint(Color.WHITE);
// 2 .2 主標題對象 主標題對象是 TextTitle 類型
//chart .setTitle(new TextTitle("ok", new Font("隸書", Font.BOLD, 25)));
// 2 .2.1:設置中文 // x,y軸坐標字體
Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);
// 2 .3 Plot 對象 Plot 對象是圖形的繪制結構對象
CategoryPlot plot = (CategoryPlot)chart.getPlot();
ValueAxis rangeAxis = plot.getRangeAxis();
//設置最高的一個 Item 與圖片頂端的距離
rangeAxis.setUpperMargin(0.15);
//設置最低的一個 Item 與圖片底端的距離
rangeAxis.setLowerMargin(0.15);
plot.setRangeAxis(rangeAxis);
StackedBarRenderer3D renderer=new StackedBarRenderer3D();
//renderer.setBaseOutlinePaint(Color.BLACK);
//設置 Wall 的顏色
//renderer.setWallPaint(Color.gray);
//設置每種柱的顏色
renderer.setSeriesPaint(0, new Color(153, 153, 255));
renderer.setSeriesPaint(1, new Color(204, 255, 255));
renderer.setSeriesPaint(2, Color.GREEN);
//顯示每個柱的數值,并修改該數值的字體屬性
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setItemLabelFont(new Font("黑體",Font.PLAIN,9));
renderer.setItemLabelsVisible(true);
plot.setRenderer(renderer);
String filename=ServletUtilities.saveChartAsPNG(chart,500,300,null,session);
String url=request.getContextPath()+"/servletDisplayChart?filename="+filename;
%>
<p align="center">
<img src="<%=url%>" width="500" height="300" border="0" usemap="#map0">
</p>
<%!
private static CategoryDataset getDataset()
{
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
defaultcategorydataset.addValue(10.399999999999999D, "培訓人數", "中心機關");
defaultcategorydataset.addValue(10.800000000000001D, "未培訓人數", "中心機關");
defaultcategorydataset.addValue(43.200000000000003D, "培訓人數", "物探部");
defaultcategorydataset.addValue(15.6D, "未培訓人數", "物探部");
defaultcategorydataset.addValue(23D, "培訓人數", "遙感部");
defaultcategorydataset.addValue(11.300000000000001D, "未培訓人數", "遙感部");
defaultcategorydataset.addValue(13D, "培訓人數", "物業部");
defaultcategorydataset.addValue(11.800000000000001D, "未培訓人數", "物業部");
defaultcategorydataset.addValue(15, "培訓人數", "企業部");
defaultcategorydataset.addValue(12D, "未培訓人數", "企業部");
return defaultcategorydataset;
}
%>