<%@ page language="java" contentType="image/png;charset=GB2312"
import="java.awt.*"
import="javax.imageio.*"
import="java.awt.geom.*"
import="java.awt.image.*"
import="java.text.*"
%>
<%!
// 绘制饼图的说明
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() + 30 ;
position.height = arc2d.getHeight() + 30;
Point2D.Double startPoint =
(Point2D.Double)position.getStartPoint();
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();
// 填充整个背景
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(25, 67, 117),
width/2, height/2, new Color(12, 104, 151), 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.ORANGE);
g2d.setFont(new Font("汉鼎繁淡古", Font.PLAIN, 30));
int stringLength = g2d.getFontMetrics().stringWidth(chartTitle);
g2d.drawString(chartTitle, (width - stringLength) / 2, 25 );
// 定义圆弧
Arc2D.Double arc2d = new Arc2D.Double();
double startAngle = 30.0, arcAngle = 0.0;
double rectWidth = 320.0, rectHeight = 280.0;
Point2D.Double p2d = new Point2D.Double((width - rectWidth)/2, 70.0);
int arcType = Arc2D.PIE;
// 声明绘制数据
String bookTitle[] = {"Python", "JAVA", "C#", "Perl", "PHP"};
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 ;
double proportion = 0.0;
for (int i=0; i< bookSales.length; i++)
{
bookSales[i] = 1 + Math.random() * 99;
totalSales += bookSales[i];
}
for(int i = 0 ; i < bookTitle.length; i++)
{
arcAngle = bookSales[i]*360 / totalSales;
proportion = bookSales[i]/totalSales * 100 ;
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;
// 格式化浮点数的输出格式
DecimalFormat twoDigits = new DecimalFormat("0.00");
g2d.setFont(new Font("Courier New", Font.PLAIN, 12));
// 绘制说明文字
drawTips(bookTitle[i] + " "+twoDigits.format(proportion) + "%",
Color.WHITE, arc2d, g2d);
}
// 部署图形
g2d.dispose();
// 利用ImageIO类的write方法对图像进行编码
ServletOutputStream sos = response.getOutputStream();
ImageIO.write(image, "PNG", sos);
sos.close();
%>
分享到:
相关推荐
在JavaScript的世界里,画饼图是一种常见的数据可视化方式,它能直观地展示各项比例关系,尤其适用于呈现多个部分组成整体的情况。"JS完美画饼图"这个话题涉及到使用JavaScript库或者自定义代码来创建动态、交互式的...
标题中的"piechart.zip_Labview饼状图_labview piechart_labview 画饼图_piechart lab"暗示了这个压缩包包含了一个关于在LabVIEW中创建和使用饼状图的实例或教程。描述提到"LabVIEW中实现饼图显示,提供比较好的人机...
asp实现画饼图功能,很有用哦,asp实现画饼图功能,很有用哦
在C#编程中,画饼图是一种常用的可视化方式,它能直观地展示数据的比例和分布。本资源"**C#354-画饼图组件源代码**"提供了一个用于创建饼图的自定义组件,这对于我们进行数据分析、报告展示或者用户界面设计都非常有...
【ASP.NET】按比例画饼图 一个很简单的实例
"android画饼图"这个主题主要涉及到如何在Android应用中自定义一个饼状图控件。在这个项目中,开发者分享了其在GitHub上的源代码,供其他开发者学习和使用。 1. **自定义控件**:在Android中,如果系统自带的图表库...
画饼图 使用html5加javascript技术生成饼图 简单容易理解
本项目"Android 画饼图"旨在提供一个立体和平面效果的饼图组件,适用于各种需要展示部分与整体之间关系的应用场景。下面将详细介绍如何在Android中实现饼图,以及相关的关键知识点。 首先,我们要理解饼图的基本...
在C#中画饼图,我们通常会先创建一个`Bitmap`对象作为画布,然后使用`Graphics`在该画布上绘制各个扇区。以下是一些关键步骤: 1. **初始化画布**:创建一个`Bitmap`对象,设置其大小,这将成为我们的虚拟画布。 2....
"android achat画饼图和柱图"这个项目就是针对这一需求,提供了在Android平台上绘制饼图和柱状图的功能。它基于对`chatengine`库中的柱图和饼图组件的复用和优化,为开发者提供了一套简洁且高效的图表解决方案。 ...
在数据分析中,可视化是一种强大的工具,可以帮助我们更好地理解数据的分布和特征。Jupyter Notebook 是一个广泛使用的交互式编程环境,特别适合进行数据分析和可视化。在这个场景中,我们将讨论如何使用Jupyter ...
用CSS绘制饼图,针对移动端上的展示,建议在谷歌浏览器上打开效果更佳,上传了两个html文件,pie.html是css静态画饼图,pieAuto.html是用我自己写的插件可以根据传入的参数动态绘制饼图
在Microsoft Foundation Class (MFC)库中,饼图是一种常用的数据可视化工具,它将数据集中的各个部分以扇形区域的大小表示出来,用于展示各部分占总体的比例关系。MFC并没有内置专门的饼图控件,但我们可以利用CWnd...
JavaScript 画饼图是一种在网页上可视化数据的常见方法,特别是在数据分析和信息展示中。饼图可以直观地表示各部分占整体的比例,非常适合用来展示各项数据的占比情况。在这个话题中,我们将深入探讨如何使用纯 ...
JavaScript Raphael 是一个强大的矢量图形库,它允许开发者在网页上创建复杂的图形,包括饼图。Raphael 使用SVG(Scalable Vector ...Raphael库还提供了许多其他图形和功能,如线图、柱状图等,可以进一步探索和学习。
在IT领域,可视化数据是至关重要的,而饼图是一种常用且直观的数据表示方式。本DEMO专注于演示如何绘制饼图和圆弧,帮助用户通过不同的颜色来区分各个部分,以根据百分比展示数据的比例关系。以下是对这个DEMO中涉及...
"画饼图组件"是一种常用于数据可视化工具,它能够以圆形图表的形式展示各部分数据的比例关系。在软件开发中,特别是在数据分析、报表展示或仪表板应用中,饼图组件是一个重要的元素。C# 类是面向对象编程语言C#中的...
首先,ECharts是一个由百度公司开发的开源JavaScript图表库,它提供了丰富的图表类型,如柱状图、折线图、饼图以及各种地图等,适用于网页数据可视化。ECharts的设计理念是易用、灵活且强大,支持多种数据格式和交互...
"画饼图组件(C#)"是一个专门用于在C#应用程序中创建饼图的工具,它允许开发者以图形化的方式展示数据比例和分布。饼图是一种常见的统计图表,用于显示整体与各部分之间的关系,常用于业务分析、项目管理等领域。 ...
此程序主要是用C语言编写的,用TC运行更加方便。可以实现饼图数据自行输入~