新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论SVG, GML, X3D, VRML, VML, XAML, AVALON, Batik等基于XML的图形技术,以及有关GIS的应用。
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - 高级XML应用『 SVG/GML/VRML/X3D/XAML 』 → [原创]SVG柱状图[histogram]代码生成器 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 13409 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [原创]SVG柱状图[histogram]代码生成器 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 SVG/GML/VRML/X3D/XAML 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客楼主
    发贴心情 [原创]SVG柱状图[histogram]代码生成器

    迟到的文章,其实早在9月中旬已经完成,只是忙于复习迎考,忘记贴到BLOG上了,今天翻阅U盘上的旧代码,发现本代码还没有贴上,补上。

    自定义半径、颜色功能暂还没有来得及去实现,感兴趣的朋友可以补上去。

    效果图:按此在新窗口浏览图片

    SVG源码:http://blogger.org.cn/blog/uploadfile/2008111523294383.RAR

    <?xml version="1.0" encoding="utf-8"?>
    <DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <!--
    ****************************************
    作者:Qr(原创作品)
    博客:http://Qr.blogger.org.cn
    时间:09/18/2008
    功能:javascript生成SVG柱状图代码(自定义半径、颜色功能暂还没有去实现)
    ****************************************
    -->
    <html xmlns="http://www.w3.org/1999/xhtml" lang="utf-8">
        <head>
            <title>SVG柱状图[histogram]代码生成器</title>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <script type="text/javascript">
            function Histogram(data){
                if(data==""){
                    alert("请输入数据!");
                    document.getElementById("data").focus();
                    return;
                }

                var width = 1024;
                var height = 500;

                var data = data.split(",");
                var len = data.length;
                var maxVal = 0;
                var sumVal = 0;

                for(var i=0;i<len;i++){
                    data[i] = parseInt(data[i]);
                    maxVal = (maxVal > data[i])?maxVal:data[i];
                    sumVal += data[i];
                }

                var multiple = height/maxVal;

                var radius = width/(len*2+1);

                var str = "";

                for(var i=0;i<len;i++){
                    R = Math.round(Math.random()*255);
                    G = Math.round(Math.random()*255);
                    B = Math.round(Math.random()*255);
                    fill = "rgb(" + R + "," + G + "," + B + ")";
                    str += "\t\t\<g fill=\""+fill+"\"\>\n";
                    str += "\t\t\t\<rect x=\"" + (radius + (width - len*radius*2)/2 + i*radius*2) + "\" y=\"" + (height/2 + maxVal/2*multiple - data[i]*multiple + 50) + "\" width=\""+ radius + "\" height=\"" +data[i]*multiple+ "\" fill=\"" + fill + "\"/>\n";
                    str += "\t\t\t\<text x=\"" + (radius*1.25 + (width - len*radius*2)/2 + i*radius*2) + "\" y=\"" + (height/2 + maxVal/2*multiple - data[i]*multiple + 45) + "\">"+Math.round((data[i]/sumVal)*10000)/100+"%"+"\<\/text\>\n";
                    str += "\t\t\t\<text x=\"" + (radius*1.5 + (width - len*radius*2)/2 + i*radius*2) + "\" y=\"" + 570 + "\" text-anchor=\"middle\"\>"+data[i]+"\<\/text\>\n";
                    str += "\t\t\t\<path d=\"M " + (radius + (width - len*radius*2)/2 + i*radius*2) + " " + (height/2 + maxVal/2*multiple - data[i]*multiple + 50) +" L "+ (radius + (width - len*radius*2)/2 + i*radius*2 + radius) +" "+ (height/2 + maxVal/2*multiple - data[i]*multiple + 50) +" L "+(radius + (width - len*radius*2)/2 + i*radius*2 + radius) +" "+ 570 +" L "+ (radius + (width - len*radius*2)/2 + i*radius*2) +" "+570+" Z\" fill=\"url(#cylinder)\" stroke-width=\"0\" \/\>\n";
                    str += "\t\t\<\/g\>\n";
                }

                var headstr = "\<?xml version=\"1.0\" encoding=\"UTF-8\"?\>\n";
                headstr += "\<svg\n";
                headstr += "   xmlns\:svg=\"http\:\/\/www.w3.org\/2000\/svg\"\n";
                headstr += "   xmlns=\"http\:\/\/www.w3.org\/2000\/svg\"\n";
                headstr += "   xmlns\:xlink=\"http\:\/\/www.w3.org\/1999\/xlink\"\n";
                headstr += "   xml\:space=\"default\"\n";
                headstr += "   version=\"1.1\"\n";
                headstr += "   width=\"100%\"\n";
                headstr += "   height=\"100%\" viewBox=\"0 0 1024 600\"\>\n";
                headstr += "    \<defs\>\n";


                headstr += "\t\t\<linearGradient id=\"background\" x1=\"0\" y1=\"1\" x2=\"0\" y2=\"0\"\>\n";
                headstr += "\t\t\t\<stop offset=\"0\" stop-color=\"white\"/>\n";
                headstr += "\t\t\t\<stop offset=\"1\" stop-color=\"blue\"\/\>\n";
                headstr += "\t\t\<\/linearGradient\>\n";

                headstr += "\t\t\<linearGradient id=\"cylinder\" gradientUnits=\"objectBoundingBox\"\>\n";
                headstr += "\t\t\t\<stop offset=\"0%\" stop-color=\"white\" stop-opacity=\"0.3\"\/\>\n";
                headstr += "\t\t\t\<stop offset=\"10%\" stop-color=\"white\" stop-opacity=\"0.1\"\/\>\n";
                headstr += "\t\t\t\<stop offset=\"20%\" stop-color=\"white\" stop-opacity=\"0.2\"\/\>\n";
                headstr += "\t\t\t\<stop offset=\"30%\" stop-color=\"white\" stop-opacity=\"0.5\"\/\>\n";
                headstr += "\t\t\t\<stop offset=\"50%\" stop-color=\"white\" stop-opacity=\"0.2\"\/\>\n";
                headstr += "\t\t\t\<stop offset=\"100%\" stop-color=\"white\" stop-opacity=\"0\"\/\>\n";
                headstr += "\t\t\</linearGradient\>\n";

                headstr += "    \<\/defs\>\n";
                headstr += "\t\<g stroke-width=\"0\" stroke=\"black\"\>\n";
                headstr += "\t\t\<rect x=\"10\" y=\"10\" width=\"1004\" height=\"580\" fill=\"url(#background)\" stroke-width=\"2\" stroke=\"gray\"\/\>\n";

                var footstr = "\t\<\/g\>\n\<\/svg\>";

                document.getElementById("code").value=headstr+str+footstr;
            }
            </script>
        </head>
    <body>
    <h1 style="color:#e00">SVG柱状图[histogram]代码生成器</h1>
    <div>
    半径:
    <input id="radius" width="25px"/>
    </div>
    <div>
    颜色:
    <textarea id="color" style="width:600px;height:23px"></textarea>
    </div>
    <div>
    数据:
    <textarea id="data" style="width:600px;height:23px">135,55,60,100,80,90,30,80</textarea>
    </div>
    <input type="button" value="Histogram" onclick="javascript:Histogram(data.value)"/>
    <textarea id="code" style="width:100%;height:50%"></textarea>
    </body>
    </html>


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/11/15 23:39:00
     
     amani 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:22
      积分:164
      门派:XML.ORG.CN
      注册:2008/1/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给amani发送一个短消息 把amani加入好友 查看amani的个人资料 搜索amani在『 SVG/GML/VRML/X3D/XAML 』的所有贴子 引用回复这个贴子 回复这个贴子 查看amani的博客2
    发贴心情 
    请问如何让IE 支持显示 svg , 我这里IE 打开.svg 文件无法显示图形.

      另外,如何让ie 支持 javascript 直接编程绘制svg 图形,而不是写出源码string. 而能够做到这点,应该也可以通过编程绘出图形后直接获取源码的string 形式了吧(除了可能没有格式化很好).

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/11/16 2:50:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 SVG/GML/VRML/X3D/XAML 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客3
    发贴心情 
    IE本身不支持SVG,需要安装 Adodb SVG Viewer 插件(即ASV)才能显示SVG图形。

    IE+DOM+ASV好象应该可以动态修改通过<embde>嵌入的SVG。但是,通过增加命名空间的方式显示SVG,似乎没办法让ie 支持 javascript 直接编程绘制svg 图形,以下就是我曾经发出的求助贴:
    http://bbs.xml.org.cn/dispbbs.asp?boardID=21&ID=67196

    IE本身不支持SVG,所以别指望它在支持 javascript 直接编程绘制svg 图形有多大建树。FF在这方面还是不错的,不依靠插件,本身即支持SVG,只是在动画方面还有欠缺,至今未支持,但是在支持 javascript 直接编程绘制svg 图形没问题。

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/11/16 9:09:00
     
     amani 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:22
      积分:164
      门派:XML.ORG.CN
      注册:2008/1/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给amani发送一个短消息 把amani加入好友 查看amani的个人资料 搜索amani在『 SVG/GML/VRML/X3D/XAML 』的所有贴子 引用回复这个贴子 回复这个贴子 查看amani的博客4
    发贴心情 
    FF 的确兼容标准更好点,不过不知道是否可以象IE在exe 程序中加载一个webbrowser 控件那样来加载定制,进行二次开发?

      你的xhtml 源码最好也下载,因为复制出来的编码会不对,可能很多人不知道转存为utf-8 模式.
      另外,根据你的代码思路,似乎可以这样更好: 写一个模板svg, 通过xml 操作加载后修改其中根据外部参数需要改动的部分. 因为实质是xml 文件,通过实体引用也行. 这样比形成string 要更好点. 操作xml 部分,ie,ff都支持,不过方法有些不同而已.

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/11/16 15:05:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 SVG/GML/VRML/X3D/XAML 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客5
    发贴心情 
    这个我不太清楚,只是以前我也曾经通过加载webbrowser来进行二次开发,发现其实并不怎么到理想,后来就不再进行这种嵌入式的开发了,现在IE的webbrowser是否有改善,不怎么清楚,已经很长时间不去搞软件了。

    将SVG通过DOM操作生成SVG也没什么问题,问题是代码用javascript写,必须用FSO才能定盘,还要关闭一个弹出对话框,还要兼顾浏览器,实在挺烦人的。

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/11/17 9:23:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 SVG/GML/VRML/X3D/XAML 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/7/17 10:18:11

    本主题贴数5,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    109.375ms