欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JAVA JfreeChart生成饼形图image

程序员文章站 2022-06-15 10:18:28
JAVA饼形图生成img用的JfreeChart图标绘制类库一、引入包import java.awt.*;import java.io.*;import java.text.DecimalFormat;import java.text.NumberFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import...

@TOCJAVA JfreeChart生成饼形图image

JAVA饼形图生成img

用的JfreeChart图标绘制类库

一、引入包

import java.awt.*; import java.io.*; import java.text.DecimalFormat; import java.text.NumberFormat; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.labels.StandardPieSectionLabelGenerator; import org.jfree.chart.plot.PiePlot3D; import org.jfree.chart.title.LegendTitle; import org.jfree.chart.title.TextTitle; import org.jfree.data.general.DefaultPieDataset; import org.jfree.data.general.PieDataset; import sun.misc.BASE64Encoder; 

二、上代码,这里我只讲图片保存成了byte组,因为保存为byte可以帮助你们使用任何场合,所以说怎么用你们自己转

1.数据集处理

// 饼状图 数据集 //这里data是饼形图占比,datadescription是饼形图的释义 //例 double[] datas = {100,200} //String[] datadescription = {'点赞','关注'} public static PieDataset getDataPieSetByUtil(double[] data, String[] datadescription) { if (data != null && datadescription != null) { if (data.length == datadescription.length) { DefaultPieDataset dataset = new DefaultPieDataset(); for (int i = 0; i < data.length; i++) { dataset.setValue(datadescription[i], data[i]); } return dataset; } } return null; } 

2.生成饼形图

 /**
     * 饼状图
     * @param dataset 数据集处理返回的结果
     * @param chartTitle 图标题 生成图的名字
     * @param pieKeys 分饼的名字集 //String[] datadescription = {'点赞','关注'}
     * @return byte[] 数据
     */ public static byte[] createValidityComparePimChar(PieDataset dataset, String chartTitle, String[] pieKeys) { JFreeChart chart = ChartFactory.createPieChart3D(chartTitle,dataset,true,true,false); // 使下说明标签字体清晰,去锯齿类似于 chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); chart.setTextAntiAlias(false); // 图片背景色 chart.setBackgroundPaint(Color.white); // 设置图标题的字体重新设置title Font font = new Font("宋体", Font.BOLD, 25); TextTitle title = new TextTitle(chartTitle); title.setFont(font); chart.setTitle(title); //解决图释乱码问题 LegendTitle legend = chart.getLegend(); if (legend!=null) { legend.setItemFont(new Font("宋体", Font.BOLD, 12)); } PiePlot3D plot = (PiePlot3D) chart.getPlot(); // 图片中显示百分比:默认方式 // 指定饼图轮廓线的颜色 plot.setBaseSectionOutlinePaint(Color.BLACK); plot.setBaseSectionPaint(Color.BLACK); // 设置无数据时的信息 plot.setNoDataMessage("无对应的数据,请重新查询。"); // 设置无数据时的信息显示颜色 plot.setNoDataMessagePaint(Color.red); // 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位 plot.setLabelGenerator(new StandardPieSectionLabelGenerator( "{0}={1}({2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%"))); // 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例 plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator( "{0}={1}({2})")); plot.setLabelFont(new Font("宋体", Font.BOLD, 12)); // 指定图片的透明度(0.0-1.0) plot.setForegroundAlpha(1.0f); // 指定显示的饼图上圆形(false)还椭圆形(true) plot.setCircular(false, true); // 设置第一个 饼块section 的开始位置,默认是12点钟方向 plot.setStartAngle(90); // // 设置分饼颜色 plot.setSectionPaint(pieKeys[0], new Color(244, 194, 144)); plot.setSectionPaint(pieKeys[1], new Color(144, 233, 144)); try { BASE64Encoder BASE64 = new BASE64Encoder(); ByteArrayOutputStream bas = new ByteArrayOutputStream(); ChartUtilities.writeChartAsJPEG(bas, 1.0f, chart, 500, 350, null); bas.flush(); bas.close(); byte[] data = bas.toByteArray(); return data; } catch (Exception e){ return null; } } 

3. 注意项:本地启动调试不会出现图表内文字乱码问题,但是要是部署的服务器上会出现缺少字体问题,这个问题处理方式就将你服务器上的字体放到jdk的字体包内,问题解决

4.jar下载地址及依赖

jar及依赖下载

本文地址:https://blog.csdn.net/qq_50520960/article/details/108847979