JFreeChart多坐标轴曲线图
jar包:
jcommon-1.0.23.jar
jfreechart-1.0.19.jar
maven配置:
<dependency>
<groupId>jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.0.19</version>
</dependency> <dependency>
<groupId>jfree</groupId>
<artifactId>jcommon</artifactId>
<version>1.0.23</version>
</dependency>
示例代码:
package com.test; import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map; import org.apache.log4j.Logger;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.data.time.Minute;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.RectangleInsets; public class CreateChart { // 日志记录
private static Logger logger = Logger.getLogger(CreateChart.class); // 备用颜色
private static final Color color1 = new Color(127, 127, 127);
private static final Color color2 = new Color(136, 0, 21);
private static final Color color3 = new Color(237, 28, 36);
private static final Color color4 = new Color(255, 127, 39);
private static final Color color5 = new Color(255, 242, 0);
private static final Color color6 = new Color(34, 177, 76); /**
* 图片生成
*/
public boolean createChart() {
try {
// 解决中文乱码问题 -- begin
StandardChartTheme standardChartTheme = new StandardChartTheme("CN");// 创建主题样式
standardChartTheme.setExtraLargeFont(new Font("黑体", Font.BOLD, 20));// 设置标题字体
standardChartTheme.setRegularFont(new Font("黑体", Font.PLAIN, 15));// 设置图例的字体
standardChartTheme.setLargeFont(new Font("黑体", Font.PLAIN, 15));// 设置(时间)轴向的字体
ChartFactory.setChartTheme(standardChartTheme);// 应用主题样式
// 解决中文乱码问题 -- end String title = "jfreeChart数据曲线图";// 标题名称 Map<String, XYDataset> map = createDataset(); // 生成需要格式的数据集 JFreeChart jfreechart = ChartFactory.createTimeSeriesChart( // 创建chart对象
title, // 图标标题
null, // 横轴标题
null, // 纵轴标题
null, // 数据集
true, // 是否显示图例标识
true, // 是否显示toolTips
false // 是否支持超链接
);
jfreechart.setBackgroundPaint(Color.white); // 设置画布背景色 // 获取绘图区对象
XYPlot plot = (XYPlot) jfreechart.getPlot(); // 给绘图区对象设置属性
plot.setOrientation(PlotOrientation.VERTICAL); // 数据区的方向
plot.setBackgroundPaint(Color.lightGray); // 背景色
plot.setDomainGridlinePaint(Color.white); // 分类轴网格线条颜色
plot.setRangeGridlinePaint(Color.white); // 数据轴网格线条颜色
plot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D)); // 坐标轴到数据区的间距
plot.getRangeAxis().setFixedDimension(40D); // 坐标轴距左边距离 // 设置轴1--数据匹配
NumberAxis axis0 = new NumberAxis("多轴-轴1");
axis0.setLabelFont(new Font("黑体", Font.PLAIN, 12));// y轴字体
plot.setRangeAxis(0, axis0);
plot.setDataset(0, map.get("dataSet1"));
plot.mapDatasetToRangeAxis(0, 0); // 设置轴2--数据匹配
NumberAxis axis1 = new NumberAxis("多轴-轴2");
axis1.setLabelFont(new Font("黑体", Font.PLAIN, 12));// y轴字体
plot.setRangeAxis(1, axis1);
plot.setDataset(1, map.get("dataSet2"));
plot.mapDatasetToRangeAxis(1, 1); // 设置轴3--数据匹配
NumberAxis axis2 = new NumberAxis("多轴-轴3");
axis2.setLabelFont(new Font("黑体", Font.PLAIN, 12));// y轴字体
plot.setRangeAxis(2, axis2);
plot.setDataset(2, map.get("dataSet3"));
plot.mapDatasetToRangeAxis(2, 2); // 坐标轴1--曲线颜色
StandardXYItemRenderer renderer0 = new StandardXYItemRenderer();
renderer0.setSeriesPaint(0, color1);
renderer0.setLegendTextPaint(0, color1);// 设置对应图例字体颜色 renderer0.setSeriesPaint(1, color2);
renderer0.setLegendTextPaint(1, color2);// 设置对应图例字体颜色 plot.setRenderer(0, renderer0); // 坐标轴2--曲线颜色
StandardXYItemRenderer renderer1 = new StandardXYItemRenderer();
renderer1.setSeriesPaint(0, color3);
renderer1.setLegendTextPaint(0, color3);// 设置对应图例字体颜色 renderer1.setSeriesPaint(1, color4);
renderer1.setLegendTextPaint(1, color4);// 设置对应图例字体颜色 plot.setRenderer(1, renderer1); // 坐标轴3--曲线颜色
StandardXYItemRenderer renderer2 = new StandardXYItemRenderer();
renderer2.setSeriesPaint(0, color5);
renderer2.setLegendTextPaint(0, color5);// 设置对应图例字体颜色 renderer2.setSeriesPaint(1, color6);
renderer2.setLegendTextPaint(1, color6);// 设置对应图例字体颜色 plot.setRenderer(2, renderer2); // 3. 保存chart图标
String filePath = "D:\\Chart";// 图片保存地址
String fileName = "testJFreeChart";
File fos_jpg = new File(filePath + "/" + fileName + ".jpg "); // 需要保存到的文件地址和名称
if (!fos_jpg.getParentFile().exists()) {
fos_jpg.getParentFile().mkdirs();
}
ChartUtilities.saveChartAsJPEG( //
fos_jpg, // 需要保存到的文件对象
jfreechart, // 统计图表对象
1000, // 宽
600 // 高
);
logger.info("绘图完成!");
} catch (Exception e) {
logger.error(e);
}
return true;
} @SuppressWarnings("deprecation")
private Map<String, XYDataset> createDataset() {
// 定义返回结果集
Map<String, XYDataset> map = new HashMap<String, XYDataset>(); // 轴1数据
TimeSeries axis0_data1 = new TimeSeries("axis0_data1", org.jfree.data.time.Minute.class);
TimeSeries axis0_data2 = new TimeSeries("axis0_data2", org.jfree.data.time.Minute.class);
// 轴2数据
TimeSeries axis1_data1 = new TimeSeries("axis1_data1", org.jfree.data.time.Minute.class);
TimeSeries axis1_data2 = new TimeSeries("axis1_data2", org.jfree.data.time.Minute.class);
// 轴3数据
TimeSeries axis2_data1 = new TimeSeries("axis2_data1", org.jfree.data.time.Minute.class);
TimeSeries axis2_data2 = new TimeSeries("axis2_data2", org.jfree.data.time.Minute.class); for (int i = 0; i < 168; i++) {
// 轴1数据
axis0_data1.add(new Minute(getDate(i)), Math.random() * 10 + 30);
axis0_data2.add(new Minute(getDate(i)), Math.random() * 10 + 30);
// 轴2数据
axis1_data1.add(new Minute(getDate(i)), Math.random() * 100 + 200);
axis1_data2.add(new Minute(getDate(i)), Math.random() * 100 + 200);
// 轴3数据
axis2_data1.add(new Minute(getDate(i)), Math.random() * 1000 + 1000);
axis2_data2.add(new Minute(getDate(i)), Math.random() * 1000 + 1000);
}
TimeSeriesCollection dataSet1 = new TimeSeriesCollection();
TimeSeriesCollection dataSet2 = new TimeSeriesCollection();
TimeSeriesCollection dataSet3 = new TimeSeriesCollection();
// 轴1数据
dataSet1.addSeries(axis0_data1);
// dataSet1.addSeries(axis0_data2);
// 轴2数据
dataSet2.addSeries(axis1_data1);
// dataSet2.addSeries(axis1_data2);
// 轴3数据
dataSet3.addSeries(axis2_data1);
// dataSet3.addSeries(axis2_data2); map.put("dataSet1", dataSet1);
map.put("dataSet2", dataSet2);
map.put("dataSet3", dataSet3); return map;
} /**
* 模拟时间
*/
public Date getDate(int i) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MINUTE, -i);
return calendar.getTime();
} /**
* test Main
*/
public static void main(String[] args) {
new CreateChart().createChart();
} }
JFreeChart多坐标轴曲线图的更多相关文章
- Winforn中设置ZedGraph曲线图的属性、坐标轴属性、刻度属性
场景 C#窗体应用中使用ZedGraph曲线插件绘制图表: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/99716066 在上面 ...
- JFreeChart API 说明(转)
原地址 http://blog.csdn.net/mike_caoyong/article/details/7338160 JFreeChart目前是最好的java图形解决方案,基本能够解决目前的图形 ...
- JFreeChart自我总结
想飞就别怕摔 大爷的并TM骂人 JFreeChart自我总结 1.饼图.柱状图.折线图生成的工具类 1 package com.text.util; 2 3 import java.awt. ...
- JFreeChart
花了四个小时给同学写的.还行吧,原来都没有用过到处找资料写的. package DrawLine; import org.jfree.chart.ChartFactory; import org.jf ...
- ZK 使用jfreeChart
前台: <?page title="Grid使用" contentType="text/html;charset=UTF-8"?> <zk x ...
- javascript曲线图和面积图Line & Area chart控件功能及下载
Line & Area chart 控件是一款新型的.可用性极强的曲线图和面积图产品.一个您网站的访问者可以放大他感兴趣的一段区域,打开和关闭数值气球,并可显示和隐藏图表.您能创建简单.堆积. ...
- 8-Highcharts曲线图之对数直线图
<!DOCTYPE> <html lang='en'> <head> <title>8-Highcharts曲线图之对数直线图</title> ...
- asp.net 曲线图
public void draw(DataTable dt) { //取得记录数量 int count = dt.Rows.Count; //记算图表宽度 int wd = 80 + 20 * (co ...
- Jfreechart 乱码
整个图标分成三部分chart title,chart 的plot还有chart的 legend三个部分需要对他们分别设置字体就对了. 先看解决方法( 把这几个全部设置了,都搞定了就可以了): ...
随机推荐
- IO队列和IO调度
IO体系概览 先看看本文主题IO调度和IO队列处于整个IO体系的哪个位置,这个IO体系是非常重要的,了解IO体系我们可以对整个IO过程有个全面的认识.虽然一下两下并不清楚IO体系各个部分的细节,但是我 ...
- IO之内核buffer----"buffer cache"
举例 一般情况下,Read,write系统调用并不直接访问磁盘.这两个系统调用仅仅是在用户空间和内核空间的buffer之间传递目标数据. 举个例子,下面的write系统调用仅仅是把3个字节从用户空间拷 ...
- 程序员求职之道(《程序员面试笔试宝典》)之程序设计基础(static的使用)?
在C语言中,关键字static的意思是静态,它有三个明显的作用:首先,在函数体内,静态变量具有"记忆"功能,即一个被声明为静态的变量在这一函数被调用过程中其值维持不变.其次,在模块 ...
- 【转】[总结]FFMPEG视音频编解码零基础学习方法
在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...
- poj 2096 Collecting Bugs(期望 dp 概率 推导 分类讨论)
Description Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other ...
- python爬爬(网友提供学习)
import urllib2,urllib,os,re def ZZ(url): pathw=os.getcwd() #图片和标题目录 imagetitleregion=r'<div class ...
- qt视图选择
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.Qt import * from PyQt4. ...
- JVM结构、GC工作机制详解
JVM结构.内存分配.垃圾回收算法.垃圾收集器.下面我们一一来看. 一.JVM结构 根据<java虚拟机规范>规定,JVM的基本结构一般如下图所示: 从左图可知,JVM主要包括四个部分 ...
- NPOI之使用EXCEL模板创建报表
因为项目中要用到服务器端创建EXCEL模板 无法直接调用EXCEL 查了下发现NPOI很方便很简单就实现了 其中走了点弯路 第一次弄的时候发现输出的值是文本不是数字型无法直接计算公式 然后又发现打开报 ...
- EffectiveC#00--选择定义和实现接口,而不是继承
1.继承就是说它是某物(is a的关系),针对相关类,而接口是说它有某个功能(behaves like.)可以是不相关的 基类是描述对象是什么,接口描述对象有某种行为. 2.不能在接口里提供任何成员的 ...