`
梦中有你
  • 浏览: 60677 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

jfreeChart圆柱状图详细设置

 
阅读更多

圆形柱状图,直接看代码(有详细注释)

BarChart3DCase.java

package com.graph.myself;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.text.DecimalFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
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.StandardCategoryToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.ui.GradientPaintTransformType;
import org.jfree.ui.StandardGradientPaintTransformer;
import org.jfree.ui.TextAnchor;
import com.graph.myself.CylinderRenderer;

/**
 * 3D直方图例子
 * @author zengfantian 
 *
 */
public class BarChart3DCase {
	
	/**
	 * 获取数据集
	 * 
	 * @return CategoryDataset
	 */
	private  CategoryDataset getDataSet() {
		
		CategoryDataset dataset = new DefaultCategoryDataset();
		// 同一种类型的数据放在一个数组元素中
		final double[][] data = new double[][] { 
				{ 967, 1164, 1463, 1793, 1933 },
				{ 2164, 3063, 3955, 4031, 6749 },
				{ 1028, 1357, 1203, 1392, 2316 } };
		// 横向说明
		final String[] rowKeys = { "发明", "实用新型", "外观设计" };
		// 横向坐标值
		final String[] columnKeys = { "2006年", "2007年", "2008年", "2009年", "2010年" };
		
		//用DatasetUtilities来构建所需要的数据对象
		dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys,data);
		return dataset;
	}
	
	/**
	 * 创建图表JfreeChart对象
	 * @param dataset 数据集
	 * @param title 图表标题
	 * @return 图表JFreeChart
	 */
	private  JFreeChart createChart(CategoryDataset dataset,String title) {
		
		//用ChartFactory来构建所需的Chart对象
		JFreeChart chart = ChartFactory.createStackedBarChart3D(
				title,  //图表标题
				"",//横向标签 
				"",//纵向标签 
				dataset, //数据集
				PlotOrientation.VERTICAL, // 图表方向:水平、垂直, 
				true,//是否显示图例(对于简单的柱状图必须是false) 
				true, //
				false //是否生成URL链接
				);
		
		chart = this.setChart(chart);
	    
		return chart;
	}
	
	/**
	 * 对X轴的设置
	 * 
	 * @param domainAxis
	 */
	private  void setXDomainAxis(CategoryAxis domainAxis) {

		Font labelFont = new Font("宋体", Font.CENTER_BASELINE, 12);
		domainAxis.setLowerMargin(0.1);// 设置距离图片左端距离此时为10%
		domainAxis.setUpperMargin(0.1);// 设置距离图片右端距离此时为百分之10

		domainAxis.setLabelFont(labelFont);// X轴标题
		domainAxis.setTickLabelFont(labelFont);// X轴数值

		domainAxis.setCategoryLabelPositionOffset(10);// 图表横轴与标签的距离(10像素)
		domainAxis.setCategoryMargin(0.2);// 横轴标签之间的距离20%

		// domainAxis.setMaximumCategoryLabelLines(1);
		// domainAxis.setMaximumCategoryLabelWidthRatio(0);

		domainAxis.setLabelFont(labelFont);// 轴标题
		domainAxis.setTickLabelFont(labelFont);// 轴数值

		// Lable(Math.PI/3.0)倾斜度
		// domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 3.0));

		domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);// 横轴上的 Lable 是否完整显示
	}

	
	/**
	  * 对Y轴的设置
	  *
	  * @param ValueAxis
	  */
	 private  void setYDomainAxis(ValueAxis valueAxis) {
	  Font labelFont = new Font("宋体", Font.CENTER_BASELINE, 12);
	  
	  valueAxis.setUpperMargin(0.1);// 设置最高的一个柱与图片顶端的距离(最高柱的10%)
	  valueAxis.setLowerMargin(0.15);// 设置最低的一个 Item 与图片底端的距离

	  valueAxis.setLabelFont(labelFont);// Y轴标题
	  valueAxis.setTickLabelFont(labelFont);// Y轴数值
	  // Lable水平显示
	  valueAxis.setLabelAngle(1.5);
	 
	 }
	

	/**
	 * 设置图表的颜色(渲染图表) 
	 * 每根柱子的详细设置(三维设置)
	 * 
	 * @param categoryPlot
	 */
	private void setRender(CategoryPlot plot) {

		// BarRenderer3D renderer = new BarRenderer3D(); //柱状渲染器
		CylinderRenderer renderer = new CylinderRenderer();//圆形渲染器
		renderer.setGradientPaintTransformer(new StandardGradientPaintTransformer(GradientPaintTransformType.CENTER_HORIZONTAL));
		renderer.setBaseOutlineStroke(new BasicStroke(0.3F));
		renderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());

		renderer.setBaseOutlinePaint(Color.red);// 边框颜色
		renderer.setSeriesPaint(0, new Color(155, 151, 255));// 设置柱的颜色

		renderer.setSeriesOutlinePaint(0, Color.BLACK);// 边框颜色
		renderer.setSeriesPaint(1, new Color(159, 49, 94));// 设置柱的颜色

		renderer.setSeriesOutlinePaint(0, Color.BLACK);// 边框颜色
		renderer.setSeriesPaint(2, new Color(253, 255, 199));// 设置柱的颜色

		renderer.setSeriesOutlinePaint(1, Color.red);// 边框为红色
		renderer.setItemMargin(0.1);// 组内柱子间隔为组宽的10%

		// 显示每个柱的数值,并修改该数值的字体属性
		renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
		// 注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题(3D的才需啊这句,2D的上面那句足矣)
		renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(
				ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
		renderer.setBaseItemLabelPaint(Color.BLUE);// 设置数值颜色,默认黑色

		renderer.setIncludeBaseInRange(true);
		renderer.setBaseItemLabelFont((new Font("黑体", Font.CENTER_BASELINE, 12)));// 12号黑体

		renderer.setBaseItemLabelPaint(Color.black);// 字体为黑色
		renderer.setBaseItemLabelsVisible(true);

		// 设置柱子宽度
		renderer.setMaximumBarWidth(0.05);
		// 设置柱子高度
		renderer.setMinimumBarLength(0.2);

		// 设置柱子边框可见
		// renderer.setDrawBarOutline(true);

		// 使用我们设计的效果
		plot.setRenderer(renderer);

	}
	 
	 /**
	  * 设置图表属性
	  * @param chart 需要设置的图表
	  * @return JFreeChart设置好的图表
	  */
	 private JFreeChart setChart(JFreeChart chart){
		   //设置消除字体的锯齿渲染
			//chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); 
		   // 设置Title和Legend的字体(不然会乱码)
		    chart.getTitle().setFont(new Font("宋体", Font.CENTER_BASELINE, 20));
			chart.getLegend().setItemFont(new Font("宋体", Font.CENTER_BASELINE, 12));
			
			// 获得图表区域对象
			CategoryPlot plot = chart.getCategoryPlot();
			
			//设置横虚线可见
			plot.setRangeGridlinesVisible(true);
			// 设置虚线色彩
			plot.setRangeGridlinePaint(Color.gray);
		    // 设置柱图背景色
		    plot.setBackgroundPaint(Color.white);
		    // 设置纵横坐标的显示位置
		    plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
		    plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
		   
		    // 数据轴精度
		    NumberAxis vn = (NumberAxis) plot.getRangeAxis();
		    // 设置刻度必须从0开始 
		    vn.setAutoRangeIncludesZero(true);
		    // 数据轴数据标签的显示格式
		    DecimalFormat df = new DecimalFormat("#0");
		    vn.setNumberFormatOverride(df); 

		    // 设置图表的横轴(X轴)
		    CategoryAxis domainAxis = plot.getDomainAxis();
		    this.setXDomainAxis(domainAxis);
			
		    // 设置图表的纵轴(Y轴)
		    ValueAxis valueAxis = plot.getRangeAxis();
		    this.setYDomainAxis(valueAxis);
			
		    // 设置图表的颜色
		    this.setRender(plot);
		    
		    return chart;
	 }
	 
	 /**
	  * 将图表保存到指定的路径
	  * @param filePath 图片文件保存路径
	  * @param chart 需要保存的图表
	  * @param width 图片的宽度
	  * @param height 图片高度
	  */
	 @SuppressWarnings("unused")
	private void saveChartAsJPG(String filePath, JFreeChart chart, int width,int height) {
		try {
			File file = new File(filePath);
			ChartUtilities.saveChartAsJPEG(file, chart, width, height);
			System.out.println("图表已生成到:" + filePath);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	 }

	 /**
	  * 在窗体中显示生成的图表
	  * @param chart 需要显示的图表
	  * @param frameTitle 窗体标题
	  */
	 private void displayChart(JFreeChart chart,String frameTitle) {
		// 将生成的报表放到预览窗口中
		ChartFrame preview = new ChartFrame(frameTitle, chart);
		preview.pack();
		preview.setLocationRelativeTo(null);
		preview.setVisible(true);
	 }
	
	 
	/**
	 * 测试函数
	 * @param args
	 */
	public static void main(String[] args) {
		BarChart3DCase barChartcase = new BarChart3DCase();
		CategoryDataset dataset = barChartcase.getDataSet();
		JFreeChart chart = barChartcase.createChart(dataset,"“十一五”时期天津市三种类型专利授权量");
		barChartcase.displayChart(chart,"“十一五”时期天津市三种类型专利授权量");
		//barChartcase.saveChartAsJPG("C:/jfreechartdemo/s.jpg", chart, 400, 300);
	}

}

 

 

CylinderRenderer.java(该类jfreechart的官方demo源码中有)

 

// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space 

package com.graph.myself;

import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.geom.*;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.CategoryItemEntity;
import org.jfree.chart.entity.EntityCollection;
import org.jfree.chart.labels.CategoryToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.CategoryItemRendererState;
import org.jfree.chart.urls.CategoryURLGenerator;
import org.jfree.data.category.CategoryDataset;
import org.jfree.ui.GradientPaintTransformer;

public class CylinderRenderer extends BarRenderer3D
{

	public CylinderRenderer()
	{
	}

	public CylinderRenderer(double d, double d1)
	{
		super(d, d1);
	}

	public void drawItem(Graphics2D graphics2d, CategoryItemRendererState categoryitemrendererstate, Rectangle2D rectangle2d, CategoryPlot categoryplot, CategoryAxis categoryaxis, ValueAxis valueaxis, CategoryDataset categorydataset, 
			int i, int j, int k)
	{
		Number number = categorydataset.getValue(i, j);
		if (number == null)
			return;
		double d = number.doubleValue();
		java.awt.geom.Rectangle2D.Double double1 = new java.awt.geom.Rectangle2D.Double(rectangle2d.getX(), rectangle2d.getY() + getYOffset(), rectangle2d.getWidth() - getXOffset(), rectangle2d.getHeight() - getYOffset());
		PlotOrientation plotorientation = categoryplot.getOrientation();
		double d1 = calculateBarW0(categoryplot, plotorientation, double1, categoryaxis, categoryitemrendererstate, i, j);
		double ad[] = calculateBarL0L1(d);
		if (ad == null)
			return;
		org.jfree.ui.RectangleEdge rectangleedge = categoryplot.getRangeAxisEdge();
		float f = (float)valueaxis.valueToJava2D(ad[0], double1, rectangleedge);
		float f1 = (float)valueaxis.valueToJava2D(ad[1], double1, rectangleedge);
		float f2 = Math.min(f, f1);
		float f3 = Math.abs(f1 - f);
		GeneralPath generalpath = new GeneralPath();
		java.awt.geom.Ellipse2D.Double double2 = null;
		if (plotorientation == PlotOrientation.HORIZONTAL)
		{
			generalpath.moveTo((float)((double)f2 + getXOffset() / 2D), (float)d1);
			generalpath.lineTo((float)((double)(f2 + f3) + getXOffset() / 2D), (float)d1);
			java.awt.geom.Arc2D.Double double3 = new java.awt.geom.Arc2D.Double(f2 + f3, d1, getXOffset(), categoryitemrendererstate.getBarWidth(), 90D, 180D, 0);
			generalpath.append(double3, true);
			generalpath.lineTo((float)((double)f2 + getXOffset() / 2D), (float)(d1 + categoryitemrendererstate.getBarWidth()));
			double3 = new java.awt.geom.Arc2D.Double(f2, d1, getXOffset(), categoryitemrendererstate.getBarWidth(), 270D, -180D, 0);
			generalpath.append(double3, true);
			generalpath.closePath();
			double2 = new java.awt.geom.Ellipse2D.Double(f2 + f3, d1, getXOffset(), categoryitemrendererstate.getBarWidth());
		} else
		{
			generalpath.moveTo((float)d1, (float)((double)f2 - getYOffset() / 2D));
			generalpath.lineTo((float)d1, (float)((double)(f2 + f3) - getYOffset() / 2D));
			java.awt.geom.Arc2D.Double double4 = new java.awt.geom.Arc2D.Double(d1, (double)(f2 + f3) - getYOffset(), categoryitemrendererstate.getBarWidth(), getYOffset(), 180D, 180D, 0);
			generalpath.append(double4, true);
			generalpath.lineTo((float)(d1 + categoryitemrendererstate.getBarWidth()), (float)((double)f2 - getYOffset() / 2D));
			double4 = new java.awt.geom.Arc2D.Double(d1, (double)f2 - getYOffset(), categoryitemrendererstate.getBarWidth(), getYOffset(), 0.0D, -180D, 0);
			generalpath.append(double4, true);
			generalpath.closePath();
			double2 = new java.awt.geom.Ellipse2D.Double(d1, (double)f2 - getYOffset(), categoryitemrendererstate.getBarWidth(), getYOffset());
		}
		Object obj = getItemPaint(i, j);
		if (getGradientPaintTransformer() != null && (obj instanceof GradientPaint))
		{
			GradientPaint gradientpaint = (GradientPaint)obj;
			obj = getGradientPaintTransformer().transform(gradientpaint, generalpath);
		}
		graphics2d.setPaint(((java.awt.Paint) (obj)));
		graphics2d.fill(generalpath);
		if (obj instanceof GradientPaint)
			graphics2d.setPaint(((GradientPaint)obj).getColor2());
		if (double2 != null)
			graphics2d.fill(double2);
		if (isDrawBarOutline() && categoryitemrendererstate.getBarWidth() > 3D)
		{
			graphics2d.setStroke(getItemOutlineStroke(i, j));
			graphics2d.setPaint(getItemOutlinePaint(i, j));
			graphics2d.draw(generalpath);
			if (double2 != null)
				graphics2d.draw(double2);
		}
		org.jfree.chart.labels.CategoryItemLabelGenerator categoryitemlabelgenerator = getItemLabelGenerator(i, j);
		if (categoryitemlabelgenerator != null && isItemLabelVisible(i, j))
			drawItemLabel(graphics2d, categorydataset, i, j, categoryplot, categoryitemlabelgenerator, generalpath.getBounds2D(), d < 0.0D);
		if (categoryitemrendererstate.getInfo() != null)
		{
			EntityCollection entitycollection = categoryitemrendererstate.getEntityCollection();
			if (entitycollection != null)
			{
				String s = null;
				CategoryToolTipGenerator categorytooltipgenerator = getToolTipGenerator(i, j);
				if (categorytooltipgenerator != null)
					s = categorytooltipgenerator.generateToolTip(categorydataset, i, j);
				String s1 = null;
				if (getItemURLGenerator(i, j) != null)
					s1 = getItemURLGenerator(i, j).generateURL(categorydataset, i, j);
				CategoryItemEntity categoryitementity = new CategoryItemEntity(generalpath.getBounds2D(), s, s1, categorydataset, categorydataset.getRowKey(i), categorydataset.getColumnKey(j));
				entitycollection.add(categoryitementity);
			}
		}
	}
}

 

 

效果图:



 

 

 希望本文对研究JfreeChart圆柱状图的朋友们有帮助。(需要官方开发文档、官方demo源码或是对jfreeChart有兴趣的朋友可以留下邮箱,我会把我搜集的jfreeChart研究资料发送至邮箱)

  • 大小: 75.5 KB
分享到:
评论
5 楼 allstar2012 2013-06-27  
609561800@qq.com  辛苦楼主发送一份给我!谢谢!
4 楼 allstar2012 2013-06-27  
比如上图中,如何让2006年下,3根不同颜色的柱子显示为一根!就像stackedbar一样,而不是分开。
3 楼 allstar2012 2013-06-27  
弄明白了 这个圆柱形的 设计起来还真是麻烦哦
2 楼 allstar2012 2013-06-27  
怎么设置柱状是圆形的还是方形的 ?
1 楼 allstar2012 2013-06-27  
感谢楼主无私分享!
现在正好用到这个东东。
不过你上面那个例子做出来是方形的,不是圆柱形的吧。

相关推荐

    基于S7-300PLC与MCGS6.2的饮料罐装生产线自动化控制系统设计,包含仿真、程序、IO表与电气原理,实现自动操作、灌装报警及瓶数记录功能 ,基于PLC的饮料罐装生产线控制系统设计 S7-30

    基于S7-300PLC与MCGS6.2的饮料罐装生产线自动化控制系统设计,包含仿真、程序、IO表与电气原理,实现自动操作、灌装报警及瓶数记录功能。,基于PLC的饮料罐装生产线控制系统设计。 S7-300PLC MCGS6.2仿真 仿真,程序,IO表,电气原理图,6500字说明。 实现功能有: (1)系统通过开关设定为自动操作模式,一旦启动,则传送带的驱动电机启动并一直保持到停止开关动作或罐装设备下的传感器检测到一个瓶子时停止;瓶子装满饮料后,传送带驱动电机必须自动启动,并保持到又检测到一个瓶子或停止开关动作。 (2)当瓶子定位在灌装设备下时,停顿1秒,罐装设备开始工作,灌装过程为5秒钟,罐装过程应有报警显示,5秒后停止并不再显示报警。 (2)用两个传感器和若干个加法器检测并记录空瓶数和满瓶数,一旦系统启动,必须记录空瓶和满瓶数,设最多不超过99999999瓶。 (4)可以手动对计数器清零(复位)。 ,关键词:S7-300PLC; MCGS6.2仿真; 传送带驱动电机; 传感器检测; 瓶装; 空瓶数; 满瓶数; 报警显示; 自动操作模式; 灌装设备。,基于S7-300PLC的饮料罐装

    python加密货币时间序列预测源码+数据集-最新出炉.zip

    python加密货币时间序列预测源码+数据集-最新出炉 加密货币分析: 对各种加密货币的数据进行分析和研究。可能会使用到从各种来源收集的数据,包括但不限于加密货币的价格、市值、交易量、交易时间等信息。 探索加密货币市场的趋势和模式,例如价格的波动情况、不同加密货币之间的相关性等。 数据处理与操作: 可能使用 Python 语言(Kaggle 上常用的数据分析语言),并运用一些数据处理和分析的库,如 pandas 用于数据的读取、清洗、整理和转换操作,将原始的加密货币数据转换为更易于分析的格式。 可视化展示: 通过可视化工具,如 matplotlib 或 seaborn 库,将加密货币的信息以图表的形式展示出来,以帮助直观地理解数据中的关系和趋势。 统计分析或预测: 可能会进行一些基本的统计分析,如计算加密货币价格的均值、中位数、标准差等统计量,以描述数据的特征。 或者使用机器学习或时间序列分析的方法对加密货币的价格进行预测,根据历史数据预测未来价格走势。 例如,使用 scikit-learn 进行简单的回归分析: 数据挖掘与特征提取: 挖掘加密货币数据中的特征,如找出影响价格的关键因素,对数据中的特征进行筛选和提取,以帮助更好地理解加密货币的市场行为。

    面对程序设计GJava

    类和对象、继承、封装、多态、接口、异常

    TF_demo1_keras.ipynb

    gee python相关教程

    夜间灯光数据 2023年全球_中国夜间灯光数据合集(数据权威)

    夜间灯光强度(平均灯光强度)的高低反映了一个地区城市化发展的水平,平均灯光强度越高,说明该地区城市群越多,城市化程度越高。夜间灯光数据现在越来越广泛地应用于经济增长分析、经济地理、城市经济学、数字经济等众多领域。 本数据包括三套: [1]中国类DMSP-OLS灯光数据1992-202 [2]中国超长序列灯光数据1984-2020 [3]全球类NPP-VIIRS夜间灯光数据2000-2022 包括:全国各省、市、县夜间灯光数据 矫正后夜间灯光数据 细分:标准差、平均值、总值、最大值和最小值

    工程项目总监绩效考核表.xls

    工程项目总监绩效考核表

    (数据权威)各省份一般公共预算转移支付数据(附送地级市转移支付)

    首先解释一下什么叫转移支付。其实,这和养老金的中央调剂是一样的。 每年,地方都要向中央缴纳财政。而中央又要根据各地方的财政实力,给予转移支付。比如一些经济弱省,本身财政收入就不够支出的,还得上交一部分给中央,怎么维持财政运转?由于各省市直接的财政收入能力存在差异,中央为实现各个地方的公共服务水平平等,于是便有了财政转移支付制度。 简单理解就是富省养穷省。 2022年全国一般预算内财政收入203703亿元,给地方转移支付了97144.75亿元,转移支付数额创下新高。

    基于门控卷积和堆叠自注意力的离线手写汉字识别算法研究.pdf

    基于门控卷积和堆叠自注意力的离线手写汉字识别算法研究.pdf

    逐月中国工业用水空间分布数据集(数据权威)

    【数据介绍】   作为第二大人类部门用水,高质量的工业用水格网数据对于水资源研究和管理至关重要。中国工业用水格网数据(China Industrial Water Withdrawal dataset, CIWW)基于超过 40 万家企业数据、月度工业产品产量数据和连续工业用水统计数据制作得到的一套1965-2020年逐月中国工业用水数据集,其空间分辨率为 0.1°和 0.25°。数据集包括工业用水、企业数量和企业生产总值(辅助数据)等变量,可被用于水文、地理学、环境、可持续发展等方面科学研究。 【数据来源】   数据来源为《中国经济普查年鉴》(省级工业取水量、工业产出)、《中国工业企业数据库》(企业地理位置、产值)、《中国工业产品产量数据库》(工业产品月生产量),以及《中国水资源公报》和(Zhou et al, 2020, PNAS)的工业用水量数据。 【数据处理】 首先通过2008年企业分布数据、经济普查年鉴中分省分部门的工业用水量和工业产值计算得到分省分部门工业用水效率和工业产品产量数据,得到了2008年逐月工业用水数据。然后结合中国水资源公报和相关文献中省级工业用水数据,以2008年工业用水的时空格局作为基础分配工业用水数据,最终得到1965-2020年逐月工业用水的格网数据。详细方法见High-resolution mapping of monthly industrial water withdrawal in China from 1965 to 2020 (Hou et al, 2024, ESSD). 将数据集与统计数据记录和其他数据集进行了验证,结果表示在时间尺度和空间尺度上都与统计数据具有一致性,相比已有工业用水数据有更好的精度。

    65 -质量管理部经理绩效考核表1.xlsx

    65 -质量管理部经理绩效考核表1

    11 -电脑部经理绩效考核表1.xlsx

    11 -电脑部经理绩效考核表1

    大英赛写作必备:实用英语万能句及其应用技巧

    内容概要:本文提供了针对大学生英语竞赛写作准备的重要资源——一系列通用的英文句子模板。这些模板涵盖了现代经济社会的各种话题,从科技进步到环境保护,以及个人品质和社会责任等,并且适用于论述类文章、观点对比和个人见解的表达。文章通过对每一句话的应用环境解释和语法提示,确保使用者可以在实际写作中正确且有效地应用这些表达方式。 适合人群:正在准备参加大学生英语竞赛的学生及其他希望提高书面表达能力的学习者。 使用场景及目标:考生能够在竞赛时间内迅速构建思路完整的文章,增强语言表达的流利性和规范性;帮助学习者积累高级词汇,提升英语写作水平并培养良好的思维逻辑。 阅读建议:结合历年优秀范文进行深入学习,熟悉不同类型话题下的表述方法;练习将提供的句子融入自身创作的文章中,通过不断修订和完善来巩固记忆。同时也可以用于日常的英语写作训练当中。

    法律事务专员绩效考核表.xls

    法律事务专员绩效考核表

    apache-commons-digester-javadoc-1.8.1-19.el7.x64-86.rpm.tar.gz

    1、文件内容:apache-commons-digester-javadoc-1.8.1-19.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/apache-commons-digester-javadoc-1.8.1-19.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    永磁同步电机磁场定向控制(矢量控制)Simulink仿真模型波形展现与解析,永磁同步电机的磁场定向控制(矢量控制)simulink仿真模型,波形完美 ,核心关键词:永磁同步电机; 磁场定向控制(矢量控

    永磁同步电机磁场定向控制(矢量控制)Simulink仿真模型波形展现与解析,永磁同步电机的磁场定向控制(矢量控制)simulink仿真模型,波形完美 ,核心关键词:永磁同步电机; 磁场定向控制(矢量控制); Simulink仿真模型; 波形完美;,永磁同步电机矢量控制仿真模型:磁场完美调控,波形精确无误

    07 -储运部经理绩效考核表1.xlsx

    07 -储运部经理绩效考核表1

    OQC检验员(成品出货检验员)绩效考核表.xls

    OQC检验员(成品出货检验员)绩效考核表

    基于Matlab2020b的电机控制算法:无传感FOC算法Simulink仿真模型及实践指导,定位+电流闭环强拖+ 角度渐变切+ 速度电流双闭环+ 无传感器角度估算SMO+ PLL 控制方式 Sim

    基于Matlab2020b的电机控制算法:无传感FOC算法Simulink仿真模型及实践指导,定位+电流闭环强拖+ 角度渐变切+ 速度电流双闭环+ 无传感器角度估算SMO+ PLL 控制方式 Simulink 仿真模型 (Matlab2020b版本)以及教授模型搭建 这是一种常用的无传感FOC电机控制算法,掌握这种算法的基本原理,并有仿真模型在手,就可以用它来指导实践中的程序调试,做到实际项目不盲目调试。 模型特点: 1. 所有模块都做到了模块化,各个模块分区清楚,结构清晰。 2. 所有电机和控制参数均在m文件中体现,变量注释清楚,随用随改。 3. 速度环和电流环PI参数均实现自动整定。 4. 模型采用标幺值系统。 5. 各状态切使用stateflow,模型结构清晰。 6.通用表贴和内嵌式电机。 ,定位;电流闭环强拖;角度渐变切换;速度电流双闭环;无传感器角度估算SMO;PLL控制方式;Simulink仿真模型;Matlab2020b版本建模;教授模型搭建;模块化设计;参数自动整定;标幺值系统;Stateflow应用;通用表贴和内嵌式电机。,基于Matlab 2020b的FOC电机

Global site tag (gtag.js) - Google Analytics