jfreechart柱状图

来源:互联网 发布:区域增长算法改进 编辑:程序博客网 时间:2024/04/26 03:24

1.先在项目张导入jfreechart包

2.在web.xml文件中增加如下配置:
<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/DisplayChart</url-pattern>
</servlet-mapping>

 

3.此项目的运行图片如下:

 

4.源代码

<%@ page contentType="text/html;charset=GBK"%>

<%@ page import="org.jfree.chart.ChartFactory,
org.jfree.chart.JFreeChart,
org.jfree.chart.plot.PlotOrientation,
org.jfree.chart.servlet.ServletUtilities,
org.jfree.data.category.CategoryDataset,
org.jfree.data.general.DatasetUtilities,
org.jfree.chart.plot.*,
org.jfree.chart.labels.*,
org.jfree.chart.renderer.category.BarRenderer3D,
java.awt.*,
org.jfree.ui.*,
org.jfree.chart.axis.AxisLocation"%>
<%@page import="java.awt.Font"%>
<%
double[][] data = new double[][] {{1310, 1220, 1110, 1000},
{720, 700, 680, 640},
{1130, 1020, 980, 800},
{440, 400, 360, 300}};
String[] rowKeys = { "pig猪肉", "beef牛肉", "chicken鸡肉", "fish鱼肉" };
  String[] columnKeys = { "Guangzhou广州", "Shenzhen深圳", "Dongguan东莞", "Foshan佛山" };
CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);
JFreeChart chart = ChartFactory.createBarChart3D("肉类销量统计图",
"type类型",
"amount账号",
dataset,
PlotOrientation.VERTICAL,
true,
true,
false);
chart.getTitle().setFont(new Font("黑体",Font.BOLD,20));//标题字体
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));  //底部字体

 

CategoryPlot plot = chart.getCategoryPlot();
plot.getDomainAxis().setTickLabelFont(new Font("sans-serif", Font.BOLD, 12));  //x轴上的字体
plot.getDomainAxis().setLabelFont(new Font("宋体", Font.BOLD, 20));  //x轴标题上的字体  

plot.getRangeAxis().setTickLabelFont(new Font("sans-serif", Font.BOLD, 12));    //y轴上的字体
plot.getRangeAxis().setLabelFont(new Font("宋体", Font.BOLD, 20));  //y轴标题上的字体  
 
//设置网格背景颜色
plot.setBackgroundPaint(Color.white);
//设置网格竖线颜色
plot.setDomainGridlinePaint(Color.pink);
//设置网格横线颜色
plot.setRangeGridlinePaint(Color.pink);
//显示每个柱的数值,并修改该数值的字体属性
BarRenderer3D renderer = new BarRenderer3D();
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setBaseItemLabelsVisible(true);
//默认的数字显示在柱子中,通过如下两句可调整数字的显示
//注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题
renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
renderer.setItemLabelAnchorOffset(10D);
//设置每个地区所包含的平行柱的之间距离
renderer.setItemMargin(0.1);


plot.setRenderer(renderer);
//设置地区、销量的显示位置
//将下方的“肉类”放到上方
//plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
//将默认放在左边的“销量”放到右方
//plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
String filename = ServletUtilities.saveChartAsPNG(chart, 700, 400, null, session);
String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename;
%>
<img src="<%= graphURL %>" width=700 height=400 border=0 usemap="#<%= filename %>">