以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 SVG/GML/VRML/X3D/XAML 』  (http://bbs.xml.org.cn/list.asp?boardid=21)
----  [求助]  (http://bbs.xml.org.cn/dispbbs.asp?boardid=21&rootid=&id=18483)


--  作者:flywithwind
--  发布时间:5/18/2005 3:16:00 PM

--  [求助]
我要从数据库中读数据然后将一行的数据用饼图表示,我不知道这样的饼图每一部分该如何做呢?

--  作者:一直在漂
--  发布时间:5/19/2005 11:02:00 AM

--  
饼图要用path来画,饼图的组成原理实际上就是由多个扇形拼起来的!
--  作者:flywithwind
--  发布时间:5/19/2005 3:17:00 PM

--  
谢谢!
原理我知道,可具体用SVG该怎么写呢?
--  作者:flywithwind
--  发布时间:5/19/2005 3:17:00 PM

--  
谢谢!
原理我知道,可具体用SVG该怎么写呢?
--  作者:一直在漂
--  发布时间:5/20/2005 3:20:00 PM

--  
论坛上以前有个朋友发过一个例子,非常好,现摘录如下:(你要我现写一个实在是懒得写了)
//画饼图,第一个参数是数值数组,第二个参数是年份数组
function drawPie(tmparr1,tmparr2) {
    var basePointX     = 126.;
    var basePointY     = 129.;
    var currentX       = 0.0;
    var currentY       = 0.0;
    var offsetX1       = 0.0;
    var offsetY1       = 0.0;
    var offsetX2       = 0.0;
    var offsetY2       = 0.0;
    var radius         = 125.;
    var angleSum1      = 0.;
    var angleSum2      = 0.;
    var vertexCount    = tmparr1.length;
    var xPts           = Array(vertexCount);
    var yPts           = Array(vertexCount);
    var angles         = Array(vertexCount);
    var pointPath      = "";
    var colorCount     = arrColors.length;

    var pieNode        = null;
    var gcNode         = null;
    
    var dataSum = 0.;

    for(var v=0; v<vertexCount; v++)
    {
       dataSum += Math.abs(parseFloat(tmparr1[v]));
    }    
    for(var v=0; v<vertexCount; v++)
    {
       angles[v] = 360.*Math.abs(parseFloat(tmparr1[v]))/dataSum;
    }    
    gcNode = svgDoc.getElementById("gc");
    var txtstyle = "text-anchor:left;";
    for(var v=0; v<vertexCount; v++)
    {
       angleSum2 = angleSum1 + angles[v];
       var txtpv = parseInt(Math.abs(tmparr1[v])/dataSum *10000) / 100 + "%";
       
       offsetX1 = radius*Math.cos(angleSum1*Math.PI/180);
       offsetY1 = radius*Math.sin(angleSum1*Math.PI/180);
       offsetX2 = radius*Math.cos(angleSum2*Math.PI/180);
       offsetY2 = radius*Math.sin(angleSum2*Math.PI/180);

       currentX = basePointX+offsetX2;
       currentY = basePointY-offsetY2;

      // the vertical offset must be subtracted,
      // so we need to "flip" the sign of offsetY1
       offsetY1 *= -1;

       pointPath = "M"+basePointX+","+basePointY;
       pointPath += " l"+offsetX1+","+offsetY1;
       if(angles[v] < 180 ) {
         pointPath += " A"+radius+","+radius+" 0 0 0 ";
       } else {
         pointPath += " A"+radius+","+radius+" 0 1 0 ";
       }
       pointPath += currentX+","+currentY;
       pointPath += " L"+basePointX+","+
                        basePointY+"z";

       fillColor  = "fill:" + arrColors[v%colorCount];

       txtGnode = tmparr2[v] + "," + tmparr1[v] + "," + txtpv;
       var newg = svgDoc.createElement("g");
       newg.setAttribute("onmouseover","ShowTooltip(evt,'" + txtGnode + "')" );
       newg.setAttribute("onmouseout","HideTooltip(evt)");
       gcNode.appendChild(newg);

       pieNode = svgDoc.createElement("path");
       pieNode.setAttribute("d",    pointPath);
       pieNode.setAttribute("style",fillColor);
       newg.appendChild(pieNode);
       
       var recNode = svgDoc.createElement("rect");
       recNode.setAttribute("x",253);
       recNode.setAttribute("y",(10 + v*20));
       recNode.setAttribute("width",8);
       recNode.setAttribute("height",8);
       recNode.setAttribute("style",fillColor);
       newg.appendChild(recNode);
       
       var txtNode = svgDoc.createElement("text");
       txtNode.setAttribute("x",264);
       txtNode.setAttribute("y",(15 + v*20));
       txtst = txtstyle + fillColor;
       txtNode.setAttribute("style",txtst);
       newg.appendChild(txtNode);
       texte=svgDoc.createTextNode(tmparr2[v] + "[" + txtpv + "]");
       txtNode.appendChild(texte);

       angleSum1 += angles[v];
    }
}


--  作者:一直在漂
--  发布时间:5/20/2005 3:27:00 PM

--  
脚本应该知道怎样插入到svg中吧?
<script  type="text/ecmascript>
.....
</script>
<svg onload="drawPie()">
</svg>
--  作者:flywithwind
--  发布时间:5/21/2005 9:47:00 AM

--  
谢谢你啊!问题是我要用Dom4j生成XML也就是svg文件,那些脚本语言用DOM4J该怎么写呢?
--  作者:一直在漂
--  发布时间:5/23/2005 12:24:00 PM

--  
dom4j没用过哦
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
61.523ms