`
xinlingwuyu
  • 浏览: 138407 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

画饼图

阅读更多

<%@ 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();
%>

分享到:
评论

相关推荐

    js 画饼图 javascript

    在JavaScript的世界里,画饼图是一种常见的数据可视化方式,它能直观地展示各项比例关系,尤其适用于呈现多个部分组成整体的情况。"JS完美画饼图"这个话题涉及到使用JavaScript库或者自定义代码来创建动态、交互式的...

    piechart.zip_Labview饼状图_labview piechart_labview 画饼图_piechart la

    标题中的"piechart.zip_Labview饼状图_labview piechart_labview 画饼图_piechart lab"暗示了这个压缩包包含了一个关于在LabVIEW中创建和使用饼状图的实例或教程。描述提到"LabVIEW中实现饼图显示,提供比较好的人机...

    asp实现画饼图功能

    asp实现画饼图功能,很有用哦,asp实现画饼图功能,很有用哦

    C#354-画饼图组件源代码

    在C#编程中,画饼图是一种常用的可视化方式,它能直观地展示数据的比例和分布。本资源"**C#354-画饼图组件源代码**"提供了一个用于创建饼图的自定义组件,这对于我们进行数据分析、报告展示或者用户界面设计都非常有...

    【ASP.NET】按比例画饼图

    【ASP.NET】按比例画饼图 一个很简单的实例

    android画饼图

    "android画饼图"这个主题主要涉及到如何在Android应用中自定义一个饼状图控件。在这个项目中,开发者分享了其在GitHub上的源代码,供其他开发者学习和使用。 1. **自定义控件**:在Android中,如果系统自带的图表库...

    html5画饼图

    画饼图 使用html5加javascript技术生成饼图 简单容易理解

    Android 画饼图

    本项目"Android 画饼图"旨在提供一个立体和平面效果的饼图组件,适用于各种需要展示部分与整体之间关系的应用场景。下面将详细介绍如何在Android中实现饼图,以及相关的关键知识点。 首先,我们要理解饼图的基本...

    C#使用Graphics画饼图并添加到PDF当中

    在C#中画饼图,我们通常会先创建一个`Bitmap`对象作为画布,然后使用`Graphics`在该画布上绘制各个扇区。以下是一些关键步骤: 1. **初始化画布**:创建一个`Bitmap`对象,设置其大小,这将成为我们的虚拟画布。 2....

    android achat画饼图和柱图

    "android achat画饼图和柱图"这个项目就是针对这一需求,提供了在Android平台上绘制饼图和柱状图的功能。它基于对`chatengine`库中的柱图和饼图组件的复用和优化,为开发者提供了一套简洁且高效的图表解决方案。 ...

    数据分析,画饼图的jupyter notebook

    在数据分析中,可视化是一种强大的工具,可以帮助我们更好地理解数据的分布和特征。Jupyter Notebook 是一个广泛使用的交互式编程环境,特别适合进行数据分析和可视化。在这个场景中,我们将讨论如何使用Jupyter ...

    用CSS画饼图

    用CSS绘制饼图,针对移动端上的展示,建议在谷歌浏览器上打开效果更佳,上传了两个html文件,pie.html是css静态画饼图,pieAuto.html是用我自己写的插件可以根据传入的参数动态绘制饼图

    MFC如何画饼图

    在Microsoft Foundation Class (MFC)库中,饼图是一种常用的数据可视化工具,它将数据集中的各个部分以扇形区域的大小表示出来,用于展示各部分占总体的比例关系。MFC并没有内置专门的饼图控件,但我们可以利用CWnd...

    javascript画饼图

    JavaScript 画饼图是一种在网页上可视化数据的常见方法,特别是在数据分析和信息展示中。饼图可以直观地表示各部分占整体的比例,非常适合用来展示各项数据的占比情况。在这个话题中,我们将深入探讨如何使用纯 ...

    javascript raphael 画饼图

    JavaScript Raphael 是一个强大的矢量图形库,它允许开发者在网页上创建复杂的图形,包括饼图。Raphael 使用SVG(Scalable Vector ...Raphael库还提供了许多其他图形和功能,如线图、柱状图等,可以进一步探索和学习。

    画饼图的DEMO

    在IT领域,可视化数据是至关重要的,而饼图是一种常用且直观的数据表示方式。本DEMO专注于演示如何绘制饼图和圆弧,帮助用户通过不同的颜色来区分各个部分,以根据百分比展示数据的比例关系。以下是对这个DEMO中涉及...

    画饼图组件

    "画饼图组件"是一种常用于数据可视化工具,它能够以圆形图表的形式展示各部分数据的比例关系。在软件开发中,特别是在数据分析、报表展示或仪表板应用中,饼图组件是一个重要的元素。C# 类是面向对象编程语言C#中的...

    在Echarts 地图上画饼图

    首先,ECharts是一个由百度公司开发的开源JavaScript图表库,它提供了丰富的图表类型,如柱状图、折线图、饼图以及各种地图等,适用于网页数据可视化。ECharts的设计理念是易用、灵活且强大,支持多种数据格式和交互...

    画饼图组件(C#)

    "画饼图组件(C#)"是一个专门用于在C#应用程序中创建饼图的工具,它允许开发者以图形化的方式展示数据比例和分布。饼图是一种常见的统计图表,用于显示整体与各部分之间的关系,常用于业务分析、项目管理等领域。 ...

    如何用C语言画饼图,数据可以自行输入

    此程序主要是用C语言编写的,用TC运行更加方便。可以实现饼图数据自行输入~

Global site tag (gtag.js) - Google Analytics