//chart.js
var colors = ["#0000FF","#8A2BE2","#A52A2A","#DEB887","#5F9EA0","#7FFF00","#D2691E","#FF7F50",
"#6495ED","#FFF8DC","#DC143C","#00008B","#008B8B","#B8860B","#A9A9A9","#006400","#BDB76B",
"#8B008B","#556B2F","#FF8C00","#9932CC","#8B0000","#E9967A","#8FBC8B","#483D8B","#2F4F4F",
"#00CED1","#9400D3","#FF1493","#00BFFF","#696969","#1E90FF","#B22222","#228B22","#FF00FF",
"#FFD700","#DAA520","#808080","#008000","#ADFF2F","#FF69B4","#CD5C5C","#4B0082","#F0E68C",
"#7CFC00","#FFFACD","#ADD8E6","#F08080","#E0FFFF","#FAFAD2","#90EE90","#D3D3D3","#FFB6C1",
"#FFA07A","#20B2AA","#87CEFA","#778899","#B0C4DE","#FFFFE0","#00FF00","#32CD32","#FAF0E6",
"#FF00FF","#800000","#66CDAA","#0000CD","#BA55D3","#9370DB","#3CB371","#7B68EE","#00FA9A",
"#48D1CC","#C71585","#191970","#F5FFFA","#FFE4E1","#FFE4B5","#FFDEAD","#000080","#FDF5E6",
"#808000","#6B8E23","#FFA500","#FF4500","#DA70D6","#EEE8AA","#98FB98","#AFEEEE","#DB7093",
"#FFEFD5","#FFDAB9","#CD853F","#FFC0CB","#DDA0DD","#B0E0E6","#800080","#FF0000","#BC8F8F",
"#4169E1","#8B4513","#FA8072","#F4A460","#2E8B57","#FFF5EE","#A0522D","#C0C0C0","#87CEEB",
"#6A5ACD","#708090","#FFFAFA","#00FF7F","#4682B4","#D2B48C","#008080","#D8BFD8","#FF6347",
"#40E0D0","#EE82EE","#F5DEB3","#FFFFFF","#F5F5F5","#FFFF00","#9ACD32"]//画线图
//xsa x轴坐标刻度字符窜数组
//yva 线图的值的数组
//ct 线图的标题
var colors = ["#0000FF","#8A2BE2","#A52A2A","#DEB887","#5F9EA0","#7FFF00","#D2691E","#FF7F50"]
function drawpoly(xsa,yva,ct,zoomRate){
if (zoomRate==null) zoomRate=1;
//画布测量单位
var coordx=1000;
var coordy=1000;
//取得最大值
var maxValue=0;
for (var i=0;i<yva.length;i++)
for (var j=0;j<yva[0].length;j++)
if (yva[i][j]>maxValue)
maxValue=yva[i][j];
//取得y轴刻度值rate
var yMaxScore = maxValue*1.12;
var rate = parseInt(Math.exp( parseInt(Math.log(yMaxScore)/Math.LN10)*Math.LN10))/10
var t=parseInt(String(yMaxScore).substring(0,1));
if (t >5) rate *=10;
else if (t>2) rate *=5;
else if (t>1) rate *=4;
else rate *= 2
//x轴分度
var xMaxScore = xsa.length + 1;
//开始画图
var result="";
result += "<center><v:group style='width:400px;height:300px;position:relative;' CoordSize='"+coordx*zoomRate+","+coordy*zoomRate+"'>";
//画布
result += "<v:rect fillcolor='#CCFFFF' style='Z-INDEX:0;width:"+coordx+";height:"+coordy+";position:absolute' strokecolor='white' ></v:rect>";
//x轴
result += "<v:line from='0,"+coordy+"' to='"+coordx+","+coordy+"' strokeweight='1pt' style='Z-INDEX:1;position:absolute' ><v:stroke EndArrow='classic'/></v:line>";
//y轴
result += "<v:line from='0,"+coordy+ " to='0,0' strokeweight='1pt' style='Z-INDEX:1;position:absolute' ><v:stroke EndArrow='classic'/></v:line>";
//刻度
for (var i=yMaxScore;i>0;i-=rate)
{
result += "\t<v:line from='"+0+","+(i/yMaxScore*coordy)+"' to='10,"+(i/yMaxScore*coordy)+"' strokeweight='1pt' style='Z-INDEX:1;position:absolute' ></v:line>\n"
result += "<v:rect fillcolor='white' style='Z-INDEX:0;top:"+(i/yMaxScore*coordy-25)+";left:-70;width:70;height:90;position:absolute' strokecolor='white'>"
result += "<v:TextBox inset='0,0,0,0' style='font-size:"+8/zoomRate+"pt;'>"+(yMaxScore-i)+"</v:TextBox></v:rect>"
}
for (var i=0;i<xsa.length;i++)
{
result += "<v:rect fillcolor='white' style='Z-INDEX:0;top:"+(coordy+5)+";left:" +(i/xsa.length*(coordx-1))+";width:"+(coordx/xsa.length)+";height:90;position:absolute' strokecolor='white'>"
result += "<v:TextBox inset='-10,0,0,0' style='font-size:"+8/zoomRate+"pt;TEXT-ALIGN:center'>"+xsa[i]+"</v:TextBox></v:rect>"
}
//画线
var st="";
var sp="";
for (j=0;j<yva.length;j++)
{
st=""
for (i=0;i<yva[j].length;i++)
{
st += parseInt(i/(yva[j].length)*coordx + coordx/(yva[j].length)/2)+","+ parseInt(coordy-yva[j][i]/yMaxScore*coordy)+" ";
sp +="<v:rect title='"+yva[j][i]+"' style='Z-INDEX:0;top:" + parseInt(coordy-yva[j][i]/yMaxScore*coordy-4) + ";left:" + parseInt(i/(yva[j].length)*coordx + coordx/(yva[j].length)/2-4) + ";width:8;height:8;position:absolute'></v:rect>" //填充fillcolor='" + colors[j] +"'
//sp +="<v:rect title='"+yva[j][i]+"' style='Z-INDEX:1;top:" + parseInt(coordy-yva[j][i]/yMaxScore*coordy) + ";left:" + parseInt(i/(yva[j].length)*coordx + coordx/(yva[j].length)/2-20) + ";width:40;height:"+(coordy-parseInt(coordy-yva[j][i]/yMaxScore*coordy))+";position:absolute' fillcolor='" + colors[j] +"'></v:rect>"
}
result +="<v:PolyLine filled='false' title='"+ct[j]+"' Points= ' "+st+" ' style='position:absolute;' strokecolor='" + colors[j] + "'/>"
result +=sp
//画线标题
result += "<v:line from='"+(coordx+10)+","+((j+1)*100)+"' to='"+(coordx+60)+","+((j+1)*100)+"' style='Z-INDEX:0;position:absolute' strokecolor='"+colors[j]+"'></v:line>"
result += "<v:rect fillcolor='white' style='Z-INDEX:0;top:"+((j+1)*100-20)+";left:" +(coordx+60)+";width:"+ct[j].length*35+";height:60;position:absolute' strokecolor='white'>"
result += "<v:TextBox inset='0,0,0,0' style='font-size:"+10/zoomRate+"pt;TEXT-ALIGN:left'>"+ct[j]+"</v:TextBox></v:rect>"
}
//结束画图
result +="</v:group></center>";
return result;
}
var colors = ["#0000FF","#8A2BE2","#A52A2A","#DEB887","#5F9EA0","#7FFF00","#D2691E","#FF7F50",
"#6495ED","#FFF8DC","#DC143C","#00008B","#008B8B","#B8860B","#A9A9A9","#006400","#BDB76B",
"#8B008B","#556B2F","#FF8C00","#9932CC","#8B0000","#E9967A","#8FBC8B","#483D8B","#2F4F4F",
"#00CED1","#9400D3","#FF1493","#00BFFF","#696969","#1E90FF","#B22222","#228B22","#FF00FF",
"#FFD700","#DAA520","#808080","#008000","#ADFF2F","#FF69B4","#CD5C5C","#4B0082","#F0E68C",
"#7CFC00","#FFFACD","#ADD8E6","#F08080","#E0FFFF","#FAFAD2","#90EE90","#D3D3D3","#FFB6C1",
"#FFA07A","#20B2AA","#87CEFA","#778899","#B0C4DE","#FFFFE0","#00FF00","#32CD32","#FAF0E6",
"#FF00FF","#800000","#66CDAA","#0000CD","#BA55D3","#9370DB","#3CB371","#7B68EE","#00FA9A",
"#48D1CC","#C71585","#191970","#F5FFFA","#FFE4E1","#FFE4B5","#FFDEAD","#000080","#FDF5E6",
"#808000","#6B8E23","#FFA500","#FF4500","#DA70D6","#EEE8AA","#98FB98","#AFEEEE","#DB7093",
"#FFEFD5","#FFDAB9","#CD853F","#FFC0CB","#DDA0DD","#B0E0E6","#800080","#FF0000","#BC8F8F",
"#4169E1","#8B4513","#FA8072","#F4A460","#2E8B57","#FFF5EE","#A0522D","#C0C0C0","#87CEEB",
"#6A5ACD","#708090","#FFFAFA","#00FF7F","#4682B4","#D2B48C","#008080","#D8BFD8","#FF6347",
"#40E0D0","#EE82EE","#F5DEB3","#FFFFFF","#F5F5F5","#FFFF00","#9ACD32"]//画线图
//xsa x轴坐标刻度字符窜数组
//yva 线图的值的数组
//ct 线图的标题
var colors = ["#0000FF","#8A2BE2","#A52A2A","#DEB887","#5F9EA0","#7FFF00","#D2691E","#FF7F50"]
function drawpoly(xsa,yva,ct,zoomRate){
if (zoomRate==null) zoomRate=1;
//画布测量单位
var coordx=1000;
var coordy=1000;
//取得最大值
var maxValue=0;
for (var i=0;i<yva.length;i++)
for (var j=0;j<yva[0].length;j++)
if (yva[i][j]>maxValue)
maxValue=yva[i][j];
//取得y轴刻度值rate
var yMaxScore = maxValue*1.12;
var rate = parseInt(Math.exp( parseInt(Math.log(yMaxScore)/Math.LN10)*Math.LN10))/10
var t=parseInt(String(yMaxScore).substring(0,1));
if (t >5) rate *=10;
else if (t>2) rate *=5;
else if (t>1) rate *=4;
else rate *= 2
//x轴分度
var xMaxScore = xsa.length + 1;
//开始画图
var result="";
result += "<center><v:group style='width:400px;height:300px;position:relative;' CoordSize='"+coordx*zoomRate+","+coordy*zoomRate+"'>";
//画布
result += "<v:rect fillcolor='#CCFFFF' style='Z-INDEX:0;width:"+coordx+";height:"+coordy+";position:absolute' strokecolor='white' ></v:rect>";
//x轴
result += "<v:line from='0,"+coordy+"' to='"+coordx+","+coordy+"' strokeweight='1pt' style='Z-INDEX:1;position:absolute' ><v:stroke EndArrow='classic'/></v:line>";
//y轴
result += "<v:line from='0,"+coordy+ " to='0,0' strokeweight='1pt' style='Z-INDEX:1;position:absolute' ><v:stroke EndArrow='classic'/></v:line>";
//刻度
for (var i=yMaxScore;i>0;i-=rate)
{
result += "\t<v:line from='"+0+","+(i/yMaxScore*coordy)+"' to='10,"+(i/yMaxScore*coordy)+"' strokeweight='1pt' style='Z-INDEX:1;position:absolute' ></v:line>\n"
result += "<v:rect fillcolor='white' style='Z-INDEX:0;top:"+(i/yMaxScore*coordy-25)+";left:-70;width:70;height:90;position:absolute' strokecolor='white'>"
result += "<v:TextBox inset='0,0,0,0' style='font-size:"+8/zoomRate+"pt;'>"+(yMaxScore-i)+"</v:TextBox></v:rect>"
}
for (var i=0;i<xsa.length;i++)
{
result += "<v:rect fillcolor='white' style='Z-INDEX:0;top:"+(coordy+5)+";left:" +(i/xsa.length*(coordx-1))+";width:"+(coordx/xsa.length)+";height:90;position:absolute' strokecolor='white'>"
result += "<v:TextBox inset='-10,0,0,0' style='font-size:"+8/zoomRate+"pt;TEXT-ALIGN:center'>"+xsa[i]+"</v:TextBox></v:rect>"
}
//画线
var st="";
var sp="";
for (j=0;j<yva.length;j++)
{
st=""
for (i=0;i<yva[j].length;i++)
{
st += parseInt(i/(yva[j].length)*coordx + coordx/(yva[j].length)/2)+","+ parseInt(coordy-yva[j][i]/yMaxScore*coordy)+" ";
sp +="<v:rect title='"+yva[j][i]+"' style='Z-INDEX:0;top:" + parseInt(coordy-yva[j][i]/yMaxScore*coordy-4) + ";left:" + parseInt(i/(yva[j].length)*coordx + coordx/(yva[j].length)/2-4) + ";width:8;height:8;position:absolute'></v:rect>" //填充fillcolor='" + colors[j] +"'
//sp +="<v:rect title='"+yva[j][i]+"' style='Z-INDEX:1;top:" + parseInt(coordy-yva[j][i]/yMaxScore*coordy) + ";left:" + parseInt(i/(yva[j].length)*coordx + coordx/(yva[j].length)/2-20) + ";width:40;height:"+(coordy-parseInt(coordy-yva[j][i]/yMaxScore*coordy))+";position:absolute' fillcolor='" + colors[j] +"'></v:rect>"
}
result +="<v:PolyLine filled='false' title='"+ct[j]+"' Points= ' "+st+" ' style='position:absolute;' strokecolor='" + colors[j] + "'/>"
result +=sp
//画线标题
result += "<v:line from='"+(coordx+10)+","+((j+1)*100)+"' to='"+(coordx+60)+","+((j+1)*100)+"' style='Z-INDEX:0;position:absolute' strokecolor='"+colors[j]+"'></v:line>"
result += "<v:rect fillcolor='white' style='Z-INDEX:0;top:"+((j+1)*100-20)+";left:" +(coordx+60)+";width:"+ct[j].length*35+";height:60;position:absolute' strokecolor='white'>"
result += "<v:TextBox inset='0,0,0,0' style='font-size:"+10/zoomRate+"pt;TEXT-ALIGN:left'>"+ct[j]+"</v:TextBox></v:rect>"
}
//结束画图
result +="</v:group></center>";
return result;
}
function drawpie(xsa,yva,ct)
{
var ar=new Array()
var sum=0;
for (var i=0;i<yva.length;i++)
sum += yva[i];
var maxScale = 360<<16
for (var i=0;i<yva.length;i++)
ar[i]=yva[i]/sum;
var coordsize = 400;
var halfcoordsize = 200;
var result = "<center><v:group style='width:300px;height:300px;top:0' CoordSize='"+coordsize+","+coordsize+"'>\n";
sum=0;
var st="";
//画饼
for (var i=0;i<ar.length;i++)
{
st= "m "+halfcoordsize+","+halfcoordsize+" ae"+ halfcoordsize+","+ halfcoordsize+","+halfcoordsize+","+halfcoordsize+","+parseInt(sum*maxScale)+","+parseInt( ar[i] * maxScale)+ "xe"; st= "<v:shape fillcolor='"+colors[i]+"' coordsize='"+coordsize+","+coordsize+"' style='width:"+coordsize+"px;height:"+coordsize+"px; position=absolute' path='"+st+"' Title='"+xsa[i]+":"+parseInt(ar[i]*100+0.5)+"%'/>";
sum += ar[i];
result +=st
}
//画图例
result +="<v:rect style='Z-INDEX:0;top:"+(coordsize+5)+";left:" +((coordsize-ct[0].length*20)/2)+";width:"+(ct[0].length*20)+";height:20;position:absolute' strokecolor='white' fillcolor='white'>"
result +="<v:TextBox inset='0,0,0,0' style='font-size:10.2pt;TEXT-ALIGN:left;'>"+ct[0]+"</v:TextBox></v:rect>"
for (var i=0;i<xsa.length;i++)
{
result += "<v:rect style='Z-INDEX:0;top:"+(i*35+5)+";left:" +(coordsize+50)+";width:30;height:30;position:absolute' strokecolor='white' fillcolor='"+colors[i]+"'></v:rect>"
result += "<v:rect fillcolor='white' style='Z-INDEX:0;top:"+(i*35+5)+";left:" +(coordsize+80)+";width:"+(xsa[i].length*20+50)+";height:30;position:absolute' strokecolor='white'>"
result += "<v:TextBox inset='0,0,0,0' style='font-size:10.2pt;TEXT-ALIGN:left;'>"+xsa[i]+":"+yva[i]+"</v:TextBox></v:rect>"
}
result +="</v:group></center>";
return result;
}
//
function drawpole(xsa,yva,ct,zoomRate)
{
if (zoomRate==null) zoomRate=1;
// 分析数据,获得最大值
var maxValue=0;
for (var i=0;i<yva.length;i++)
for (var j=0;j<yva[0].length;j++)
if (yva[i][j]>maxValue)
maxValue=yva[i][j];
// 分析最大值,取得放大比例rate和坐标轴最大值maxScore yMaxScore = maxValue*1.12;
var rate = parseInt(Math.exp( parseInt(Math.log(yMaxScore)/Math.LN10)*Math.LN10))/10
var t=parseInt(String(yMaxScore).substring(0,1));
if (t >5) rate *=10;
else if (t>2) rate *=5;
else if (t>1) rate *=4;
else rate *= 2 var xMaxScore = xsa.length;
var tiMax = ct.length+1; // 获得coordsize
coordx = 1000;
coordy = 1000;
var w = coordx/xMaxScore/tiMax //柱子宽度
// 定制绘图区域
var result = "<center><v:group style='width:400px;height:300px;position:relative;' CoordSize='"+coordx*zoomRate+","+coordy*zoomRate+"'>\n"
//画画布
result += "\t<v:rect fillcolor='#CCFFFF' style='Z-INDEX:0;width:"+coordx+";height:"+coordy+";position:absolute' strokecolor='white' ></v:rect>\n"
// 画坐标轴
//x轴
result += "\t<v:line from='0,"+coordy+"' to='"+coordx+","+coordy+"' strokeweight='1pt' style='Z-INDEX:1;position:absolute' > <v:stroke EndArrow='classic'/></v:line>\n"
//y轴
result += "\t<v:line from='0,"+coordy+ " to='0,0' strokeweight='1pt' style='Z-INDEX:1;position:absolute' ><v:stroke EndArrow='classic'/></v:line>\n"
//刻度
for (var i=yMaxScore;i>0;i-=rate)
{
result += "\t<v:line from='"+0+","+(i/yMaxScore*coordy)+"' to='"+10+","+(i/yMaxScore*coordy)+"' strokeweight='1pt' style='Z-INDEX:0' ></v:line>\n"
result += "<v:rect fillcolor='white' style='Z-INDEX:0;top:"+(i/yMaxScore*coordy-25)+";left:-70;width:70;height:90;position:absolute' strokecolor='white'>"
result += "<v:TextBox inset='0,0,0,0' style='font-size:"+8/zoomRate+"pt;'>"+(yMaxScore-i)+"</v:TextBox></v:rect>"
}
for (var i=0;i<xsa.length;i++)
{
result += "<v:rect fillcolor='white' style='Z-INDEX:0;top:"+(coordy+5)+";left:" +(i/xsa.length*(coordx-1))+";width:"+(coordx/xsa.length)+";height:90;position:absolute' strokecolor='white'>"
result += "<v:TextBox inset='-10,0,0,0' style='font-size:"+8/zoomRate+"pt;TEXT-ALIGN:center'>"+xsa[i]+"</v:TextBox></v:rect>"
//result += "<v:rect style='Z-INDEX:0;top:"+(coordy+5)+";left:" +i*coordx/xsa.length+";width:"+xsa[i].length*30+";height:90;position:absolute' strokecolor='white'>"
//result += "<v:TextBox inset='0,0,0,0' style='font-size:"+8/zoomRate+"pt;'>"+xsa[i]+"</v:TextBox></v:rect>"
}
//画柱图
for (var i=0;i<yva.length;i++)
{
for (var j=0;j<yva[0].length;j++)
{
var h = (yva[i][j] / yMaxScore)*coordy;//柱子长度
result += "<v:rect style='Z-INDEX:0;width:"+w+";height:"+h+";top:"+(coordy-h)+";left:"+ (j*coordx/yva[0].length+i*w+w/2)+";position:absolute' strokecolor='white' fillcolor='"+colors[i]+"' Title=' "+ct[i]+":"+yva[i][j]+"'></v:rect>\n"
}
//画图例
result += "<v:rect style='Z-INDEX:0;top:"+(i*100+50)+";left:" +(coordx+30)+";width:30;height:50;position:absolute' strokecolor='white' fillcolor='"+colors[i]+"'></v:rect>"
result += "<v:rect style='Z-INDEX:0;top:"+(i*100+50)+";left:" +(coordx+60)+";width:"+ct[i].length*40+";height:60;position:absolute' strokecolor='white'fillcolor='white'>"
result += "<v:TextBox inset='0,0,0,0' style='font-size:"+10/zoomRate+"pt;TEXT-ALIGN:left'>"+ct[i]+"</v:TextBox></v:rect>"
}
result +="</v:group></center>"; return result;}
过几天我会贴个新的,功能有些改善
getArr(ro_flag);
if (titlArr.length>0 && xStrArr.length>0 && yValArr.length>0){
if (chartType==1)
return drawpoly(xStrArr,yValArr,titlArr);
if (chartType==2)
return drawpie(xStrArr,yValArr[0],titlArr);
if (chartType==3)
return drawpole(xStrArr,yValArr,titlArr);
}
}然后在子窗口中放个
<div id=showdiv></div>
在onload事件中加入showdiv.innerHTML=opener.drawChart(1)子窗口一定要有下面的
<html xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<title>testing VML</title>
</head>
<STYLE>
v\:* { BEHAVIOR: url(#default#VML) }
</STYLE>
我照着做了好象不行啊,画不出来。你帮我看看,还差点什么嘛?
function drawChart(chartType){
getArr(ro_flag);
if (titlArr.length>0 && xStrArr.length>0 && yValArr.length>0){
if (chartType==1)
return drawpoly(xStrArr,yValArr,titlArr);
if (chartType==2)
return drawpie(xStrArr,yValArr[0],titlArr);
if (chartType==3)
return drawpole(xStrArr,yValArr,titlArr);
}
}
修改按钮代码
<INPUT type="button" value="line" name=button1 onClick="ctype=1;window.open('chartopen.html')">
<INPUT type="button" value="pie" name=button2 onClick="ctype=2;window.open('chartopen.html');">
<INPUT type="button" value="pole" name=button3 onClick="ctype=3;window.open('chartopen.html');">
弹出html(chartopen.html)
<html xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<title>testing VML</title>
</head>
<STYLE>
v\:* { BEHAVIOR: url(#default#VML) }
</STYLE>
</HEAD><BODY>
<div id=showdiv></div>
</BODY>
</HTML>
<SCRIPT LANGUAGE="JavaScript">
<!--
showdiv.innerHTML=opener.window.drawChart(opener.window.ctype);
//-->
</SCRIPT>