<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="java.awt.Color,
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.*,
org.jfree.chart.plot.CategoryPlot,
org.jfree.chart.axis.CategoryAxis,
org.jfree.chart.axis.ValueAxis,
org.jfree.chart.renderer.category.BarRenderer3D,
org.jfree.chart.urls.StandardCategoryURLGenerator,
org.jfree.chart.*,
org.jfree.chart.entity.*,
org.jfree.chart.labels.*,
org.jfree.chart.axis.CategoryLabelPositions,
java.awt.Font,
java.awt.GradientPaint,
org.jfree.ui.TextAnchor,
org.jfree.chart.axis.NumberAxis,
org.jfree.chart.axis.NumberTickUnit
"%>
<%
java.io.PrintWriter pw=new java.io.PrintWriter(out);
double[][] data = new double[][] {{500}, {200}, {100}, {400}, {600}, {300}};
String[] rowKeys = {"苹果", "梨子", "葡萄", "桔子", "西瓜", "香蕉"};
String[] columnKeys = {""};
CategoryDataset dataset = DatasetUtilities.createCategoryDataset(
rowKeys,
columnKeys,
data);
JFreeChart chart = ChartFactory.createBarChart3D("水果销量图统计",
"水果", //横坐标名称
"销量", //纵坐标名称
dataset,//数据集合
PlotOrientation.VERTICAL,//图形位置,水平还是垂直
true,
false,
false);
chart.setBackgroundPaint(Color.WHITE);
//设定背景色为白色
CategoryPlot categoryPlot = chart.getCategoryPlot();
//获得 plot:3dBar为CategoryPlot
categoryPlot.setBackgroundPaint(Color.lightGray);
//设定图表数据显示部分背景色
categoryPlot.setDomainGridlinePaint(Color.white);
//横坐标网格线白色
categoryPlot.setDomainGridlinesVisible(true);
//设置网格线可见
categoryPlot.setRangeGridlinePaint(Color.white);
//纵坐标网格线白色
//获取横坐标
CategoryAxis domainAxis = categoryPlot.getDomainAxis();
//设置 横坐标 垂直显示
//domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(0.4));
//获取纵坐标
NumberAxis numberaxis = (NumberAxis)categoryPlot.getRangeAxis();
//将纵坐标间距设置为50
numberaxis.setTickUnit(new NumberTickUnit(50));
//设置横坐标的标题字体和大小,此处是“宋体13号”
domainAxis.setLabelFont(new Font("宋体",Font.PLAIN,13));
//设置距离图片左端距离,参数为图片的百分比
domainAxis.setLowerMargin(0.05);
//设置距离图片右端距离
domainAxis.setUpperMargin(0.05);
//设置横坐标的坐标值的字体
domainAxis.setTickLabelFont(new Font("宋体",Font.PLAIN,12));
//使横坐标设置生效
categoryPlot.setDomainAxis(domainAxis);
ValueAxis rangeAxis = categoryPlot.getRangeAxis();
//设置最高的一个柱与图片顶端的距离
rangeAxis.setUpperMargin(0.05);
//设置最低的一个柱与图片底端的距离
rangeAxis.setLowerMargin(0.05);
categoryPlot.setRangeAxis(rangeAxis);
//设置竖坐标标签的旋转角度
rangeAxis.setLabelAngle(0.05);
//重要的类,负责生成各种效果
BarRenderer3D renderer=(BarRenderer3D) categoryPlot.getRenderer();
//设置 Wall 的颜色
renderer.setWallPaint(Color.PINK);
//设置每个柱的颜色
GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F, Color.blue,
0.0F, 0.0F, new Color(0, 0, 64)); //设定特定颜色
GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F, Color.green,
0.0F, 0.0F, new Color(0, 64, 0));
renderer.setSeriesPaint(0, gradientpaint);
renderer.setSeriesPaint(1, gradientpaint1);
//设置柱的 Outline 颜色
renderer.setSeriesOutlinePaint(0, Color.BLACK);
renderer.setSeriesOutlinePaint(1, Color.BLACK);
//设置每个category所包含的平行柱的之间距离
renderer.setItemMargin(0.1);
//显示每个柱的数值,并修改该数值的字体属性
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
//以下设置,将按照指定格式,制定内容显示每个柱的数值。可以显示柱名称,所占百分比
//renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}",new DecimalFormat("0.0%")));
//设置柱子上数值的字体
renderer.setItemLabelFont(new Font("宋体",Font.PLAIN,13));
renderer.setItemLabelsVisible(true);
//设置柱子上数据的颜色
renderer.setItemLabelPaint(Color.RED);
//设置bar的最小宽度,以保证能显示数值
renderer.setMinimumBarLength(0.02);
//最大宽度
//renderer.setMaximumBarWidth(0.07);
//设置柱子上比例数值的显示,如果按照默认方式显示,数值为方向正常显示
//设置柱子上显示的数据旋转90度,最后一个参数为旋转的角度值/3.14
ItemLabelPosition itemLabelPosition= new ItemLabelPosition(
ItemLabelAnchor.INSIDE12,TextAnchor.CENTER_RIGHT,
TextAnchor.CENTER_RIGHT,-1.57D);
//下面的设置是为了解决,当柱子的比例过小,而导致表示该柱子比例的数值无法显示的问题
//设置不能在柱子上正常显示的那些数值的显示方式,将这些数值显示在柱子外面
ItemLabelPosition itemLabelPositionFallback=new ItemLabelPosition(
ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT,
TextAnchor.HALF_ASCENT_LEFT,-1.57D);
//设置正常显示的柱子label的position
renderer.setPositiveItemLabelPosition(itemLabelPosition);
renderer.setNegativeItemLabelPosition(itemLabelPosition);
//设置不能正常显示的柱子label的position
renderer.setPositiveItemLabelPositionFallback(itemLabelPositionFallback);
renderer.setNegativeItemLabelPositionFallback(itemLabelPositionFallback);
categoryPlot.setRenderer(renderer);
//设置柱子的透明度
categoryPlot.setForegroundAlpha(0.8f);
//为柱图设置“数据挖陷”
//第一个参数是跳转的连接地址
renderer.setBaseItemURLGenerator(new StandardCategoryURLGenerator(
"detail.jsp", "fruit", ""));
//使设置生效
renderer.setBaseItemLabelsVisible(true);
//设置柱的透明度
categoryPlot.setForegroundAlpha(0.5f);
//设置地区、销量的显示位置
//plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
//生成图形的名称
//可以改变ServletUtilities源代码,设置图形统一前缀名称和默认存放路径
//注意:图形的大小往往都是通过配置文件设置的,不可能所有图形一个大小
String filename = ServletUtilities.saveChartAsPNG(chart, 800, 600, info, session);
//调用DisplayChart(配置在webxml中),生成图形
String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename;
//将MAP信息,写入图形
ChartUtilities.writeImageMap(pw, filename, info, true);
pw.flush();
%>
<table width="100%">
<tr>
<td align="center">
<!-- 生成图形 -->
<img src="<%= graphURL %>" width=800 height=600 border=0 usemap="#<%= filename %>" alt="">
</td>
</tr>
</table>
分享到:
相关推荐
### JFreeChart 柱图实现详解 #### 引言 在数据分析与展示领域,柱状图(Bar Chart)是一种非常常见的数据可视化工具,它能够直观地比较不同类别的数值大小,尤其适用于显示离散数据集。JFreeChart作为Java平台上...
JFreeChart 是一个开源的Java库,用于生成高质量的、多样的图表,包括折线图、柱形图、饼图、散点图等。在这个特定的案例中,我们关注的是如何利用JFreeChart来创建折线图和柱形图的混合图表,这种图表在数据可视化...
JFreeChar 动态横向柱状图,带纵向滚动条,可根据数据自动计算滚动条长度,可自定义系统柱子颜色,定时刷新
本资料提供的"jfreechar画图源代码"包含了作者自己编写的能运行并显示结果的示例代码,这对于学习和理解JFreeChart的使用非常有帮助。 JFreeChart库提供了丰富的图表类型,包括但不限于: 1. **饼状图(Pie Chart...
柱状图是表示分类数据的一种常见方式,JFreeChart可以创建单列、双列或多列的柱状图。每个柱子代表一个类别,高度表示该类别的数量或比例。这种图表适用于比较不同组间的数值大小。 2. **饼图(Pie Chart)** ...
例如,将图表保存为 PNG 图片: ```java FileOutputStream out = new FileOutputStream("chart.png"); ChartUtilities.writeChartAsPNG(out, chart, 800, 600); out.close(); ``` **8. 高级功能** JFreeChart 还...
这些图表不仅可以导出为PNG、JPEG格式的图片,还可以输出为PDF或Excel文件,非常适合集成到企业级应用中。 #### 四、核心API 了解JFreeChart的核心API对于创建图表至关重要。以下是一些常用类: - **`org.jfree....
有图像表报,柱形报表,里面的代码一一都有说明。。用struts做的还有servlet做的两个列子
// 显示图表(实际应用中可能会保存为图片或嵌入Web应用) ChartFrame frame = new ChartFrame("JFreeChart演示", chart); frame.pack(); frame.setVisible(true); } } ``` ### 高级特性 JFreeChart不仅支持...
状图 普通柱状图以及堆栈柱状图 线图 区域图 分布图 混合图 甘特图以及一些仪表盘等等 这些不同式样的图表基本 上可以满足目前的要求 为了减少篇幅本文主要介绍前面三种类型的图表 读者可以触类旁通去开发其他样式的...
5. **渲染与保存**:可以将图表渲染为图片文件,如JPEG或PNG,或者直接在网络应用中以流的形式输出。 在实际应用中,JFreeChart还支持动态更新图表,这对于实时监控和数据分析尤其有用。通过修改数据集并重绘图表,...
4. 将Chart嵌入到组件中:可以将图表添加到Swing的JFrame或JPanel中,或者生成图片文件。 在源码中,你可能会看到如下的关键类和接口: - `Chart`: 代表图表的顶级对象,可以是任何类型的图表。 - `Dataset`: 存储...