慕雪5430657
用一个计算去处理,
lunaliu
是的,要去设置的
刘一驰
我也看不了
qq_痛恍若隔世的幸福_0
是边距的问题
qq_痛恍若隔世的幸福_0
// 线性渐变 需要手动添加 linearGradient 标签
// 径向渐变同理
function linearGradient(container, color1, color2) {
var defs = container.append("defs");
var gradient = defs
.append("linearGradient")
.attr("id", "linearColor")
.attr("x1", "0%")
.attr("y1", "0%")
.attr("x2", "0%")
.attr("y2", "100%");
gradient
.append("stop")
.attr("offset", "0%")
.style("stop-color", color1.toString());
gradient
.append("stop")
.attr("offset", "100%")
.style("stop-color", color2.toString());
return gradient;
}
150155
这是我写的第一个曲线的代码,你自己改一下吧
这是index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/style.css" media="screen" type="text/css"/>
</head>
<body>
<div id = "container"></div>
<script type="text/javascript" src="http://d3js.org/d3.v3.js"></script>
<script type = "text/javascript"src="js/index.js"></script>
</body>
</html>
------------------------------------------------------------------------------------------------------------------
这是style.css
#container{
background: #ddd;
width:500px;
height:250px;
}
path{
fill:none;
stroke:#4682B4;
stroke-width:2;
}
.domain,tick line{
stroke:grey;
stroke-width:1;
}
------------------------------------------------------------------------------------------------------------------
这是index.js
var width = 500,
height = 250,
margin = {left:50,top:30,right:20,bottom:20},
g_width = width-margin.left-margin.right,
g_height = height-margin.top-margin.bottom;
//svg
var svg = d3.select("#container")
.append("svg")
//width.height
.attr("width",width)
.attr("height",height)
var g = d3.select("svg")
.append("g")
.attr("transform","translate("+margin.left+","+margin.top+")")
var data = [1,3,5,7,8,4,3,7]
var scale_x = d3.scale.linear()
.domain([0,data.length-1])//输入范围
.range([0,g_width])//输出范围
var scale_y = d3.scale.linear()
.domain([0,d3.max(data)])
.range([g_height,0])
var line_generator = d3.svg.line()
.x(function(d,i){return scale_x(i);})
.y(function(d){return scale_y(d);})
.interpolate("cardinal")
d3.select("g")
.append("path")
.attr("d",line_generator(data))
var x_axis = d3.svg.axis().scale(scale_x),
y_axis = d3.svg.axis().scale(scale_y).orient("left");
g.append("g")
.call(x_axis)
.attr("transform","translate(0,"+g_height+")")
g.append("g")
.call(y_axis)
.append("text")
.text("Price($)")
.attr("transform","rotate(-90)")
.attr("text-anchor","end")
.attr("dy","1em")
阿常先森
添加的那个属性无效你要说清楚啊 ?
奇点先生
没有源代码
不做人了
translate(50,30)
fooooooof
YAaron
是d3.js
qq_要名字干什么_fpEY05
你div的class类名明明是contaiiner,所以js里面应该写成d3.select('#contaiiner')
拉拉德玛西亚
慕仙8036517
直接用路径的方法去获取就可以了
慕粉3727899
d3.csv("js/数据.csv", type, function(data) {
console.log(data);
}取到一组以.csv结尾的数据
慕粉3727899
因为这个函数作为CSV(url,type,function(data){})的参数传到了csv的函数里面,csv函数的具体逻辑可以去查下d3的文件,可以理解成数据是在csv中走的,只是在csv中执行了下type(d)
慕粉3727899
是因为你使用的 d3js 版本比视频中老师用的新,接口不一样。
参考 这里:
https://d3js.org.cn/document/d3-shape/#curves
使用指定的 alpha 值([0, 1]) 返回一条 Catmull–Rom 生成器。如果 alpha 为 0 则等价于 curveCardinal,如果 alpha 为 1 则会生成 chordal 曲线,如果 alpha 为 0.5 则会生成 centripetal spline
老师 使用的接口
d3.line().x().y().interpolate('cardinal')
等价于新的接口用法
d3.line().x().y().curve(CatmullRom.alpha(0.5))
里面的 0.5 设置为 0
慕粉3727899
表示的一个数据范围的输入
慕粉3727899
直接写.append("svg")就好了
慕九州8124222
兄弟 这样才对
d3.csv("data.csv", type, function(data){
console.log(data);
function type(d){
d.population = +d.population;
return d;
}
var bar_width = 50,
bar_padding = 10,
svg_width = (bar_width + bar_padding) * data.length,
svg_height=500;
});
qq_A_221
慕用6167496
版本不一样,你直接写d3.line()即可,不用svg
qq_聋子听哑巴说瞎子看见鬼了_0
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="css/style.css">
<title>barchart_horizontal</title>
</head>
<body>
<div id="container"></div>
<script type="text/javascript" src="js/d3.min.js"></script>
<script type="text/javascript" src="js/index.js"></script>
</body>
</html>
我是自己网上下了一个d3.min.js文件,放在了js文件夹下
刻命
我只能说一下概念,能力有限,不好意思。
在对应的标签中用hover样式,里面调用函数显示内容,内容里面传入对应内容节点数组的x,y参数,然后对应的调用另一个显示内容的函数,用来显示内容。
qq_麦子_13
哦。。我看到下面发现scale_x里domain输出是d.year
天上下代码
数据源长度不够
qq_乐乐_33
var width = 500,
height = 250,
margin = {left: 50, top: 30, right: 20, bottom: 20},
g_width = width - margin.left - margin.right,
g_height = height - margin.top - margin.bottom;
// 类似jq的链式调用
// 制作图中的线条
var svg = d3.select('#container')
.append("svg:svg")
// width,height
.attr('width', width)//attribute
.attr('height', height);
var g = svg.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var data = [1, 3, 5, 7, 8, 4, 3, 7];
// 放大
var scale_x = d3.scaleLinear()
.domain([0, data.length - 1])
.range([0, g_width]);
var scale_y = d3.scaleLinear()
.domain([0, d3.max(data)])
.range([g_height, 0]);// 切换坐标轴的朝向
var line_generator = d3.line()
.x(function (d, i) {
// d代表数据
// i代表下标
return scale_x(i);
})
.y(function (d) {
return scale_y(d);
})
.curve(d3.curveCatmullRom.alpha(0.5));
g.append('path').attr('d', line_generator(data));
// 制作坐标轴
var x_axis = d3.axisBottom(scale_x),
y_axis = d3.axisLeft(scale_y);
g.append("g").call(x_axis)
.attr("transform", "translate(0," + g_height + ")");
g.append("g").call(y_axis)
.append("text").text("Price($)") // 设置单位等
.attr("transform", "rotate(-90)") // 定位
.attr("text-anchor", "end")
.attr("dy", "1em");#container {
background: #ddd;
width: 500px;
height: 250px;
}
path {
fill: none;
stroke: #4682B4;
stroke-width: 2;
}
text {
fill: #000;
}
.domain,
.tick line {
stroke: gray;
}
moon_2007
sublime text
qq_尼麻麻_0
贴代码 (^·_·^),多重复看视频,还有控制台信息
QAQ ~~~ (注: 老师的是 v3版本, 可能你用的是 v4)
jiakubala