jfreechart 折线图的实现封装,传入参数即可

概述:前段时间交付的一个数据库压力测试项目,使用的是信创的操作系统(统信操作系统以及银河麒麟v10操作系统,架构是arch64),在涉密机房无法联网所以无法下载安装相应的依赖库,导致原本用R语言写的折线图生成代码无法正常执行,所以需要通过Java后端生成折线图,将折线图提供给Java 开发的client显示。

环境:jdk1.8+、eclipse

jar包:fastjson-1.2.59.jar、jcommon-1.0.23.jar、jfreechart-1.0.19.jar 

免费链接:jfreechart所需jar包.zip-Java文档类资源-CSDN下载 绝对是无偿给大家的哈,因为这些本身就是开源的东西,如果被收费与作者无关,也可以去官网下载对应版本。

生成的图:

实现代码:


import java.awt.Font;

import java.awt.Paint;

import java.io.File;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
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.title.TextTitle;
import org.jfree.data.category.DefaultCategoryDataset;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;




/**
 * @author liujian
 * Echarts折线图生成demo
 * 咕呱咕呱
 */
public class Demomain {
	
	 public static void main(String[] args) throws Exception {
			// TODO Auto-generated method stub
			String  json1="{\"lineNewOrder\":[{\"y\":\"20\",\"name\":\"new_order(新订单)\",\"x\":\"0.0\"},{\"y\":\"10\",\"name\":\"new_order(新订单)\",\"x\":\"0.2\"},{\"y\":\"15\",\"name\":\"new_order(新订单)\",\"x\":\"0.4\"},{\"y\":\"25\",\"name\":\"new_order(新订单)\",\"x\":\"0.6\"},{\"y\":\"20\",\"name\":\"new_order(新订单)\",\"x\":\"0.8\"},{\"y\":\"15\",\"name\":\"new_order(新订单)\",\"x\":\"1.0\"}],\"linePayment\":[{\"y\":\"20\",\"name\":\"payment(付款)\",\"x\":\"0.0\"},{\"y\":\"28\",\"name\":\"payment(付款)\",\"x\":\"0.2\"},{\"y\":\"35\",\"name\":\"payment(付款)\",\"x\":\"0.4\"},{\"y\":\"30\",\"name\":\"payment(付款)\",\"x\":\"0.6\"},{\"y\":\"40\",\"name\":\"payment(付款)\",\"x\":\"0.8\"},{\"y\":\"35\",\"name\":\"payment(付款)\",\"x\":\"1.0\"}],\"lineOrderStatus\":[{\"y\":\"40\",\"name\":\"order_status(订单状态)\",\"x\":\"0.0\"},{\"y\":\"65\",\"name\":\"order_status(订单状态)\",\"x\":\"0.2\"},{\"y\":\"50\",\"name\":\"order_status(订单状态)\",\"x\":\"0.4\"},{\"y\":\"70\",\"name\":\"order_status(订单状态)\",\"x\":\"0.6\"},{\"y\":\"80\",\"name\":\"order_status(订单状态)\",\"x\":\"0.8\"},{\"y\":\"140\",\"name\":\"order_status(订单状态)\",\"x\":\"1.0\"}],\"lineStockLevel\":[{\"y\":\"40\",\"name\":\"stock_level(库存)\",\"x\":\"0.0\"},{\"y\":\"65\",\"name\":\"stock_level(库存)\",\"x\":\"0.2\"},{\"y\":\"70\",\"name\":\"stock_level(库存)\",\"x\":\"0.4\"},{\"y\":\"80\",\"name\":\"stock_level(库存)\",\"x\":\"0.6\"},{\"y\":\"110\",\"name\":\"stock_level(库存)\",\"x\":\"0.8\"},{\"y\":\"150\",\"name\":\"stock_level(库存)\",\"x\":\"1.0\"}],\"lineDelivery\":[{\"y\":\"50\",\"name\":\"delivery(发货)\",\"x\":\"0.0\"},{\"y\":\"110\",\"name\":\"delivery(发货)\",\"x\":\"0.2\"},{\"y\":\"140\",\"name\":\"delivery(发货)\",\"x\":\"0.4\"},{\"y\":\"120\",\"name\":\"delivery(发货)\",\"x\":\"0.6\"},{\"y\":\"130\",\"name\":\"delivery(发货)\",\"x\":\"0.8\"},{\"y\":\"145\",\"name\":\"delivery(发货)\",\"x\":\"1.0\"}]}";

			creatLine( json1,  1000 ,400,1.0f );
		}
/**
 * @author liujian
 * @param json 数据
 * @param width 图片宽度
 * @param height 图片高度
 * @param quality 图片质量0.0f——1.0f 值越大越高
 */
public static  void creatLine(String json,  int width ,int  height,float  quality ) {
	
 JSONObject obj=      (JSONObject) JSON.parse(json);
	 
	
	DefaultCategoryDataset line_chart_dataset = new DefaultCategoryDataset();
	JSONArray lineNewOrder=      (JSONArray) obj.get("lineNewOrder");
	
	for(int i=0;i<lineNewOrder.size();i++) {
	
	      line_chart_dataset.addValue(	lineNewOrder.getJSONObject(i).getLong("y") ,lineNewOrder.getJSONObject(i).getString("name")  , lineNewOrder.getJSONObject(i).getString("x") );

	}
	
JSONArray linePayment=      (JSONArray) obj.get("linePayment");
	
for(int i=0;i<linePayment.size();i++) {
	
	      line_chart_dataset.addValue(	linePayment.getJSONObject(i).getLong("y") ,linePayment.getJSONObject(i).getString("name")  , linePayment.getJSONObject(i).getString("x") );

	}
  
JSONArray lineOrderStatus=      (JSONArray) obj.get("lineOrderStatus");

for(int i=0;i<lineOrderStatus.size();i++) {
		
		      line_chart_dataset.addValue(	lineOrderStatus.getJSONObject(i).getLong("y") ,lineOrderStatus.getJSONObject(i).getString("name")  , lineOrderStatus.getJSONObject(i).getString("x") );

		}
JSONArray lineStockLevel=      (JSONArray) obj.get("lineStockLevel");

for(int i=0;i<lineStockLevel.size();i++) {
		
		      line_chart_dataset.addValue(	lineStockLevel.getJSONObject(i).getLong("y") ,lineStockLevel.getJSONObject(i).getString("name")  , lineStockLevel.getJSONObject(i).getString("x") );

		}

  
JSONArray lineDelivery=      (JSONArray) obj.get("lineDelivery");

for(int i=0;i<lineDelivery.size();i++) {
		
		      line_chart_dataset.addValue(	lineDelivery.getJSONObject(i).getLong("y") ,lineDelivery.getJSONObject(i).getString("name")  , lineDelivery.getJSONObject(i).getString("x") );

		}


  
  JFreeChart lineChartObject = ChartFactory.createLineChart(
     null,"已用分钟数",
     "延迟(毫秒)",
     line_chart_dataset,PlotOrientation.VERTICAL,
     true,true,false);
  //主标题
 Font fontMain= new Font("宋体",Font.BOLD,20);
 TextTitle mainTitle= new TextTitle("软件与管理平台 v5",fontMain);
 mainTitle.setMargin(20.0, 0, 5, 0);
 lineChartObject.setTitle(mainTitle);
   //副标题
 Font subFont= new Font("黑体",Font.BOLD,15);
 TextTitle  subtitle =  new TextTitle("事务延迟",subFont);
 lineChartObject.addSubtitle(subtitle);
 

 //x轴
 Font xFont= new Font("宋体",Font.BOLD,15);
 CategoryPlot categoryPlot =lineChartObject.getCategoryPlot();
 CategoryAxis domainAxis= categoryPlot.getDomainAxis();
 //x轴坐标上的文字设置
// domainAxis.setTickLabelFont(xFont);
 //设置x轴坐标标题
 domainAxis.setLabelFont(xFont);
Paint paint=   lineChartObject.getBorderPaint();

 
 NumberAxis numberAxis= (NumberAxis) categoryPlot.getRangeAxis();
  //y轴坐标上文字设置
 Font yFont= new Font("宋体",Font.BOLD,15);
 //设置Y轴坐标上的文字
// numberAxis.setTickLabelFont(yFont);
 //设置Y轴标题文字
 numberAxis.setLabelFont(yFont);

 lineChartObject.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));//控制底部中文正常显示
 
 
  
  File lineChart = new File( "D:/Line1Chart.jpeg" ); 
   
  try {
	ChartUtilities.saveChartAsJPEG(lineChart ,quality,lineChartObject, width ,height);
} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
}


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值