可视化数据分析-基于JavaScript的d3实践学习

article/2025/10/13 1:06:52

目录

一.svg简介

二.D3简介

D3功能来源

常用语法说明

三.d3可视化访问MySQL数据库

实现方法

四.具体用例实现

svg绘制直方图

svg绘制二叉树(以电影票房为例)

D3进行数据可视化(链接数据库)

D3绘制直方图​

D3绘制饼图

D3绘制力导向图

D3绘制词云图



 

一.svg简介

SVG是什么

可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言(Extensible Markup Language,XML ),用于描述二维矢量图形的一种图形格式,一般用在网页。

SVG创建工具

由于SVG是XML文件,SVG图像可以用任何文本编辑器创建,但它往往是与一个绘图程序一起使用,如Inkscape、Adobe Illustrator,更方便地创建SVG图像。

SVG使用方式

1. 浏览器直接打开

2. 在HTML中使用<img>标签引用

3. 直接在HTML中使用SVG标签

4. 作为CSS背景

SVG优点

1. 矢量的图形,不会失真任意伸缩。

2. 可被非常多的工具读取和修改(比如记事本)。

3. 与 JPEG 和 GIF 图像比起来,尺寸更小,且可压缩性更强。

4. 图像中的文本是可选的,同时也是可搜索的(很适合制作地图)。

浏览器支持

IE9+,Firefox,Chrome,Opera和Safar、iOS、Android3+ 都支持SVG。

 

二.D3简介

  D3.js 是一个基于数据的操作文档的 JavaScript 库,可以绑定任何数据到 ,支持 DIV 图案生成,也支持 SVG 图案的生成,D3提供了各种简单易用的函数,大大简化JS操作数据的难度,尤其在数据可视化方面,D3已将生成可视化的复杂步骤精简到了几个简单函数,只需输入几个简单数据,就可将数据转换绘制为各种基本图形。在操作过程中可以简单这样来解释:有一个存在若干个结点的选择区域,其中有若干个结点可以容纳数据,其结点和数据一一对应,在操作过程中实际上时将数据存放在节点中,这一过程称为绑定数据。

D3功能来源

直接引用d3.v3.js或其他d3版本文档。

常用语法说明

d3.select("body")
选择器:D3采用了一种声明式的方法,对任意节点集合的操作被称为选择。例如:

1

d3.select('#vis').append('div').style('top', '20px').style('left','20px');

selectAll("p")
选择DOM中的所有段落。由于没有存在,这将返回一个空的选择。这个选择为空,代表段落很快就会存在。

data(dataset)
计数和分析我们的数据值。如果dataset中有五个值,则之后我们的数据集将会执行5次,每个值一次。

enter()
要创建新的数据绑定的元素,需要使用enter() 。这个方法会在DOM中,然后被传递给它的数据。如果有更多的数据值比相应的DOM元素,然后进入() 创建一个新的占位符元素,关闭的引用到这个新的占位符链中的下一个步骤。

append("p")
以占位符enter() 到DOM中插入一个p元素。

text("New paragraph!")
将新创建的p和插入一个文本值的参考。

function(){return ;}

动态属性:D3 支持这种以 function 方式传入的属性,这样的属性是动态的,每次执行的时候再去调用计算获得:

1

2

3

d3.selectAll("p").style("color", function() {

  return "hsl(" + Math.random() * 360 + ",100%,50%)";

});

三.d3可视化访问MySQL数据库

实现方法

在html页面中嵌入Java代码,在tomcat的lib目录中引入mysql-connector-java-5.1.6-bin.jar包,编写Java代码取出数据库中相关数据,再在d3中进行可视化操作。

四.具体用例实现

 

svg绘制直方图


<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width"><title>直方图</title>
</head>
<body><svg id="mySVG" width="800" height="600" version="1.1"></svg><script type="text/javascript">        var mysvg = document.getElementById("mySVG");var rec= new Array();var txt=new Array();for(var i=0;i<6;i++){rec[i] = document.createElement("rect");txt[i] = document.createElement("text");mysvg.appendChild(rec[i]);mysvg.appendChild(txt[i]);var h=Math.random()*255;var r=Math.floor(Math.random()*255);var g=Math.floor(Math.random()*255);var b=Math.floor(Math.random()*255);rec[i].outerHTML="<rect x="+(45*i)+" y="+(400-h)+" width=42 height="+h+" style='fill:rgb("+r+","+g+","+b+")'/>";txt[i].outerHTML="<text x="+(10+45*i)+" y="+(400-h)+">"+Math.floor(h)+"</text>";}</script>
</body>
</html>

 

svg绘制二叉树(以电影票房为例)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>树形二叉树</title>	
</head><body>
<h1 align="center" fontsize=7>电影总票房排序文字二叉树-计科鲁俊丽-201811113010</h1>
<svg id="svg01" width=800 height=600>
</svg>
<script>var w = window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth;var h = window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight;w=w*0.98;h=h*0.9;var svg=document.getElementById("svg01");svg.setAttribute("width",w);svg.setAttribute("height",h);var x0=w/2;var y0=h;var rate=0.4*(0.5+Math.random()*0.5);var a=-Math.PI/2;var count=6;var str=["战狼2","哪吒之魔童降世","流浪地球","复仇者联盟4","终局之战","红海行动","美人鱼","唐人街探案2","我和我的祖国","我不是药神","中国机长","速度与激情8","西虹市首富","速度与激情7","捉妖记","复仇者联盟3:无限战争","捉妖记2","羞羞的铁拳","疯狂的外星人","海王","变形金刚4:绝迹重生","前任3:再见前任","毒液:致命守护者","功夫瑜伽","飞驰人生","侏罗纪世界2","寻龙诀","烈火英雄","西游伏妖篇","港囧",	"变形金刚5:最后的骑士","少年的你","疯狂动物城","魔兽","复仇者联盟2:奥创纪元","夏洛特烦恼","速度与激情:特别行动","芳华","侏罗纪世界","蜘蛛侠:英雄远征","头号玩家","后来的我们","一出好戏","阿凡达","摔跤吧!爸爸","扫毒2天地对决","人再囧途之泰囧","无双","西游降魔篇","美国队长3:英雄内战","碟中谍6:全面瓦解","寻梦环游记	","西游记之孙悟空三打白骨精","误杀","加勒比海盗5:死无对证","长城","湄公河行动","叶问4","心花路放金刚:骷髅岛煎饼侠","大黄蜂","极限特工:终极回归","澳门风云3","生化危机6:终章","攀登者","变形金刚3","西游记之大闹天宫","巨齿鲨","乘风破浪","神偷奶爸3","惊奇队长","盗墓笔记","功夫熊猫3","狂暴巨兽","奇幻森林","澳门风云2","西游记之大圣归来","泰坦尼克号3D版","比悲伤更悲伤的故事	","哥斯拉2:怪兽之王","老炮儿","超时空同居","绝地逃亡","阿丽塔:战斗天使","智取威虎山3D","十二生肖","智取威虎山","碟中谍5:神秘国度","银河补习班","冰雪奇缘2","星球大战:原力觉醒","蚁人2:黄蜂女现身","狮子王","从你的全世界路过","唐人街探案","叶问3","X战警:天启","反贪风暴4","无名之辈","北京遇上西雅图之不二情书,钢铁侠3","蜘蛛侠:英雄归来","霍比特人3:去而复归","大闹天竺","星际穿越","奇异博士","无问西东","天将雄师","神秘巨星","雷神3:诸神黄昏","猩球崛起:终极之战","金刚狼3:殊死一战","X战警:逆转未来","终结者:创世纪","美国队长2","西游记女儿国	","致我们终将逝去的青春","私人订制","猩球崛起2:黎明之战","熊出没·原始时代","画皮II","狼图腾","爸爸去哪儿","使徒行者2:谍影行动","铁道飞虎","环太平洋","悟空传","银河护卫队2","正义联盟	","鬼吹灯之九层妖塔","寒战2 宠爱","碟中谍4:幽灵协议","唐山大地震","蚁人","分手大师","摩天营救","让子弹飞","情圣","黑豹"];var sign=["1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1"];function show(x0,y0,rate,a,count)
{//var L=L*rate*(Math.random()*0.5+0.5);var aL=a-Math.PI/4*(Math.random()*0.5+0.5);var aR=a+Math.PI/4*(Math.random()*0.5+0.5);var stri=str[0];for(var i=Math.pow(2,6-count)-1;i<Math.pow(2,7-count)-1;i++){if(sign[i]=="1"){stri=str[i];sign[i]="0";i=Math.pow(2,7-count)-1;	}};var fontsize=count*6;var L=stri.length*fontsize;var x1=x0;var y1=y0;var x2=x1+L*Math.cos(a);var y2=y1+L*Math.sin(a);var words=document.createElement("text");svg.appendChild(words);words.outerHTML="<text x="+x1+" y="+y1+" transform='rotate("+(a*180)/Math.PI+","+x1+","+y1+")' fill='steelblue' font-size="+fontsize+">"+stri+"</text>"if(count>0){show(x2,y2,rate,aL,count-1);show(x2,y2,rate,aR,count-1);if(count==1){var apple=document.createElement("circle");svg.appendChild(apple);apple.outerHTML="<circle cx="+x2+" cy="+y2+" r=4 fill='red'/>"}}
}show(x0,y0,rate,a,count);
</script>
</body>
</html>

D3进行数据可视化(链接数据库)

D3绘制直方图

<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<head>
<meta charset="utf-8">
</head>
<body  charset="utf-8">
<div id="wc"></div>
<%@ page contentType="text/html; charset=gb2312" %> 
<%@ page language="java" %> 
<%@ page import="com.mysql.jdbc.Driver" %> 
<%@ page import="java.sql.*" %> 
<% out.print("<center><h1><font color=steelblue>2021年影视剧全平台播放量统计直方图-5月24日数据</h1></center>"); out.print("<center><h2><font color=steelblue>来源:骨朵数据</h2></center>"); //驱动程序名 String driverName="com.mysql.jdbc.Driver"; //数据库用户名 String userName="root"; //密码 String userPasswd="password"; //数据库名 String dbName="engword"; //表名 String tableName="episoderank"; String tableName1="nodeluxun"; String tableName2="edgesluxun";//联结字符串 Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/engword?useUnicode=true&characterEncoding=utf8&useSSL=false","root","password"); Statement statement = connection.createStatement(); float charcount[]=new float[40];String occu[]=new String[40];for(int i=1;i<41;i++){		String sql="SELECT * FROM "+tableName+" where id = '"+i+"'"; String str="  ";float per=1;ResultSet rs = statement.executeQuery(sql);while(rs.next()){str=rs.getString(2);per=rs.getFloat(3);// out.print(per);//out.print(str);}charcount[i-1]=per;occu[i-1]=str;rs.close();								}String name[]=new String[20];String image[]=new String[20];String intro[]=new String[20];int source[]=new int[20];int target[]=new int[20];String relation[]=new String[20];for(int i=1;i<21;i++){		String sql="SELECT * FROM "+tableName1+" where id = '"+i+"'"; String str="  ";String str1=" ";String str2=" ";ResultSet rs = statement.executeQuery(sql);while(rs.next()){str=rs.getString(2);str1=rs.getString(3);str2=rs.getString(4);}name[i-1]=str;image[i-1]=str1;intro[i-1]=str2;rs.close();								}for(int i=1;i<21;i++){		String sql1="SELECT * FROM "+tableName2+" where id = '"+i+"'"; int nums=0;int numt=0;String str2=" ";ResultSet rs = statement.executeQuery(sql1);while(rs.next()){nums=rs.getInt(2);numt=rs.getInt(3);str2=rs.getString(4);}source[i-1]=nums;target[i-1]=numt;relation[i-1]=str2;rs.close();								}statement.close(); connection.close(); 
%><script src="d3.v4.js"></script><script src="d3.layout.cloud.js"></script><script>var color = d3.scaleOrdinal(d3.schemeCategory10);var w=window.innerWidth;var h=window.innerHeight;w=w;h=h*2.5;/*-----------------------------------------------直方图------------------------------------------------------*/
//var color=d3.scale.category10();var dataset=new Array(14);//var dataAlphabet=new Array(14);var occupation=new Array(14);<%for (int i=0;i<14;i++){%>//dataset[i]=Math.floor(Math.random()*500);dataset[<%=i%>]=<%=charcount[i]%>;   //js的代码occupation[<%=i%>]='<%=occu[i]%>';<% }%>var ww=w/dataset.length;var svg=d3.select("body").append("svg").attr("width",w).attr("height",h);var rect=svg.selectAll("rect").data(dataset).enter().append("rect").attr("x",function(d,i){return 120+i*w*0.85/dataset.length}).attr("y",function(d){return 0.4*h-d*10}).attr("width",ww*0.7).attr("height",function(d){return d*10}).attr("fill",function(d,i){return "steelblue"});var rect=svg.selectAll("text").data(dataset).enter().append("text").attr("x",function(d,i){return 100+i*w*0.85/dataset.length}).attr("y",function(d){return 0.4*h-10*d+8}).text(function(d){return d+"亿"}).attr("dx",ww/2).attr("dy","-1em").attr("text-anchor","middle").attr("font-size",15).attr("fill",'black');			var rectA=svg.selectAll("text1").data(occupation).enter().append("text").attr("x",function(d,i){return 100+i*w*0.85/occupation.length}).attr("y",function(d){return 0.4*h+23}).attr("font-size",15).text(function(d){return d}).attr("dx",ww/2).attr("dy","-1em").attr("text-anchor","middle").attr("font-size",10).attr("fill","black");	</script></body>
</html>

D3绘制饼图

<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><body  charset="utf-8">
<div id="wc"></div>
<%@ page contentType="text/html; charset=utf-8" %> 
<%@ page language="java" %> 
<%@ page import="com.mysql.jdbc.Driver" %> 
<%@ page import="java.sql.*" %> 
<% out.print("<center><h1><font color=steelblue>2021年影视剧全平台播放量统计-5月24日数据</h1></center>"); out.print("<center><h2><font color=steelblue>来源:骨朵数据</h2></center>"); //驱动程序名 String driverName="com.mysql.jdbc.Driver"; //数据库用户名 String userName="root"; //密码 String userPasswd="password"; //数据库名 String dbName="engword"; //表名 String tableName="episoderank"; Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/engword?useUnicode=true&characterEncoding=utf8&useSSL=false","root","password"); Statement statement = connection.createStatement(); float charcount[]=new float[40];String occu[]=new String[40];for(int i=1;i<41;i++){		String sql="SELECT * FROM "+tableName+" where id = '"+i+"'"; String str="  ";float per=1;ResultSet rs = statement.executeQuery(sql);while(rs.next()){str=rs.getString(2);per=rs.getFloat(3);// out.print(per);//out.print(str);}charcount[i-1]=per;occu[i-1]=str;rs.close();								}statement.close(); connection.close(); 
%><script src="d3.v4.js" charset="utf-8"></script> <script>var w=window.innerWidth|| document.documentElement.clientWidth|| document.body.clientWidth;var h=window.innerHeight|| document.documentElement.clientHeight|| document.body.clientHeight;var width = w*0.98;var height =h*0.96;var dataset=new Array(14);			  var total=0;<%for (int i=0;i<14;i++){%>dataset[<%=i%>]=['<%=occu[i]%>',<%=charcount[i]%>];	// total+=dataset1[<%=i%>][1];<% }%>//转化数据为适合生成饼图的对象数组		var pie = d3.pie().value(function(d){return d[1];});innerRadius = 50;//圆环内半径var arc=d3.arc()//设置弧度的内外半径,等待传入的数据生成弧度.innerRadius(innerRadius).outerRadius(function (d) {var value=d.value;return value*5+ innerRadius;});		var svg=d3.select("body").append("svg").attr("width",width).attr("height",height);var color = d3.scaleOrdinal(d3.schemeCategory20c);//准备分组,把每个分组移到图表中心var arcs=svg.selectAll("g").data(pie(dataset)).enter().append("g")//移到图表中心.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");//translate(a,b)a表示横坐标起点,b表示纵坐标起点//为组中每个元素绘制弧形路路径arcs.append("path")//每个g元素都追加一个path元素用绑定到这个g的数据d生成路径信息.attr("fill",function(d,i){//填充颜色return color(i);}).attr("d",arc)//将角度转为弧度(d3使用弧度绘制.on('mouseover',function(d,i){d3.select(this).attr("fill", d3.rgb(color(i)).brighter());	svg.append("text").attr("id","info").attr("x",width/2).attr("y",height/2).attr("text-anchor","middle").attr("font-size",20).text(d.data[0]);svg.append("text").attr("id","value").attr("x",width/2).attr("y",height/2+24).attr("text-anchor","middle").attr("font-size",20).text(d.value+"亿");}).on('mouseout',function(d,i){d3.select(this).attr("fill",color(i));	d3.select("#info").remove();d3.select("#value").remove();});arcs.append("text").attr("transform",function(d){var x = arc.centroid(d)[0];var y = arc.centroid(d)[1];return "translate(" + x + "," + y + ")";}).attr("text-anchor","middle").attr("font-size",function(d) { return d.data[1]*0.8 + "px"; }).text(function(d){				return d.value;});</script></body>
</html>

 

D3绘制力导向图

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta  meta charset="utf-8">
<h1 align="center"><font color=black > 影视剧觉醒年代人物鲁迅关系图</h1><h2  align="right">
来源:北京鲁迅博物馆
</h2>
<style>path{fill: none;stroke: #666;stroke-width: 1.5px;}circle {stroke: #333;stroke-width: 1.5px;}text {font: 10px sans-serif;pointer-events: none;}.tooltip{  position: absolute;  width: 340px;  height: auto;  font-family: simsun;  font-size: 10px;text-align: left;  color: black;  border-width: 1px solid black;  background-color: 7FFF00;  border-radius: 3px;  }  .tooltip:after{   content: '';  position: absolute;  bottom: 100%;  left: 20%;  margin-left: -3px;  width: 0;  height: 0;  border-bottom: 12px solid black;  border-right: 12px solid transparent;  border-left: 12px solid transparent;  }  </style>  
</head><body style=" opacity:1"><div id="wc"></div>
<%@ page contentType="text/html; charset=gb2312" %> 
<%@ page language="java" %> 
<%@ page import="com.mysql.jdbc.Driver" %> 
<%@ page import="java.sql.*" %> 
<% //驱动程序名 String driverName="com.mysql.jdbc.Driver"; //数据库用户名 String userName="root"; //密码 String userPasswd="password"; //数据库名 String dbName="engword"; //表名 //表名 String tableName1="nodeluxun"; String tableName2="edgesluxun";Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/engword?useUnicode=true&characterEncoding=utf8&useSSL=false","root","password"); Statement statement = connection.createStatement(); //float charcount[]=new float[20];String name[]=new String[20];String image[]=new String[20];String intro[]=new String[20];int source[]=new int[20];int target[]=new int[20];String relation[]=new String[20];for(int i=1;i<21;i++){		String sql="SELECT * FROM "+tableName1+" where id = '"+i+"'"; String str="  ";String str1=" ";String str2=" ";ResultSet rs = statement.executeQuery(sql);while(rs.next()){str=rs.getString(2);str1=rs.getString(3);str2=rs.getString(4);// out.print(per);//   out.print(str);}name[i-1]=str;image[i-1]=str1;intro[i-1]=str2;//	out.print(name[i-1]);rs.close();								}for(int i=1;i<21;i++){		String sql1="SELECT * FROM "+tableName2+" where id = '"+i+"'"; int nums=0;int numt=0;String str2=" ";ResultSet rs = statement.executeQuery(sql1);while(rs.next()){nums=rs.getInt(2);numt=rs.getInt(3);str2=rs.getString(4);//   out.print(str2);}source[i-1]=nums;target[i-1]=numt;relation[i-1]=str2;//	out.print(name[i-1]);rs.close();								}statement.close(); connection.close(); %>
<script  src="https://d3js.org/d3.v3.min.js"></script><script type="text/javascript">var  width=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)*0.98;var  height=(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)*0.9;var  img_h=50;var  img_w=50;var  radius=10;var svg=d3.select("body")  .append("svg")  .attr("width",width)  .attr("height",height); 	var nodes=new Array(20);			  <%for (int i=0;i<20;i++){%>nodes[<%=i%>]={name:"<%=name[i]%>",image:"<%=image[i]%>",intro:"<%=intro[i]%>"};	// total+=dataset1[<%=i%>][1];<% }%>	var edges=new Array(20);			  <%for (int i=0;i<20;i++){%>edges[<%=i%>]={source:<%=source[i]%>,target:<%=target[i]%>,relation:"<%=relation[i]%>"};	// total+=dataset1[<%=i%>][1];<% }%>	var force=d3.layout.force().nodes(nodes).links(edges).size([width,height]).linkDistance(150).charge(-1200).start();	//提示框部分var tooltip=d3.selectAll("body")  .append("div")  .attr("class","tooltip")  .style("opacity",0.0); //箭头绘制	var defs = svg.append("defs");var radius=10;var arrowMarker = defs.append("marker").attr("id","arrow").attr("markerUnits","strokeWidth").attr("markerWidth","4").attr("markerHeight","4").attr("viewBox","0 0 4 4").attr("refX",20+radius/8-2)   //实际是radius/strokeWidth.attr("refY",2).attr("orient","auto");var arrow_path = "M0,1 L4,2 L0,3 L0,0";arrowMarker.append("path").attr("d",arrow_path); 					var color=d3.scale.category20();var path = svg.selectAll("path").data(edges).enter().append("path").attr("id", function(d,i) {return "edgepath" +i;}).attr("class","edges").attr("marker-end","url(#arrow)");		var pathtext = svg.selectAll('.pathText').data(edges).enter().append("text").attr("class","pathText").append('textPath').attr("text-anchor", "middle")//居中.attr("startOffset","50%").attr('xlink:href', function(d,i) { return "#edgepath" + i; }).text(function(d) { return d.relation; });						  var  img_h=50;var  img_w=50;var  radius=23;								var  circles=svg.selectAll("forceCircle").data(nodes).enter().append("circle").attr("class","forceCircle").attr("r",radius).style("stroke","DarkGray").style("stroke-width","1.0px").attr("fill", function(d, i){//创建圆形图片var defs = svg.append("defs").attr("id", "imgdefs");var catpattern = defs.append("pattern").attr("id", "catpattern" + i).attr("height", 1).attr("width", 1);catpattern.append("image").attr("x", - (img_w / 2 - radius+5.8)).attr("y", - (img_h / 2 - radius+3.5)).attr("width", img_w+11).attr("height", img_h+6).attr("xlink:href","image/"+d.image);return "url(#catpattern" + i + ")";}).on("mouseover",function(d,i){    //加入提示框tooltip.html("角色简介:"+d.intro).style("left",(d3.event.pageX)+"px")  .style("top",(d3.event.pageY+20)+"px")  .style("opacity",1.0);  }).on("mousemove",function(d){            tooltip.style("left",(d3.event.pageX)+"px")  .style("top",(d3.event.pageY+20)+"px"); })           .on("mouseout",function(d){  tooltip.style("opacity",0.0); }).call(force.drag);  var texts=svg.selectAll(".forceText").data(nodes).enter().append("text").attr("class","forceText").attr("x",function(d){return d.x;}).attr("y",function(d){return d.y;}).style("stroke", "#2F4F4F").attr("dx","-1.5em").attr("dy","3em").text(function(d){return d.name;});force.on("tick",function(){path.attr("d", function(d) {var dx = d.target.x - d.source.x;//增量var	dy = d.target.y - d.source.y;return "M" + d.source.x + ","+ d.source.y + "L" + d.target.x + "," + d.target.y;});circles.attr("cx",function(d){return d.x;});circles.attr("cy",function(d){return d.y;});texts.attr("x",function(d){return d.x;});texts.attr("y",function(d){return d.y;});});</script></body>

D3绘制词云图

<html>
<meta charset=utf-8>
<body>
<div id="wc"></div>
<%@ page contentType="text/html; charset=utf-8" %> 
<%@ page language="java" %> 
<%@ page import="com.mysql.jdbc.Driver" %> 
<%@ page import="java.sql.*" %> 
<% out.print("<center><h1><font color=steelblue>词云图</h1></center>"); //驱动程序名 String driverName="com.mysql.jdbc.Driver"; //数据库用户名 String userName="root"; //密码 String userPasswd="password"; //数据库名 String dbName="engword"; //表名 String tableName="episoderank"; //联结字符串 Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/engword?useUnicode=true&characterEncoding=utf8&useSSL=false","root","password"); Statement statement = connection.createStatement(); String name[]=new String[100];float rate[]=new float[100];// int count[] = new int[26];for(int i=0;i<45;i++){//String sql="SELECT * FROM "+tableName+" where english like 'a%' "+"order by english"; String sql="SELECT * FROM "+tableName+" where id = "+(i+1)+" "; ResultSet rs = statement.executeQuery(sql);  // 输出每一个数据值 float per=0;String na="";while(rs.next()) { per=rs.getFloat(3);na=rs.getString(2);}name[i]=na;rate[i]=per;//count[i]=j;//out.print(" "+j+" <br>"); rs.close();}statement.close(); connection.close(); %><script src="d3.v4.js" charset="utf-8"></script> <script src="d3.layout.cloud.js"></script><script>color = d3.scaleOrdinal(d3.schemeCategory10);var w = window.innerWidth|| document.documentElement.clientWidth|| document.body.clientWidth;var h = window.innerHeight|| document.documentElement.clientHeight|| document.body.clientHeight;var width = w * 0.98;var height = h * 0.9;	var words = new Array(45);<%for(int i=0;i<45;i++){%>					words[<%=i%>]={name:"<%=name[i]%>",size:<%=rate[i]%>};<%}%>var wc=d3.layout.cloud().size([w, h]).words(words).padding(5).rotate(function() { return ~~(Math.random() * 2) * 90; }).font("Impact").fontSize(function(d) { return d.size; }).on("end", draw).start();function draw(words) {d3.select("body").append("svg").attr("width", w).attr("height", h).append("g").attr("transform", "translate(300,200)").selectAll("text").data(words).enter().append("text").style("font-size", function(d) { return d.size+"px"; }).style("font-family", "Impact").style("fill",function(d,i){return color(i);}).attr("text-anchor", "middle").attr("transform", function(d) {return "translate(" + [d.x+w/4, d.y+h/4] + ")rotate(" + d.rotate + ")";}).text(function(d) { return d.name; });}</script>
</body>
</html>


http://chatgpt.dhexx.cn/article/WJswHPIj.shtml

相关文章

Kindle产品评论数据分析---基于excel的分析过程

目录 业务背景 一&#xff09;明确分析目的 二&#xff09;数据采集 三&#xff09;数据清洗 四&#xff09;数据分析与构建模型 1、相关产品的评论数排名和平均评分反映的问题 2、各评论占比&#xff0c;推荐评论中好评占比 3、kindle相关产品随时间变化其评论数的变化…

数据挖掘HeartbeatClassification——数据分析

如同计算机视觉中一样&#xff0c;在训练目标识别的网络之前&#xff0c;会对图片进行预处理&#xff0c;如 裁切&#xff0c;旋转、放大缩小&#xff0c;以加强网络的泛化能力。在数据挖掘中&#xff0c;我们首先要做的就是对拥有的数据进行分析( 涉及到《概率论与数理分析》的…

javaScript数据可视化

文章目录 canvas画布介绍绘制线段起始点设置其他点设置&#xff08;可以有多个&#xff09;划线方法 属性填充线段颜色线段宽度线段例子 绘制矩形第一种方式&#xff1a;第二种方式矩形例子 绘制圆形圆形例子 清除画布清除例子 绘制文字属性 svg介绍&#xff1a;基本的svg元素例…

Python交互式数据分析报告框架:Dash

译者序 原文于2017年6月21日发布&#xff0c;时过半载&#xff0c;将这篇既不是教程&#xff0c;也不是新闻的产品发布稿做了一番翻译&#xff0c;为何&#xff1f;只因去年下半年的时候&#xff0c;用R语言的博哥和龙少有Shiny这样的框架可以开发交互式整合Web数据分析报告&am…

【数据可视化】免费开源BI工具 DataEase 之血缘关系分析

近期&#xff0c;DataEase 发布的版本 V1.8 版本中&#xff0c;在系统管理模块新增了血缘分析功能&#xff0c;可以支持对数据源、数据集、仪表板做关联分析&#xff0c;支持按表格查看和按关系图查看&#xff0c;并且在删除数据源、数据集时&#xff0c;也支持查看对应的血缘分…

数据分析与数据可视化的完成,需要了解一下这四款JS库

四款出色的JavaScript库&#xff0c;帮助大家更为轻松地完成数据分析与可视化工作&#xff0c;具体如下&#xff1a; Data-Driven-Documents (D3.js) 在讨论JavaScript数据分析时忽略掉Data-Driven-Documents (D3)&#xff0c;就如同在谈论微软时忽略掉其操作系统 样。 Data-D…

数据挖掘之关联分析(实验展示以及源代码)

数据挖掘之关联分析 算法实现&#xff1a;Apriori算法和FP-growth 算法源代码 简单描述下&#xff0c;关联分析概念 关联分析概念主要参考下面的博文 原文&#xff1a;https://blog.csdn.net/qq_40587575/article/details/81022350 关联分析是从大量数据中发现项集之间有趣的…

【数据分析入门】python数据分析-探索性数据分析之多因子与对比分析可视化

文章目录 多因子与对比分析可视化理论基础假设检验与方差检验假设检验方差检验 相关系数:皮尔逊、斯皮尔曼回归:线性回归PCA与奇异值分解 代码实践交叉分析分组分析相关分析因子分析 总结代码实现 相关性线性回归PCA注意&#xff1a;sklearn中pca用的方法是奇异值分解的方法&am…

数据分析系列之挖掘建模

经过数据探索与数据预处理,得到了可以直接建模的数据,根据挖掘目标和数据形式可以建立分类与预测,聚类分析,关联规则,时序模式和偏差检测等模型,帮助企业提取数据中的商业价值. 分类与预测 对于之前的背景假设,餐饮企业会经常遇到如下问题: 如何基于菜品历史销售情况,以及节…

【大数据分析与挖掘】挖掘建模之关联分析

文章目录 一、关联规则1.1 常用的关联规则算法1.2 Apriori算法介绍1.2.1 关联规则与频繁项集1.2.2 Apriori算法的思想与性质1.2.3 Apriori算法的实现的两个过程1.2.4 Apriori算法的实现案例 一、关联规则 关联规则分析也成为购物篮分析&#xff0c;最早是为了发现超市销售数据…

Hands-on-data-analysis 动手数据分析

动手数据分析笔记 第一章 第一节 数据载入及初步观察 数据载入 df pd.read_csv(file_path)df2 pd.read_table(file_path)read_csv 函数 见CSDN 博客&#xff1a; https://blog.csdn.net/weixin_39175124/article/details/79434022 问&#xff1a;read_csv 和 read_table …

python数据分析-因子分析(转载)

python数据分析-因子分析&#xff08;转载&#xff09; &#xff08;获取更多知识&#xff0c;前往前往我的wx ————公z号 &#xff08;程式解说&#xff09; 原文来自python数据分析-因子分析

ThreeJs 数据可视化学习扫盲

一&#xff1a;前言 数据可视化是一个跨领域的行业&#xff0c;其中包含了图形学、数学、视觉传达等专业领域。 下图罗列出了一个简单的学习方向。 二&#xff1a;可视化方案以及学习路线 目前采用的是比较成熟&#xff0c;社区活跃度更高的Three.js&#xff0c;它是一个开源…

数据处理以及Hive数据分析

数据处理以及Hive数据分析 一、pandas进行数据预处理【1】待处理的一部分数据【2】原始数据文件的格式说明【3】数据预处理要求【4】 处理完成的数据字段说明【5】 实验方法使用pandas进行数据预处理 【6】解析题意【7】代码展示&#xff08;1&#xff09;读取文件&#xff08;…

Python交互式数据分析报告框架~Dash介绍

原文作者&#xff1a;Plotly,Chris Pamer 原文链接&#xff1a; https://link.jianshu.com/?thttps%3A%2F%2Fmedium.com%2F%40plotlygraphs%2Fintroducing-dash-5ecf7191b503 译者序&#xff1a;原文于2017年6月21日发布&#xff0c;时过半载&#xff0c;将这篇既不是教程…

CESI: Canonicalizing Open Knowledge Bases using Embeddings and Side Information

开放性知识库的规范化&#xff08;个人理解&#xff1a;这里的规范化实际上就是将相同语义的实体或关系聚集在一起&#xff0c;从而表示一个实体或关系&#xff09;&#xff0c;主要是OPENie提取的过程中没有进行区分&#xff0c;最近的研究发现&#xff0c;开放KBS的规范化实际…

计算机一级仿宋gb2312,仿宋gb2312字体

一般情况下&#xff0c;这款软件在试用的过程可能还有点小问题&#xff0c;但是正所谓瑕不掩瑜&#xff0c;相信用不了多久&#xff0c;只要程序猿给力点&#xff0c;这种小小的反馈不爽就可以解决。 仿宋gb2312字体字体简介 仿宋_GB2312字体是印刷字体的一种 &#xff0c;仿照…

Supervisor部署(离线部署需要提前下载部署包)

1.软件准备 下载tar包&#xff1a;wget https://pypi.python.org/packages/source/s/supervisor/supervisor-3.1.3.tar.gz 解压&#xff1a;tar -xvf supervisor-3.1.3.tar.gz 进入解压包&#xff1a;cd supervisor-3.1.3 开始安装&#xff1a;python setup.py install 下载me…

Docker 学习之 Docker 容器数据卷

容器数据卷 什么是容器数据卷 docker 理念回顾 将应用和环境打包成一个镜像&#xff01; 问题&#xff1a;数据&#xff1f;如果数据都在容器中&#xff0c;那么我们删除容器&#xff0c;数据就会丢失&#xff01;需求&#xff1a;数据可以持久化&#xff01; 容器之前可以…

Supervisor 安装与配置

文章目录 Supervisor 安装与配置一、介绍二、名词释义三、Supervisor 安装三、Supervisor 配置四、启动控制终端五、注册为系统服务六、管理界面1、管理界面的弊端 Supervisor 安装与配置 一、介绍 ​ Supervisor 是用Python开发的一个 client/server 服务&#xff0c;是Linu…