展开全部

java绘制饼图

import="java.awt.*, javax.imageio.*,java.awt.geom.*,java.awt.image.*"%>

public void drawTips(String tips, Color color, Arc2D.Double arc2d, Graphics2D g2d) {

Arc2D.Double position = arc2d;

position.setAngleExtent(arc2d.getAngleExtent() / 2);

position.x = arc2d.x - 15;

position.y = arc2d.y - 15;

position.width = arc2d.getWidth() + 50;

position.height = arc2d.getHeight() + 50;

Point2D.Double endPoint = (Point2D.Double) position.getEndPoint();

g2d.setPaint(color);

int stringLength = g2d.getFontMetrics().stringWidth(tips);

if (endPoint.x <= arc2d.getCenterX())

g2d.drawString(tips, (float) endPoint.x - stringLength,

(float) endPoint.y);

else {

g2d.drawString(tips, (float) endPoint.x, (float) endPoint.y);

}

}

%>

// 清空缓冲区

response.reset();

// 注意这里的MIME类型

response.setContentType("image/png");

// 创建一个 500X375 的图像

int width = 500, height = 375;

BufferedImage image = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);

// 创建Java2D对象

Graphics2D g2d = image.createGraphics();

// 填充e68a843231313335323631343130323136353331333363366131整个背景

g2d.setPaint(Color.WHITE);

g2d.fillRect(0, 0, width, height);

// 绘制阴影,由灰色渐进圆角矩形组成

GradientPaint grayGP = new GradientPaint(0, 0, Color.GRAY, width,

height, new Color(218, 214, 212), false);

g2d.setPaint(grayGP);

RoundRectangle2D.Float bgRR = new RoundRectangle2D.Float(5, 5,

width - 5, height - 5, 50, 50);

g2d.fill(bgRR);

// 绘制渐进蓝色圆角矩形背景

GradientPaint blueGP = new GradientPaint(0, 0, new Color(252, 197,

113), width / 2, height / 2, new Color(255, 255, 169), true);

g2d.setPaint(blueGP);

g2d.fillRoundRect(0, 0, width - 5, height - 5, 50, 50);

// 绘制深蓝色圆角矩形轮廓

BasicStroke bs = new BasicStroke(1.2f);

g2d.setStroke(bs);

g2d.setPaint(new Color(55, 71, 105));

g2d.drawRoundRect(0, 0, width - 5, height - 5, 50, 50);

// 绘制图表标题

//String chartTitle = "客户构成分析";

g2d.setColor(Color.BLACK);

g2d.setFont(new Font("宋体", Font.PLAIN, 30));

//int stringLength = g2d.getFontMetrics().stringWidth(chartTitle);

//g2d.drawString(chartTitle, (width - stringLength) / 2, 30);

// 定义圆弧

Arc2D.Double arc2d = new Arc2D.Double();

double startAngle = 30.0, arcAngle = 0.0;

double rectWidth = 295.0, rectHeight = 245.0;

Point2D.Double p2d = new Point2D.Double((width - rectWidth) / 2, 70.0);

int arcType = Arc2D.PIE;

Color color[] = new Color[5];

color[0] = new Color(99, 99, 0);

color[1] = new Color(255, 169, 66);

color[2] = new Color(33, 255, 66);

color[3] = new Color(33, 0, 255);

color[4] = new Color(255, 0, 66);

double bookSales[] = new double[5];

double totalSales = 0.0;

// 定义厚度

int thickness = 25;

for (int i = 0; i < bookSales.length; i++) {

bookSales[i] = 1 + Math.random() * 99;

totalSales += bookSales[i];

}

// 绘制起始角度不大于90度的圆弧

startAngle = 30;

for (int i = 0; i < bookSales.length; i++) {

arcAngle = bookSales[i];

if (startAngle >= 90) {

break;

}

for (int j = thickness; j > 0; j--) {

g2d.setColor(color[i].darker());

arc2d = new Arc2D.Double(p2d.x, p2d.y + j, rectWidth,

rectHeight, startAngle, arcAngle, arcType);

// 填充圆弧

g2d.fill(arc2d);

}

// 更新圆弧的起始角度

startAngle += arcAngle;

}

// 绘制起始角度不小于270度的圆弧

startAngle = 390;

for (int i = bookSales.length - 1; i > 0; i--) {

arcAngle = bookSales[i];

if (startAngle <= 270) {

break;

}

for (int j = thickness; j > 0; j--) {

g2d.setColor(color[i].darker());

arc2d = new Arc2D.Double(p2d.x, p2d.y + j, rectWidth,

rectHeight, startAngle, -arcAngle, arcType);

// 填充圆弧

g2d.fill(arc2d);

}

// 更新圆弧的起始角度

startAngle -= arcAngle;

}

// 绘制起始角度在90度到270度之间的圆弧

startAngle = 30;

for (int i = 0; i < bookSales.length; i++) {

arcAngle = bookSales[i];

if (startAngle > 90 && startAngle < 270) {

for (int j = thickness; j > 0; j--) {

g2d.setColor(color[i].darker());

arc2d = new Arc2D.Double(p2d.x, p2d.y + j, rectWidth,

rectHeight, startAngle + arcAngle, -arcAngle,

arcType);

// 填充圆弧

g2d.fill(arc2d);

}

}

// 更新圆弧的起始角度

startAngle += arcAngle;

}

// 绘制最上面一层圆弧

startAngle = 30;

for (int i = 0; i < bookSales.length; i++) {

arcAngle = bookSales[i];//item.getPercent() * 3.6;

g2d.setColor(color[i]);

arc2d = new Arc2D.Double(p2d.x, p2d.y, rectWidth, rectHeight,

startAngle, arcAngle, arcType);

// 填充圆弧

g2d.fill(arc2d);

// 描绘圆弧轮廓

g2d.setStroke(new BasicStroke(1.2f));

g2d.setPaint(Color.GRAY);

g2d.draw(arc2d);

// 更新圆弧的起始角度

startAngle += arcAngle;

g2d.setFont(new Font("宋体", Font.PLAIN, 12));

}

// 部署图形

g2d.dispose();

// 利用ImageIO类的write方法对图像进行编码

ServletOutputStream sos = response.getOutputStream();

ImageIO.write(image, "PNG", sos);

sos.close();

out.clear();

out = pageContext.pushBody();

%>

本回答由网友推荐

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java 实现饼状图_怎么用JAVA 开发的圆饼图相关推荐

  1. mysql 统计做饼状图_使用Highcharts结合PHP与Mysql生成饼状图

    我们在做复杂的数据统计功能时会用到饼状图,饼状图用整个圆表示总体的数量或整体值1,用圆内各个扇形的大小表示各部分数量或该部分占总体的百分比,它可以清晰直观的表示各部分之间以及各部分与整体之间的数量关系 ...

  2. 怎么用python画饼状图_如何使用python的pygal模块画饼状图

    python是一个很有趣的语言,可以在命令行窗口运行.python中有很多功能强大的模块,这篇经验告诉你,如何使用python的pygal模块,画饼状图. 工具/原料 windows系统电脑一台 py ...

  3. java饼状图_使用Vue+echars+Java后端数据生成饼状图

    效果图: 后端controller代码: //图表 @AuthIgnore @PostMapping("getData") public R getData() { long[] ...

  4. 怎么帮java转换成类图_有把java代码直接转成uml类图的工具吗 – 手机爱问

    2012-05-31 如何将JAVA程序转化成C程序? 给你代码: typedef unsigned char byte; //这是个转换的基础数组,使用查表的方法将十六进制字符转换成数值 stati ...

  5. python excel数据分析画直方图 饼状图_Excel数据可视化应用(直方图、折线图、饼状图)...

    直方图:对比关系 直方图是一种统计报告图,是表示资料变化情况的主要工具.直方图由一系列高度不等的的纵向条纹或线段表示数据分布的情况.一般用横轴表示数据类型,纵轴表示分布情况. 例1: 1.右键单击图表 ...

  6. python饼状图颜色一样_使用echarts画饼状图,设置饼状图颜色

    前言: 前面已经跟大家分享了使用echarts画柱状图.折线图,一些之前自己遇到的坑也跟大家说了,这次就不再赘述.官方有配置文档,很详细,大家不懂的地方也可以交流. 今日分享重点:画饼状图. 1.引入 ...

  7. JFreeChart框架中生成饼状图上怎样显示数据 [问题点数:40分,结帖人GreenLawn]

    我用JFreeChart框架生成饼状图,但想把数据信息在饼图上显示,是在饼图内部(即圆内)显示!怎样实现啊?? 去掉lable pieplot.setLabelGenerator(null); 去掉线 ...

  8. 使用echarts画饼状图,设置饼状图颜色

    前言: 使用echarts遇到过的坑: 一定要给图表容器添加宽度与高度. 图表在容器中可以调整位置,让图表显示的更完整. 今日分享重点:画饼状图. 1.引入相关js <script type=& ...

  9. 做饼状图时,显示百分比的解决方案

    http://fluagen.blog.51cto.com/146595/86733 在项目中做饼状图时,显示百分比的解决方案: 饼图显示百分比 在饼图中JFreeChart默认只显示选项和数值,没有 ...

  10. Matplotlib柱状图、饼状图

    柱状图 使用Matplotlib提供的bar()函数来绘制柱状图 与前面介绍的plot()函数类似.程序每次调用bar()函数时都会生成一组柱状图,如果希望生成多组柱状图.则通过多次调用bar()函数 ...

最新文章

  1. “我被机器解雇了!”Amazon 63岁员工因算法评分太低被自动开除
  2. JS性能--DOM编程之重排与重绘
  3. sql中的三元运算符
  4. 前端进阶之如何正确判断this的指向?
  5. Oracle下scott用户无法登录
  6. MarkdownPad 汉化破解(含下载地址)
  7. #pragma pack(1) 的意义是什么
  8. java litjson_仿造 Gson 的自制 json 解析器
  9. java图片色差_java – JPEG图像的颜色错误
  10. 页面缓存 OutputCache
  11. haproxy配置文件管理脚本
  12. c++filt看函数名
  13. excel随机数_软网推荐:Windows环境下快速生成随机数
  14. 初识python之概念认知篇
  15. 江在川上曰:less样式预编译
  16. 【项目实战】批量导出excel,并打包zip文件【连载中】
  17. 如果房贷被拒了怎么办?
  18. STM32应用开发实践教程:智能小车电机测速模块的应用开发
  19. 大企业邮箱品牌排行中,哪个企业邮箱好用?
  20. 微信小程序个人中心页与登录界面的切换

热门文章

  1. C语言一个简单的贪吃蛇程序
  2. java网吧系统_基于SSM框架下的JAVA网吧管理系统
  3. w7计算机快捷键设置方法,win7快捷键设置,windows常用24个快捷键
  4. Winform Chart控件常见问题汇总
  5. 初步实现免费下载百度文库word文档(只限纯文本文档)----------------(浏览器控制台执行js代码)
  6. DayDayUp:计算机技术与软件专业技术资格证书之《系统集成项目管理工程师》课程讲解之十大知识领域之4辅助—项目采购管理
  7. 风险模型—VaR模型2
  8. R语言建立VAR模型分析联合内生变量的动态关系
  9. android 接收视频流,Android 获取高清(4K)视频流图片
  10. 计算机算法设计与分析 第4版 (王晓东) 重点题