邮件发送由于不支持js,项目只能在后台生成环形图,用jfreechart完全可以实现,即:RingPlot。

这就拿jfreechart生成的最终效果,依赖jar包jfreechart,如果有任何细节还需要调整,强烈建议去读API或者看源码,这里直接上实现代码了

import java.awt.Color;
import java.awt.Font;
import java.awt.Paint;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; import javax.imageio.ImageIO; 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.DefaultDrawingSupplier;
import org.jfree.chart.plot.RingPlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset; public class RingChart {
public RingChart() {
this.createChart();
} @SuppressWarnings("deprecation")
public void createChart() {
JFreeChart chart = ChartFactory.createRingChart(null, this.createDataset(), true, false, false);
chart.getLegend().setVisible(false);
// 环形图
RingPlot ringplot = (RingPlot) chart.getPlot();
ringplot.setOutlineVisible(false);
//{2}表示显示百分比
ringplot.setLabelGenerator(new StandardPieSectionLabelGenerator("{2}"));
ringplot.setBackgroundPaint(new Color(253,253,253));
ringplot.setOutlineVisible(false);
//设置标签样式
ringplot.setLabelFont(new Font("宋体", Font.BOLD, 15));
ringplot.setSimpleLabels(true);
ringplot.setLabelLinkPaint(Color.WHITE);
ringplot.setLabelOutlinePaint(Color.WHITE);
ringplot.setLabelLinksVisible(false);
ringplot.setLabelShadowPaint(null);
ringplot.setLabelOutlinePaint(new Color(0,true));
ringplot.setLabelBackgroundPaint(new Color(0,true));
ringplot.setLabelPaint(Color.WHITE); ringplot.setSectionOutlinePaint(Color.WHITE);
ringplot.setSeparatorsVisible(true);
ringplot.setSeparatorPaint(Color.WHITE);
ringplot.setShadowPaint(new Color(253,253,253));
ringplot.setSectionDepth(0.58);
ringplot.setStartAngle(90);
ringplot.setDrawingSupplier(new DefaultDrawingSupplier(
new Paint[] {
new Color(134, 212, 222),
new Color(174, 145, 195),
new Color(255, 162, 195),
new Color(249, 163, 86),
new Color(119, 173, 195)
},
DefaultDrawingSupplier.DEFAULT_OUTLINE_PAINT_SEQUENCE,
DefaultDrawingSupplier.DEFAULT_STROKE_SEQUENCE,
DefaultDrawingSupplier.DEFAULT_OUTLINE_STROKE_SEQUENCE,
DefaultDrawingSupplier.DEFAULT_SHAPE_SEQUENCE)); FileOutputStream fos_jpg = null;
try {
fos_jpg = new FileOutputStream("d:\\ring.png");
ChartUtilities.writeChartAsPNG(fos_jpg,chart, 235, 230, null);
System.out.println("成功");        //以下由于jfreechart设置背景色后,背景会有留白,直接将目标图片截取
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ChartUtilities.writeChartAsPNG(baos,chart, 240, 230, null); BufferedImage bi = ImageIO.read(new ByteArrayInputStream(baos.toByteArray()));
BufferedImage sub = bi.getSubimage(5, 0, 230, 225);
ImageIO.write(sub, "png", new File("d:\\ring_sub.png"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fos_jpg.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}    //测试数据
public PieDataset createDataset() {
DefaultPieDataset dataSet = new DefaultPieDataset();
int i, j;
String[] key = { "私募股权","房地产","基金","现金宝宝","股票" };
int[] value = { 20, 20, 20, 30, 10 };
for (i = 0, j = 0; i < name.length && j < value.length; i++, j++) {
dataSet.setValue(name[i], value[j]);
}
return dataSet;
} public static void main(String[] args) { new RingChart();
}
}

jfreechart环形图完美实现的更多相关文章

  1. echarts实现环形图

    前端框架使用的angular,使用echarts实现环形图 1. item.component.html <div id="box1" class="pie&quo ...

  2. 数据输入——生成你需要的echart图(堆积柱状图、扇形图、嵌套环形图)

    最近论文需要一些比较直观的图表, 发现echart做出来的图还是比较美观的,这里介绍如何修改数据生成你需要的echart图. 1.堆积柱状图: http://echarts.baidu.com/exa ...

  3. echart 折线图、柱状图、饼图、环形图颜色修改

    之前在做报表的时候用过echart 用完也就完了,而这次在用的时候已经忘了,所以这里简单记录一下,好记性不如烂笔头!!! 1.折线图修改颜色: xAxis: { type: 'category', b ...

  4. iOS 画环形图

    由于新项目的的需求,需要画环形图,由于以前都没接触过这一类(我是菜鸟),去cocochina山找到了一个案例,个人觉得还可以,分享一下 github 地址https://github.com/zhou ...

  5. 修改echarts环形图的牵引线及文字位置

    修改echarts环形图的牵引线及文字位置,下面代码及效果不仅如此,也包含了其它的效果哦.有问题可以留言. 根据echarts官方示例修改效果: 官方示例图: 修改效果图: 直接上代码:其它不多说. ...

  6. vue 结合 Echarts 实现半开环形图

    Echarts 实现半开环形图 1.先看看实现的图 2.HTML部分 创建id 是 chart 的div标签. <div class="content-item"> & ...

  7. echarts白色实心环形图(空心饼图)的编写

    // 数据接入机构统计let myDom = document.getElementById('myChart');let myWidth = myDom.offsetWidth - 5; // 获取 ...

  8. Qt编写自定义控件41-自定义环形图

    一.前言 自定义环形图控件类似于自定义饼状图控件,也是提供一个饼图区域展示占比,其实核心都是根据自动计算到的百分比绘制饼图区域.当前环形图控件模仿的是echart中的环形图控件,提供双层环形图,有一层 ...

  9. 数据可视化基础专题(十三):Matplotlib 基础(五)常用图表(三)环形图、热力图、直方图

    环形图 环形图其实是另一种饼图,使用的还是上面的 pie() 这个方法,这里只需要设置一下参数 wedgeprops 即可. 例子一: import matplotlib.pyplot as plt ...

随机推荐

  1. 细说webpack之流程篇

    引言 目前,几乎所有业务的开发构建都会用到 webpack .的确,作为模块加载和打包神器,只需配置几个文件,加载各种 loader 就可以享受无痛流程化开发.但对于 webpack 这样一个复杂度较 ...

  2. 有7g和2g的砝码各一个,怎样称可以3次把140g东西分为50g和90g???????

    第一次:等分 50和90为   70 70 2.   7g 和2g  ,取出一个70中的9g   ,  61   70 3.利用 9g和2g砝码,取出61中的11克,前面的9 和 11 都放进70

  3. ios UI 之间的切换方法,using prepareForSegue and not

    1, use prepareForSegue: - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { RWTDe ...

  4. Shell编程笔记

    Shell编程笔记与Windows下熟悉的批处理类似,也可以将一些重复性的命令操作写成一个脚本方便处理.   修改别人的脚本,运行后遇到个问题 setenv: command not found 查证 ...

  5. Java的垃圾回收概述

    Java语言建立了垃圾收集机制,即GC,用以跟踪正在使用的对象和发现并回收不再使用的对象,垃圾清理势在必行,以下讲述java垃圾收集算法. 1.Java垃圾收集算法的核心思想 Java语言建立了垃圾收 ...

  6. radix树

    今天在学Linux内核页高速缓存时,学到了一种新的数据结构radix树(基数),经过分析,感觉此数据结构有点鸡肋,有可能是我理解不到位吧. 先来张图,给大家以直观的印象 当有一个key-value型的 ...

  7. AppiumLibrary实用函数介绍

    1. 点击按钮: Click Button index_or_name Click button 实例:Click Button index=0 作者通过实验发现在安卓手机应用测试中,name这个属性 ...

  8. mvn创建web项目

    1. 新建maven项目,选择maven骨架maven-archetype-webapp来建立web项目 2. 选择next,输入groupid:MavenWebTest, artifactid:cn ...

  9. 是否以某字符串结尾 是否以某字符串开始 是否是整数 裁减字符串空格 是否是浮点数 是否所有字符为数字类型 是否为空 是否是EMAIL 是否是电话号码 身份证号码验证-支持新的带x身份证 日期验证

    /* 1.是否以某字符串结尾 endsWith(theStr,endStr) @param theStr:要判断的字符串 @param endStr:以此字符串结尾 @return boolean; ...

  10. JMeter入门(1):JMeter总体介绍及组件介绍

    一.JMeter概述 JMeter就是一个测试工具,相比于LoadRunner等测试工具,此工具免费,且比较好用,但是前提当然是安装Java环境: JMeter可以做 (1)压力测试及性能测试: (2 ...