今天在网上查了一下,没有发现 Jfreechart柱状图排序的实现方法,也还没来得及研究Jfreechart的代码和文档,所以就自己实现了一下。可能jfreechart自身有这个功能,可是发现以前的这个功能无效了,不知道用什么新方法实现这个功能了,所以只好自己实现了。
package my;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GradientPaint;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
/**
* jfreechart排序柱状图.
*/
public class MyBarPic extends ApplicationFrame {
/**
*
* 构造函数,进行初始化操作
*
* @param title the frame title.
*/
public MyBarPic(String title) {
super(title);
CategoryDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart, false);
chartPanel.setPreferredSize(new Dimension(500, 270));
setContentPane(chartPanel);
saveAsFile(chart, "D:\\图\\第一.jpg", 430, 200);
}
/**
* 生成数据集
*
* @return
*/
private static CategoryDataset createDataset() {
/**
*
* 数据集数据存放对象
*
* @author newlife111
*
*/
class ThreeData implements Comparator{
String rowKey;//行标签
String colKey;//列标签
double value;//值
ThreeData(){
}
ThreeData(double value, String rowKey, String colKey){
this.value = value;
this.rowKey = rowKey;
this.colKey = colKey;
}
/*
* 比较的算法
*/
public int compare(Object obj1, Object obj2) {
double valueTmp = ((ThreeData)obj1).value - ((ThreeData)obj2).value;
return valueTmp > 0 ? -1 : (valueTmp < 0 ? 1 : 0);
}
}
/*
* 存放数据
*/
List list = new ArrayList();
list.add(new ThreeData(100.00d, "xx", "苹\n果"));
list.add(new ThreeData(200.00d, "xx", "葡\n萄"));
list.add(new ThreeData(50.00d, "xx", "雪\n梨"));
list.add(new ThreeData(24.00d, "xx", "香\n蕉"));
list.add(new ThreeData(65.00d, "xx", "橘\n子"));
list.add(new ThreeData(125.00d, "xx", "柑\n橘"));
list.add(new ThreeData(198.00d, "xx", "柚\n子"));
list.add(new ThreeData(160.00d, "xx", "草\n莓"));
//进行排序
Collections.sort(list,new ThreeData());
/*
* 添加数据进数据集
*/
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
Iterator iter = list.iterator();
while(iter.hasNext()) {
ThreeData threeDataTmp = (ThreeData)iter.next();
dataset.addValue(threeDataTmp.value, threeDataTmp.rowKey, threeDataTmp.colKey);
}
return dataset;
}
/**
* 生成图片.
*
* @param dataset 数据集.
*
* @return chart 图片对象
*/
private static JFreeChart createChart(CategoryDataset dataset) {
JFreeChart chart = ChartFactory.createBarChart(
"xxx", // 图片标题
"xxx", // 横轴标题
"xxx", // 纵轴标题
dataset, // 数据集
PlotOrientation.VERTICAL, // 图形方向
true, // 是否legend
true, // 图形提示
false // 图形url
);
//设置图片背景色
chart.setBackgroundPaint(Color.white);
//获得数据区对象
CategoryPlot plot = (CategoryPlot) chart.getPlot();
//设置图形背景色
plot.setBackgroundPaint(Color.white);
//横轴网格显示
plot.setDomainGridlinesVisible(true);
//横轴网格颜色
plot.setRangeGridlinePaint(Color.black);
/*
* 图形相关设置
*/
BarRenderer renderer = (BarRenderer) plot.getRenderer();
renderer.setDrawBarOutline(false);
renderer.setBaseItemLabelFont(new Font("黑体", Font.BOLD, 12));
renderer.setBaseLegendTextFont(new Font("Simsun", 0, 10));
renderer.setBaseItemLabelsVisible(true);
renderer.setMaximumBarWidth(0.05f);
renderer.setDrawBarOutline(false);
renderer.setShadowVisible(false);
/*
* 纵轴相关设置
*/
final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxis.setLabelFont(new Font("Simsun", 0, 12));
/*
* 图形1颜色设置
*/
GradientPaint gp0 = new GradientPaint(0.5f, 0.5f, new Color(100,100,255),
0.0f, 0.0f, new Color(0, 0, 64));
renderer.setSeriesPaint(0, gp0);
/*
* 横轴相关设置
*/
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setLabelFont(new Font("Simsun", Font.BOLD, 12));
//Font.BOLD字符加粗可使标签显示清楚些
domainAxis.setTickLabelFont(new Font("Simsun", Font.BOLD, 8));
domainAxis.setLowerMargin(0.03f);
//这里设置横轴标签可显示行数,在数据集的横轴字符串上用\n可实现标签字符垂直
domainAxis.setMaximumCategoryLabelLines(255);
domainAxis.setCategoryLabelPositionOffset(3);
return chart;
}
/**
* 程序入口
*
* @param args
*/
public static void main(String[] args) {
MyBarPic demo = new MyBarPic("FirstPic");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
/**
*
* 保存为文件
*
* @param chart 图片对象
* @param outputPath 保存路径
* @param weight 宽
* @param height 高
*/
public static void saveAsFile(JFreeChart chart, String outputPath,
int weight, int height) {
FileOutputStream out = null;
try {
File outFile = new File(outputPath);
if (!outFile.getParentFile().exists()) {
outFile.getParentFile().mkdirs();
}
out = new FileOutputStream(outputPath);
//保存为JPEG
ChartUtilities.writeChartAsJPEG(out,chart,800,600);
out.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
}
}
}
}
}
分享到:
相关推荐
JFreeChart 是一个强大的 Java 图表库,用于生成各种类型的图表,包括饼图、柱状图、线形图、区域图和甘特图等。它是一个开源项目,可以在服务端生成图表的图片,便于在浏览器上动态显示,尤其适用于B/S架构的应用。...
JFreeChart是Java领域中一个广泛使用的开源库,它提供了丰富的图表类型,如柱状图、饼图、线图、散点图等,使得开发者能够方便地创建高质量的可视化效果。 JFreeChart的主要特点包括: 1. **图表类型丰富**:...
JFreeChart 是一个开源的Java库,用于生成高质量的图表,包括线图、饼图、柱状图、散点图等,广泛应用于报表、数据分析和可视化应用中。本资料大全基于JFreeChart 1.0.13版本,包含了详尽的JavaDocs文档,是学习和...
通过集成JFreeChart,JasperReports可以生成各种统计图表,如柱状图、饼图、线图等。在报表中插入图表,可以帮助用户更直观地理解数据分布和趋势。 在导出方面,JasperReports支持多种输出格式。HTML格式适合在网页...
JFreeChart是一个强大的Java图表库,能够生成多种类型的图表,如柱状图、饼图、线图、散点图等,适用于各种数据可视化需求。在JavaWeb项目中,JFreeChart可以通过生成图像流并在JSP页面上显示,或者将图表保存为静态...
Java提供了多种库用于数据可视化,例如JFreeChart,它能够创建各种类型的图表,包括柱状图、饼图等,非常适合用于显示单词频率。使用JFreeChart,你需要创建一个`CategoryDataset`对象来存储数据,再创建对应的`...
JFreeChart提供了丰富的图表类型,包括柱状图、饼图、线图等,可以轻松地将成绩数据转换成可视化图形。例如,我们可以通过创建CategoryDataset来组织数据,然后使用ChartFactory创建对应的图表,并最后将其嵌入到...
4. **数据可视化**:将测量结果以图表形式展示在画布上,可能涉及到折线图、柱状图等,需要了解基本的数据可视化原理。 5. **响应式设计**:确保界面在不同设备和屏幕尺寸上都能正常显示,可能需要用到媒体查询和...
接下来,可以创建一个`CategoryDataset`,其中包含你要可视化的数据,然后使用`JFreeChart`的`createBarChart()`方法创建柱状图: ```java DefaultCategoryDataset dataset = new DefaultCategoryDataset(); // ...
其次,JFreeChart是一个强大的Java库,用于创建各种类型的图表,如折线图、柱状图、饼图和散点图等,对于数据分析和展示至关重要。在第11章中,你可能学习了如何使用JFreeChart来生成动态的、交互式的图表。这涉及到...
图形化报表则进一步将数据以图形的形式展示,如柱状图、饼图、折线图等,使得数据趋势和关系一目了然。在JavaWeb环境中,这种报表通常用于后台管理系统,帮助管理者监控业务指标、分析数据变化。 实现JavaWeb中的...
JFreeChart是我们在报表制作中使用的工具,它是Java平台上一个强大的图表库,可以生成各种类型的图表,包括柱状图、饼图、线图、散点图等。在SSH框架下,我们可以结合JFreeChart来创建动态的、可视化的报表: 1. **...
数据可视化工具和库,如Java的JFreeChart或Scala的Breeze-Viz,可以用于创建各种图表,如折线图、柱状图、散点图等。学习如何结合使用数据结构、算法和可视化技术,可以增强我们分析和解释大量数据的能力。 综上所...
- 程序能够生成柱状图和饼图,对成绩进行可视化分析。 - 可能使用Java的`JFreeChart`库或者其他图形库生成图表,并在新的窗口中显示。 6. **查询与排序**: - 用户可以通过输入学号、姓名或成绩的片段进行模糊...
- **实现思路**:连接数据库获取数据,使用Java Swing/AWT构建图形界面,借助图表库绘制柱状图、折线图、饼图等。 **3. 电子英汉词典** - **知识点**:数据库设计与操作、图形界面构建。 - **技术栈**:JDBC、Java...
`Chart`部分提供了创建各种图表的能力,如折线图、柱状图、饼图等;而`Table`部分则处理数据的展示和操作,可以用来创建复杂的表格布局。 **图表绘制** JCommon的图表功能是基于Apache Batik SVG库的,它允许...
对于Java实现统计图表,可以利用JFreeChart库,它提供了一个丰富的API来创建各种类型的图表,包括柱状图、折线图、饼图等。通过设置数据集,配置图表属性,可以生成美观且具有专业级别的统计图表。 在实际应用中,...