JfreeChart的最常用的制图代码实例(饼图,柱图,SeriesChart,折线图)附带工程源码。...

最近在一个项目中需要用到制图功能,经过一段时间的选择最终使用了JfreeChart。经过使用一段时间后发现JfreeChart功能非常强大,基本上可以满足现在项目中涉及到到的需求。JfreeChart简单容易上手,但是对于新手来说要必须去话大量的时间去了解每个类型的图表对象应该对应哪些 Axis、Plot、Renderer 类,并且必须非常熟悉这些类的构造函数中每个参数的具体含义。我觉得这一点是新手在短时间内很难做到,需要经过长时间的磨练,不断的在项目中实践和尝试。才能在项目中把JfreeChart的功能发挥到极致。

 

本文是为刚接触JfreeChart的新手准备的,其中一本分代码是我刚入门时在网上搜集的,都是一些最常用的chart种类。我觉得这些代码,给我掌握JfreeChart提供了非常大的帮助。于是就花了一些时间重新整理了一下,把他们发布出来,帮助那些需要的人。

 

在本文中涉及到了一下集中最常用的Chart格式:

PieChartDemo

3D-PieChartDemo

BarChartDemo

3D-BarChartDemo

TimeSeriesChart

LineChartDemo

3D-LineChartDemo

 

主要Code:

/**   
 * <b>项目名:</b>系统项目名称<br/>  
 * <b>包名:</b>com.jfreechartdemo.chart<br/>  
 * <b>文件名:</b>CreateCharts.java<br/>  
 * <b>版本信息:</b><br/>  
 * <b>日期:</b>Jun 8, 2011-5:48:18 PM<br/>  
 * <b>Copyright (c)</b> 2011XX公司-版权所有<br/>  
 *    
 */
package com.jfreechartdemo.chart;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Random;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.labels.StandardPieToolTipGenerator;
import org.jfree.chart.labels.StandardXYItemLabelGenerator;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;

import org.jfree.ui.TextAnchor;
import org.jfree.util.Rotation;

/**
 * @author 016540
 * 
 */
public class CreateCharts {

	/**
	 * Create pie chart
	 * 
	 * @param title
	 * @param is3D
	 * @return
	 */
	public static JFreeChart createPieChart(String title, boolean is3D) {
		JFreeChart chart = null;
		if (is3D) {
			chart = ChartFactory.createPieChart3D(title, // 图表标题
					pieDataset(), // 数据集
					true, // 是否显示图例
					true, // 是否显示工具提示
					true // 是否生成URL
					);
		} else {
			chart = ChartFactory.createPieChart(title, // 图表标题
					pieDataset(), // 数据集
					true, // 是否显示图例
					true, // 是否显示工具提示
					true // 是否生成URL
					);
		}

		// 设置标题字体,为了防止中文乱码:必须设置字体
		chart.setTitle(new TextTitle(title, new Font(" 黑体 ", Font.ITALIC, 22)));
		// 设置图例的字体,为了防止中文乱码:必须设置字体
		chart.getLegend().setItemFont(new Font(" 黑体 ", Font.BOLD, 12));

		// 获取饼图的Plot对象(实际图表)
		PiePlot plot = (PiePlot) chart.getPlot();
		// 图形边框颜色
		plot.setBaseSectionOutlinePaint(Color.orange);
		// 图形边框粗细
		plot.setBaseSectionOutlineStroke(new BasicStroke(0.0f));
		// 设置饼状图的绘制方向,可以按顺时针方向绘制,也可以按逆时针方向绘制
		plot.setDirection(Rotation.ANTICLOCKWISE);
		// 设置绘制角度(图形旋转角度)
		plot.setStartAngle(70);
		// 设置突出显示的数据块
		// plot.setExplodePercent("One", 0.1D);
		// 设置背景色透明度
		plot.setBackgroundAlpha(0.7F);
		// 设置前景色透明度
		plot.setForegroundAlpha(0.65F);
		// 设置区块标签的字体==为了防止中文乱码:必须设置字体
		plot.setLabelFont(new Font(" 宋体 ", Font.PLAIN, 12));
		// 扇区分离显示,对3D图不起效
		if (is3D)
			plot.setExplodePercent(pieDataset().getKey(3), 0.1D);
		// 图例显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
		plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
				" {0}:{1}\r\n({2}) ", NumberFormat.getNumberInstance(),
				new DecimalFormat(" 0.00% ")));
		// 指定显示的饼图为:圆形(true) 还是椭圆形(false)
		plot.setCircular(true);
		// 没有数据的时候显示的内容
		plot.setNoDataMessage(" 找不到可用数据 ");

		// 设置鼠标悬停提示
		plot.setToolTipGenerator(new StandardPieToolTipGenerator());
		// 设置热点链接
		// plot.setURLGenerator(new StandardPieURLGenerator("#"));

		return chart;

	}

	/**
	 * Create data set of pieChart
	 * 
	 * @return
	 */
	private static DefaultPieDataset pieDataset() {

		DefaultPieDataset pieDataSet = new DefaultPieDataset();
		pieDataSet.setValue("苹果", 100);
		pieDataSet.setValue("梨子", 200);
		pieDataSet.setValue("葡萄", 365);
		pieDataSet.setValue("香蕉", 385);
		pieDataSet.setValue("荔枝", 512);

		return pieDataSet;
	}

	/**
	 * Create bar chart
	 * 
	 * @param title
	 * @param is3D
	 * @return
	 */
	@SuppressWarnings("deprecation")
	public static JFreeChart createBarChart(String title, boolean is3D) {
		JFreeChart chart = null;
		BarRenderer renderer = null;

		if (is3D) {
			chart = ChartFactory.createBarChart3D(title, // 图表标题
					"水果", // 目录轴的显示标签
					"产量", // 数值轴的显示标签
					barChartDataset(), // 数据集
					PlotOrientation.VERTICAL, // 图表方向:水平、垂直
					true, // 是否显示图例(对于简单的柱状图必须是 false)
					false, // 是否生成工具
					false // 是否生成 URL 链接
					);

			// 3D柱图的呈现器
			renderer = new BarRenderer3D();
			renderer
					.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
			renderer.setItemLabelFont(new Font(" 黑体 ", Font.PLAIN, 12));
			renderer.setItemLabelsVisible(true);

			// 3D柱子上不能正常显示数字
			// 注意:如果数值太大切前面的柱子低于后面的柱子,那么前面的那个数值将被挡住,所以将下面方法中的0该为-值
			ItemLabelPosition itemLabelPositionFallback = new ItemLabelPosition(
					ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT,
					TextAnchor.HALF_ASCENT_LEFT, -1.3D);
			// 设置不能正常显示的柱子label的position
			renderer
					.setPositiveItemLabelPositionFallback(itemLabelPositionFallback);
			renderer
					.setNegativeItemLabelPositionFallback(itemLabelPositionFallback);

		} else {
			chart = ChartFactory.createBarChart(title, // 图表标题
					"水果", // 目录轴的显示标签
					"产量", // 数值轴的显示标签
					barChartDataset(), // 数据集
					PlotOrientation.VERTICAL, // 图表方向:水平、垂直
					true, // 是否显示图例(对于简单的柱状图必须是 false)
					false, // 是否生成工具
					false // 是否生成 URL 链接
					);
			// 柱图的呈现器
			renderer = new BarRenderer();
			renderer.setIncludeBaseInRange(true); // 显示每个柱的数值,并修改该数值的字体属性
			renderer
					.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
			renderer.setBaseItemLabelsVisible(true);

		}

		// 设置图片背景
		// chart.setBackgroundPaint(Color.PINK);
		// 为了防止中文乱码:必须设置字体
		chart.setTitle(new TextTitle(title, new Font(" 黑体 ", Font.PLAIN, 22)));
		LegendTitle legend = chart.getLegend(); // 获取图例
		legend.setItemFont(new Font(" 宋体 ", Font.BOLD, 12)); // 设置图例的字体,防止中文乱码
		CategoryPlot plot = (CategoryPlot) chart.getPlot(); // 获取柱图的Plot对象(实际图表)
		// 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)
		plot.setBackgroundPaint(new Color(255, 255, 204));
		plot.setForegroundAlpha(0.65F); // 设置前景色透明度
		// 设置横虚线可见
		plot.setRangeGridlinesVisible(true);
		// 虚线色彩
		plot.setRangeGridlinePaint(Color.gray);

		ValueAxis rangeAxis = plot.getRangeAxis();
		// 设置最高的一个Item与图片顶端的距离
		rangeAxis.setUpperMargin(0.2);
		// 设置最低的一个Item与图片底端的距离
		rangeAxis.setLowerMargin(0.3);

		CategoryAxis domainAxis = plot.getDomainAxis(); // 获取x轴
		domainAxis.setMaximumCategoryLabelWidthRatio(1.0f); // 横轴上的 Lable 是否完整显示
		domainAxis.setLabelFont(new Font(" 宋体 ", Font.TRUETYPE_FONT, 14)); // 设置字体,防止中文乱码
		domainAxis.setTickLabelFont(new Font(" 宋体 ", Font.BOLD, 12)); // 轴数值
		// h.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 45度倾斜
		plot.getRangeAxis().setLabelFont(
				new Font(" 宋体 ", Font.TRUETYPE_FONT, 14)); // Y轴设置字体,防止中文乱码

		renderer.setBaseOutlinePaint(Color.BLACK); // 设置柱子边框颜色
		renderer.setDrawBarOutline(true); // 设置柱子边框可见
		renderer.setSeriesPaint(0, Color.YELLOW); // 设置每个柱的颜色
		renderer.setSeriesPaint(1, Color.green);
		renderer.setSeriesPaint(2, Color.RED);
		renderer.setSeriesPaint(3, Color.CYAN);
		renderer.setSeriesPaint(5, Color.ORANGE);
		renderer.setSeriesPaint(4, Color.MAGENTA);
		renderer.setSeriesPaint(6, Color.DARK_GRAY);
		renderer.setSeriesPaint(7, Color.PINK);
		renderer.setSeriesPaint(8, Color.black);
		renderer.setItemMargin(0.1); // 设置每个地区所包含的平行柱的之间距离
		plot.setRenderer(renderer); // 给柱图添加呈现器
		plot.setForegroundAlpha(0.7f); // 设置柱的透明度
		// renderer.setMaximumBarWidth(0.2); // 设置柱子宽度
		// renderer.setMinimumBarLength(0.6); // 设置柱子高度
		// 设置横坐标显示位置(默认是下方);
		// plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
		// 设置纵坐标显示位置(默认是左方)
		// plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
		// 没有数据的时候显示的内容
		plot.setNoDataMessage(" 找不到可用数据 ");
		return chart;

	}

	/**
	 * 获取一个演示用的组合数据集对象
	 * 
	 * @return
	 */
	private static CategoryDataset barChartDataset() {
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(100, "北京", "苹果");
		dataset.addValue(100, "上海", "苹果");
		dataset.addValue(100, "广州", "苹果");
		dataset.addValue(200, "北京", "梨子");
		dataset.addValue(200, "上海", "梨子");
		dataset.addValue(200, "广州", "梨子");
		dataset.addValue(300, "北京", "葡萄");
		dataset.addValue(300, "上海", "葡萄");
		dataset.addValue(300, "广州", "葡萄");
		dataset.addValue(400, "北京", "香蕉");
		dataset.addValue(400, "上海", "香蕉");
		dataset.addValue(400, "广州", "香蕉");
		dataset.addValue(500, "北京", "荔枝");
		dataset.addValue(500, "上海", "荔枝");
		dataset.addValue(500, "广州", "荔枝");
		return dataset;
	}

	/**
	 * Create time series chart
	 * @param title
	 * @param subtitleStr
	 * @param range
	 * @param isAreaText
	 * @param areaText
	 * @param lowpress
	 * @param uperpress
	 * @return
	 */
	public static JFreeChart createSeriesChart(String title,
			String subtitleStr, String range, boolean isAreaText,
			String areaText, double lowpress, double uperpress) {

		// 时间曲线元素
		// JFreeChart chart =
		// ChartFactory.createTimeSeriesChart("标题","x轴标志","y轴标志","设置数据",是否显示图形,是否进行提示,是否配置报表存放地址);
		JFreeChart chart = ChartFactory.createTimeSeriesChart(title, null,
				range, createTimeTimeSeriesDataset(), true, true, false);

		if (subtitleStr != null) {
			TextTitle subtitle = new TextTitle(subtitleStr, new Font("黑体",
					Font.BOLD, 12));
			chart.addSubtitle(subtitle);
		}

		// 设置日期显示格式
		XYPlot plot = chart.getXYPlot();
		// XY軸對象
		DateAxis axis = (DateAxis) plot.getDomainAxis();
		axis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM-dd"));
		// 设置标题的颜色
		chart.setTitle(new TextTitle(title, new Font("黑体", Font.ITALIC, 22)));
		LegendTitle legend = chart.getLegend(); // 获取图例
		legend.setItemFont(new Font(" 宋体 ", Font.BOLD, 12)); // 设置图例的字体,防止中文乱码
		// 在這裡設置的是漸變色
		chart.setBackgroundPaint(new GradientPaint(0, 0, Color.white, 0, 1000,
				Color.blue));

		//设置Y轴字体
		plot.getRangeAxis().setLabelFont(
				new Font(" 宋体 ", Font.TRUETYPE_FONT, 14)); // Y轴设置字体,防止中文乱码
		plot.setOutlineStroke(new BasicStroke(1.5f)); // 边框粗细
		ValueAxis vaxis = plot.getDomainAxis();
		vaxis.setAxisLineStroke(new BasicStroke(1.5f)); // 坐标轴粗细
		vaxis.setAxisLinePaint(new Color(215, 215, 215)); // 坐标轴颜色
		vaxis.setLabelPaint(new Color(10, 10, 10)); // 坐标轴标题颜色
		vaxis.setTickLabelPaint(new Color(102, 102, 102)); // 坐标轴标尺值颜色
		vaxis.setLowerMargin(0.06d);// 分类轴下(左)边距
		vaxis.setUpperMargin(0.14d);// 分类轴下(右)边距,防止最后边的一个数据靠近了坐标轴。
		plot.setNoDataMessage("找不到可用数据");// 没有数据时显示的文字说明。

		// 渲染
		XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) plot
				.getRenderer();
		// 第一条折线的颜色
		xylineandshaperenderer.setBaseItemLabelsVisible(true);
		xylineandshaperenderer.setSeriesFillPaint(0, new Color(127, 128, 0));
		xylineandshaperenderer.setSeriesPaint(0, new Color(127, 128, 0));
		xylineandshaperenderer.setSeriesShapesVisible(0, true);
		xylineandshaperenderer.setSeriesShapesVisible(1, true);
		xylineandshaperenderer.setSeriesShapesVisible(2, true);
		xylineandshaperenderer.setSeriesShapesVisible(3, true);
		xylineandshaperenderer.setSeriesShapesVisible(4, true);
		// 折线的粗细调
		StandardXYToolTipGenerator xytool = new StandardXYToolTipGenerator();
		xylineandshaperenderer.setToolTipGenerator(xytool);
		xylineandshaperenderer.setStroke(new BasicStroke(1.5f));
		// 显示节点的值
		xylineandshaperenderer.setBaseItemLabelsVisible(true);
		xylineandshaperenderer
				.setBasePositiveItemLabelPosition(new ItemLabelPosition(
						ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
		xylineandshaperenderer
				.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());
		xylineandshaperenderer.setBaseItemLabelPaint(new Color(102, 102, 102));// 显示折点数值字体的颜色

		ValueAxis rangeAxis = plot.getRangeAxis();
		// 设置最高的一个Item与图片顶端的距离
		rangeAxis.setUpperMargin(0.2);
		// 设置最低的一个Item与图片底端的距离
		rangeAxis.setLowerMargin(0.3);
//		// 在图表中加区域加区域
//		if (isAreaText) {
//			lowpress = 62;
//			uperpress = 400;
//			IntervalMarker intermarker = new IntervalMarker(lowpress, uperpress);
//			intermarker.setPaint(Color.decode("#66FFCC"));// 域顏色
//			intermarker.setLabelFont(new Font("SansSerif", 41, 14));
//			intermarker.setLabelPaint(Color.RED);
//			intermarker.setLabel(areaText);
//			if (createTimeTimeSeriesDataset() != null) {
//				plot.addRangeMarker(intermarker, Layer.BACKGROUND);
//			}
//		}
		return chart;
	}

	/**
	 * The data set of time Series needed
	 * @return
	 */
	private static TimeSeriesCollection createTimeTimeSeriesDataset() {
		TimeSeriesCollection dataset = new TimeSeriesCollection();
		
		//第一条时序线
		TimeSeries pop1 = new TimeSeries("水果零售销售趋势", Day.class);
		pop1.add(new Day(10, 1, 2004), 100);
		pop1.add(new Day(10, 2, 2004), 150);
		pop1.add(new Day(10, 3, 2004), 250);
		pop1.add(new Day(10, 4, 2004), 275);
		pop1.add(new Day(10, 5, 2004), 325);
		pop1.add(new Day(10, 6, 2004), 425);
		// 创建第二条时序线
		TimeSeries pop2 = new TimeSeries("蔬菜零售销售趋势", Day.class);
		pop2.add(new Day(20, 1, 2004), 200);
		pop2.add(new Day(20, 2, 2004), 250);
		pop2.add(new Day(20, 3, 2004), 450);
		pop2.add(new Day(20, 4, 2004), 475);
		pop2.add(new Day(20, 5, 2004), 125);
		pop2.add(new Day(20, 6, 2004), 150);
		
		// 创建第三天条时序线
		TimeSeries pop3 = new TimeSeries("主食零售销售趋势", Day.class);
		pop3.add(new Day(20, 1, 2004), 200);
		pop3.add(new Day(20, 2, 2004), 250);
		pop3.add(new Day(20, 3, 2004), 450);
		pop3.add(new Day(20, 4, 2004), 200);
		pop3.add(new Day(20, 5, 2004), 125);
		pop3.add(new Day(20, 6, 2004), 150);

		dataset.addSeries(pop1);
		dataset.addSeries(pop2);
		dataset.addSeries(pop3);
		return dataset;
		
	}
	
	@SuppressWarnings("deprecation")
	public static JFreeChart createLineChart(String titleStr ,boolean is3D){
		  JFreeChart chart=null;  
	        // JFreeChart对象 参数:标题,目录轴显示标签,数值轴显示标签,数据集,是否显示图例,是否生成工具,是否生成URL连接  
	          
	        if(!is3D)
	        {
	        //平面
	        chart = ChartFactory.createLineChart(titleStr,"时间/月份", "销售数量",   
	        		getLineChartDataSet(), PlotOrientation.VERTICAL, true, true, false);  
	        }else{	        	
	        //3D  
            chart = ChartFactory.createLineChart3D(titleStr,"时间/月份", "销售数量",   
            		getLineChartDataSet(), PlotOrientation.VERTICAL, true, true, false);  
	        }
	        
	        //设置整张图表的背景也就是图片的背景
	        chart.setBackgroundPaint(Color.yellow.white);  
	        chart.setBorderVisible(true);// 边框可见  
	        
	        TextTitle title = new TextTitle(titleStr, new Font("宋体", Font.BOLD, 20));  
	        // 解决曲线图片标题中文乱码问题  
	        chart.setTitle(title);  
	        //解决图表底部中文乱码问题  
	        chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));  
	        
	        //设置折线图的背景还有刻度线
	        CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();  
	        categoryplot.setBackgroundPaint(Color.pink);  
	        categoryplot.setRangeGridlinesVisible(true);
	        categoryplot.setRangeGridlinePaint(Color.green);  
	          
	        // 设置Y轴  
	        NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();  
	        setNumberAxis(numberaxis);  
	          
	        // 设置x轴  
	        CategoryAxis domainAxis = (CategoryAxis) categoryplot.getDomainAxis();  
	        setDomainAxis(domainAxis);  
	          
	          
	        LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot  
	                .getRenderer();
	        
	    	// 3D柱子上不能正常显示数字
			// 注意:如果数值太大切前面的柱子低于后面的柱子,那么前面的那个数值将被挡住,所以将下面方法中的0该为-值
			ItemLabelPosition itemLabelPositionFallback = new ItemLabelPosition(
					ItemLabelAnchor.OUTSIDE1, TextAnchor.BASELINE_CENTER,
					TextAnchor.BASELINE_CENTER, -1.0D);
			// 设置不能正常显示的柱子label的position
			lineandshaperenderer
					.setPositiveItemLabelPosition(itemLabelPositionFallback);
			lineandshaperenderer
					.setNegativeItemLabelPosition(itemLabelPositionFallback);
	        // 数据点  
	        // series 点(即数据点)可见  
	        lineandshaperenderer.setBaseShapesVisible(true);  
	        // 显示数据点的数据  
	        lineandshaperenderer  
	                .setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());   
	        // 显示折线图点上的数据  
	        lineandshaperenderer.setBaseItemLabelsVisible(true);  
	        return chart;  
	}
	
	
	 /** 
     * 设置X轴 
     * @param domainAxis 
     */  
    private static void setDomainAxis(CategoryAxis domainAxis){  
        // 解决x轴坐标上中文乱码  
        domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));  
        // 解决x轴标题中文乱码  
        domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));  
        // 用于显示X轴刻度  
        domainAxis.setTickMarksVisible(true);  
        //设置X轴45度  
        domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);  
    }  
      
    /** 
     * 设置Y轴 
     * @param numberAxis 
     */  
    private static void setNumberAxis(NumberAxis numberaxis){  
        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());  
        // 是否显示零点  
        numberaxis.setAutoRangeIncludesZero(true);  
        numberaxis.setAutoTickUnitSelection(false);  
        // 解决Y轴标题中文乱码  
        numberaxis.setLabelFont(new Font("sans-serif", Font.PLAIN, 14)); 
        // 自动设置Y轴的数值
        numberaxis.setAutoRange(true);
        numberaxis.setAutoTickUnitSelection(true);
        // numberaxis.setTickUnit(new NumberTickUnit(10000));//Y轴数据间隔  
    }  
	
	
	/** 
     * 产生数据源 
     *  
     * @return 
     */  
    private static DefaultCategoryDataset getLineChartDataSet() {  
        DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();  
        int i = 0;  
        Random rand = new Random();  
        while (i < 6) {  
            for (int j = 1; j <= 12; j++) {  
                defaultcategorydataset.addValue((rand.nextDouble()*rand.nextInt(10000)), "产品"+i,  
                        "第"+j+"月份");  
            }  
            i++;  
        }  
        return defaultcategorydataset;  
    }  
	
	
	
	

}

 

只上传了部分Chart的截图!!

 

附件里面是整个demo 工程的源码和打包好的war包。工程包含所需要的Jar包,可以直接部署运行起来,也欢迎大家来逐步完善。

Screenshot_2026-11-03-16-23-09-34.jpg 立即下载

相关推荐

研发流程后端开发工具,提示功能开发效率

后端开发工具

利用jfreechart生成柱状图(代码示例)

1.引入maven依赖。

mischen520的博客 1142

机器人具有扰动抑制功能的有限时间基于方位角的领航者-跟随者编队控制(Matlab代码实现)

内容概要:本文档标题为《Plecs全桥LLC谐振变换器仿真模型.txt》,但实际内容并未涉及该主题的具体技术细节或仿真建模过程。相反,文档实质是一份由科研服务团队发布的跨学科资源目录,集中展示了大量基于Matlab、Simulink、Python、PSCAD等平台实现的科研项目与算法开发案例,涵盖电力系统、无人机路径规划、微电网优化、状态估计、信号处理、车间调度、图像处理、通信技术、雷达追踪、智能优化算法等多个工程技术领域。每个条目以“【】”标注研究主题,并注明“Matlab代码实现”“Python代码实现”等形式,表明其为可提供技术支持与代码资源的服务项目。文档末尾频繁出现“完整资源下载:公众号——荔枝科研社”及百度网盘链接,明确体现出其作为科研辅助服务推广与引流工具的功能属性。; 适合人群:面向电气工程、自动化、控制科学与工程、计算机科学、智能制造、新能源、航空航天、通信工程及相关交叉学科的研究生、高校教师、科研人员及企业研发工程师。; 使用场景及目标:①为科研人员提供课题选题、技术路线设计与算法实现的参考范例;②辅助学生或研究人员完成课程设计、毕业论文、项目仿真与算法复现任务;③作为第三方技术服务团队的能力展示目录,便于潜在客户快速了解其在多领域提供的定制化仿真与算法开发服务范围。; 阅读建议:此文档并非传统意义上的学术论文或技术教程,而是一份高度碎片化、广告性质浓厚的资源索引清单。读者应忽略其误导性的文件名,将其视为一个综合性科研技术服务目录,重点关注自身研究方向相关的条目,并通过文末提供的公众号或网盘链接进一步获取具体代码与资料。同时,需注意甄别资源的技术质量、原创性与适用性,避免盲目依赖外部服务。

JFreeChart绘制柱状图

利用java语言实现柱状图的显示,以及动态刷新。

qinghai5068的专栏 1007

Redhawk-SC输入件配置中的5个常见错误及解决方法

本文针对Redhawk-SC功耗与可靠性签核工具,深入剖析了输入件配置中工艺文件错配、DEF文件路径、时序文件格式、电源网络模型及宏模型处理这5个最常见且棘手的错误。文章提供了资深工程师验证过的实战解决方案与检查清单,旨在帮助用户规避风险,提升配置效率与分析准确性,确保芯片签核流程的顺利进行。

earth的博客 233

【Attention Is All You Need】Transformer模型精读

Attention Is All You Need》这篇论文奠定了Transformer模型的基础,为深度学习的发展提供了新的方向。Transformer通过自注意力机制和并行化处理显著提升了计算效率和模型性能。然而,Transformer的广泛应用也带来了新的挑战,如计算资源的消耗和对长序列的处理能力等。随着技术的不断发展,研究人员已经提出了诸如Efficient Transformer、Reformer等变种,旨在提升Transformer的效率和适应性。

Lewiz_124的博客 1499

JFreeChart统计表(柱状图)代码块

import org.jfree.chart.*; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.CategoryDataset; import org.jfr

weixin_46407722的博客 344

Centos7.6下安装Zabbix6

一、

Overmaster博客 1906

JFreeChart柱图代码

直方条形图常常被用来显示表列数据。如下表,为一个简单的两行、三列数据。   Colnums1 Colnums2 Colnums3 Row1 1.0 5.0 3.0 R

dcsoft_nick的专栏 750

5分钟搞定CST周期性结构仿真:共面波导色散曲线快速生成技巧

本文提供了一套在CST Studio Suite中快速仿真周期性结构并生成色散曲线的标准化流程。针对共面波导设计,重点解析了周期性边界条件的核心设置、本征模求解器(JDM算法)的优化技巧,以及通过参数扫描与后处理模板实现自动化,旨在帮助射频与微波工程师在5分钟内高效完成关键性能验证。

blue的专栏 1249

从SPICE到电磁场:非线性器件在CST场路协同仿真中的建模艺术

本文深入探讨了非线性器件在CST场路协同仿真中的建模技术,重点分析了SPICE模型与电磁场仿真的集成方法。通过对比线电流模型和面电流模型的优缺点,结合实际案例展示了二极管阵列在电磁散射调控中的应用,为工程师提供了优化仿真精度与效率的实用技巧。

pandas7gardener的博客 199

JFreeChart: 基本柱状图

 2.1. 简单柱状图  首先为柱状图准备数据,柱状图必须使用CategoryDataset,这里我们使用DefaultCategoryDataset。DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, "Spring Security", "Jan"); dataset.addValue(200, "jBPM 4", "Jan"); dataset.addValue(300, "Ext J

originalCsdn的专栏 7969

ardupilot如何让官网支持自己的硬件方案

本节主要记录ardupilot中如何让官网支持自己的硬件方案。参考1参考2。

陌城烟雨 159

JFreeChart 生成饼图(标准饼图、3D饼图)

1 Maven依赖 <!-- Hutool工具包 --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.6.2</version> </dependency

旭东怪的博客 2583

【OpenClaw企业级智能体实战】第11篇:制造业设备预测性维护实战——OpenClaw+DeepSeek+Prometheus从零搭建(附完整代码)

本文聚焦制造业设备预测性维护的核心痛点,基于OpenClaw v2026.2.1、DeepSeek智能诊断、Prometheus监控等工具,拆解“设备状态监控→智能故障诊断→预测性维护”三大核心场景。从技术原理、算法构建、实操流程到完整代码实现,提供“数据采集→模型训练→智能调度→自动处置”的全链路方案。方案遵循工业安全规范,采用“只读优先、权限最小化”原则,适配中小制造企业落地需求。通过虚拟案例验证,可使设备非计划停机时间下降65%、平均修复时间缩短47%,既适合新手快速入门,也为进阶读者提供架构优化思路

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 606

第11.4节 混合储能系统能量管理

混合储能系统(HESS)的能量管理策略采用分层架构实现多时间尺度优化:调度层(小时级)进行经济优化,协调层(秒级)基于频率分解分配功率,执行层(毫秒级)实现快速跟踪。深度强化学习(DRL)方法通过定义状态空间、动作空间和多目标奖励函数,能有效处理系统不确定性和多目标优化问题。HESS性能评估需综合技术指标(如调节性能Kp值、设备寿命指标)和经济指标(净现值NPV、平准化储能成本LCOS),并遵循"建模-仿真-实验"的闭环流程。

技术工作者 246

JFreeChart饼图

在饼图中,每个扇区的弧长成正比它代表的数量。本章演示了如何使用JFreeChart 从一个给定的业务数据创建饼图。 业务数据 下面的例子描述了移动销售饼图。以下是不同移动品牌和销售(每天单位)列表。 S.N. 手机品牌 销售(天) 1 Iphone 5S 20 2 Samsung Gra

一个有趣、有料、有内涵的地方! 1243

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

JfreeChart API浏览

JFreeChart类: void setAntiAlias(boolean flag) 字体模糊边界 void setBackgroundImage(Image image) 背景图片 void setBackgroundImageAlignment(int alignment) 背景图片对齐方式(参数常量在org.jfree.ui.Align类中定义) void setBackgroundIm

百年一梦 883

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jfreeChart饼状图图参数设置

is.CategoryAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.renderer.category.BarRen

986

JFreeChart 生成双Y轴柱形图

** ---------------------- 中文乱码问题处理 Start ------------------------------- *//** ---------------------- 中文乱码问题处理 End ------------------------------- */chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));dataset.addValue(1000, "长度和", "COPPER");

2301_76307772的博客 992

JFreeChart常用图表使用

一、饼图 // 数据 DefaultPieDataset dataSet = new DefaultPieDataset(); dataSet.setValue("2020年", 26542);// 图例-值 dataSet.setValue("2021年", 27542);// 图例-值 dataSet.setValue("2022年", 28542);// 图例-值 StandardChartTheme standard

qq_44872773的博客 1858

【JAVA图表】Jfreechart常用图表总结

柱状图: [java] view plain copy package chart;    import java.awt.Color;  import java.awt.Font;  import java.util.Map;  import java.util.Map.Entry;  import java.util.Set;    import org.jf

wangxiaopeng0329的博客 3538

C#使用chart控件设置Series名称显示的位置

打开chart1中的legends集合,找到其中的Docking和Alignment属性。

我的专栏 3万+

JFreeChart入门

1、什么是JFreeChart JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt ch

ryelqy的博客 420

JFreeChart| 图解JFreeChart中的折线图(LineChart)

前言 前面介绍了饼状图,柱状图,这里介绍下折线图,折线图和饼状图用法定义大致类似. 关于数据集 本文讲解的是JFreeChart创建折线图的内容。 根据数据集的不同,我可以将折线图分为以下几类: CategoryDataset: 普通的折线图,主要是domainAxis(X轴)可以为非数值 XYDataset: 数值类折线图,主要是domainAxis(X轴)一定...

YvesHe的专栏 1万+

jfreechart 图标各部分名字

图标各部分名字

216
上一篇: 侧边常用分享栏代码(分享到人人,开心,腾讯微博,新浪微博 等)
下一篇: JAVA六种加载属性文件(Properties file )的方法
maxabe
博客等级 码龄18年 8粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值