- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两种不同车辆的 MPG 数据,如下所示:
var data = [{
"dateAdded": "2017-01-01T16:21:52.921Z",
"mpg": 25.361,
"vehicle": "car"
}, {
"dateAdded": "2017-10-17T11:05:10.280Z",
"mpg": 17.788,
"vehicle": "truck"
}, ...]
我正在尝试为同一图表上的每辆车制作一个 D3 JS 折线图,其中每辆车都有不同的线。相关代码如下。 See the JSFiddle here .
var d3svg = d3.select('svg');
var margin = {
top: 20,
right: 20,
bottom: 50,
left: 60
};
var width = +d3svg.attr('width') - margin.left - margin.right;
var height = +d3svg.attr('height') - margin.top - margin.bottom;
// massage the data
data = data.map(function (d) {
return {
vehicle: d.vehicle,
dateAdded: new Date(d.dateAdded),
mpg: d.mpg
};
});
console.log(data);
// scales
var xScale = d3.scaleTime().rangeRound([0, width]);
var yScale = d3.scaleLinear().rangeRound([height, 0]);
// create line for car
var carLine = d3.line()
.x(function(d) { if (d.vehicle.toLowerCase().indexOf('car') > -1) return xScale(d.dateAdded); })
.y(function(d) { if (d.vehicle.toLowerCase().indexOf('car') > -1) return yScale(d.mpg); });
// create line for truck
var truckLine = d3.line()
.x(function(d) { if (d.vehicle.toLowerCase().indexOf('truck') > -1) return xScale(d.dateAdded); })
.y(function(d) { if (d.vehicle.toLowerCase().indexOf('truck') > -1) return yScale(d.mpg); });
// set the domain
xScale.domain(d3.extent(data, function(d) { return d.dateAdded; }));
yScale.domain(d3.extent(data, function(d) { return d.mpg; })).nice();
// create the outer g tag
var g = d3svg.append('g')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
// add the x-axis
var xAxis = d3.axisBottom(xScale)
.ticks(d3.timeMonth.every(1))
.tickFormat(d3.timeFormat('%Y-%m'));
g.append('g')
.attr('class', 'axis axis-x')
.attr('transform', 'translate(0,' + height + ')')
.call(xAxis);
// add the y-axis
var yAxis = d3.axisLeft(yScale)
.tickFormat(d3.format('.1f'));
g.append('g')
.attr('class', 'axis axis-y')
.call(yAxis);
// add the paths that represent the data
g.append('path')
.datum(data)
.attr('fill', 'none')
.attr('class', 'line line-car')
.attr('stroke-linejoin', 'round')
.attr('stroke-linecap', 'round')
.attr('stroke-width', 1.5)
.attr('d', carLine);
g.append('path')
.datum(data)
.attr('fill', 'none')
.attr('class', 'line line-truck')
.attr('stroke-linejoin', 'round')
.attr('stroke-linecap', 'round')
.attr('stroke-width', 1.5)
.attr('d', truckLine);
我可以只用两辆车的数据之一制作图表,但如何将两者放在同一张图表上?
最佳答案
与其为每辆车创建一个线生成器,顺便说一下,这不会起作用,而是只创建一个线生成器...
var line = d3.line()
.x(function(d) {
return xScale(d.dateAdded)
})
.y(function(d) {
return yScale(d.mpg)
});
...并分离每辆车的数据:
var carData = data.filter(function(d) {
return d.vehicle === "car"
});
var truckData = data.filter(function(d) {
return d.vehicle === "truck"
});
另外,不要忘记设置路径的笔触。
这是您的代码,其中包含这些更改:
var data = [{
"dateAdded": "2017-01-01T16:21:52.921Z",
"mpg": 25.361,
"vehicle": "car"
}, {
"dateAdded": "2017-02-25T04:43:00.853Z",
"mpg": 27.45,
"vehicle": "car"
}, {
"dateAdded": "2017-02-28T22:00:22.253Z",
"mpg": 29.245,
"vehicle": "car"
}, {
"dateAdded": "2017-03-01T01:39:27.160Z",
"mpg": 23.981,
"vehicle": "car"
}, {
"dateAdded": "2017-03-25T19:50:13.226Z",
"mpg": 26.293,
"vehicle": "car"
}, {
"dateAdded": "2017-04-06T00:37:33.324Z",
"mpg": 30.148,
"vehicle": "car"
}, {
"dateAdded": "2017-04-27T02:16:09.503Z",
"mpg": 23.178,
"vehicle": "car"
}, {
"dateAdded": "2017-04-27T22:15:35.137Z",
"mpg": 32.362,
"vehicle": "car"
}, {
"dateAdded": "2017-06-05T19:24:16.413Z",
"mpg": 23.561,
"vehicle": "car"
}, {
"dateAdded": "2017-06-09T14:05:22.063Z",
"mpg": 33.38,
"vehicle": "car"
}, {
"dateAdded": "2017-06-16T03:12:01.137Z",
"mpg": 23.41,
"vehicle": "car"
}, {
"dateAdded": "2017-06-24T17:47:26.489Z",
"mpg": 32.44,
"vehicle": "car"
}, {
"dateAdded": "2017-07-02T10:27:31.963Z",
"mpg": 25.122,
"vehicle": "car"
}, {
"dateAdded": "2017-07-02T13:24:26.660Z",
"mpg": 22.021,
"vehicle": "car"
}, {
"dateAdded": "2017-07-09T02:54:02.107Z",
"mpg": 33.559,
"vehicle": "car"
}, {
"dateAdded": "2017-07-11T15:42:05.969Z",
"mpg": 30.502,
"vehicle": "car"
}, {
"dateAdded": "2017-07-20T07:08:34.474Z",
"mpg": 24.176,
"vehicle": "car"
}, {
"dateAdded": "2017-07-29T00:21:18.809Z",
"mpg": 23.633,
"vehicle": "car"
}, {
"dateAdded": "2017-08-26T11:44:02.211Z",
"mpg": 31.796,
"vehicle": "car"
}, {
"dateAdded": "2017-08-29T05:16:20.148Z",
"mpg": 26.962,
"vehicle": "car"
}, {
"dateAdded": "2017-09-01T15:56:22.616Z",
"mpg": 33.726,
"vehicle": "car"
}, {
"dateAdded": "2017-09-14T06:16:04.025Z",
"mpg": 25.916,
"vehicle": "car"
}, {
"dateAdded": "2017-09-21T13:09:23.471Z",
"mpg": 27.461,
"vehicle": "car"
}, {
"dateAdded": "2017-09-28T06:40:38.405Z",
"mpg": 29.424,
"vehicle": "car"
}, {
"dateAdded": "2017-10-12T15:03:14.717Z",
"mpg": 32.77,
"vehicle": "car"
}, {
"dateAdded": "2017-10-17T11:05:10.280Z",
"mpg": 17.788,
"vehicle": "truck"
}, {
"dateAdded": "2017-11-01T17:51:15.741Z",
"mpg": 23.392,
"vehicle": "car"
}, {
"dateAdded": "2017-11-02T18:45:57.081Z",
"mpg": 20.296,
"vehicle": "truck"
}, {
"dateAdded": "2017-11-21T09:07:29.754Z",
"mpg": 18.263,
"vehicle": "truck"
}, {
"dateAdded": "2017-11-25T12:39:35.312Z",
"mpg": 28.573,
"vehicle": "car"
}, {
"dateAdded": "2017-11-29T21:56:35.318Z",
"mpg": 19.746,
"vehicle": "truck"
}, {
"dateAdded": "2017-12-18T20:28:27.678Z",
"mpg": 20.992,
"vehicle": "truck"
}, {
"dateAdded": "2017-12-29T07:56:07.098Z",
"mpg": 15.433,
"vehicle": "truck"
}, {
"dateAdded": "2018-01-14T08:30:54.303Z",
"mpg": 25.375,
"vehicle": "car"
}, {
"dateAdded": "2018-01-17T21:27:47.570Z",
"mpg": 16.602,
"vehicle": "truck"
}, {
"dateAdded": "2018-01-23T18:55:03.076Z",
"mpg": 29.325,
"vehicle": "car"
}, {
"dateAdded": "2018-01-23T22:15:50.318Z",
"mpg": 15.516,
"vehicle": "truck"
}, {
"dateAdded": "2018-02-02T03:04:19.458Z",
"mpg": 27.97,
"vehicle": "car"
}, {
"dateAdded": "2018-02-11T08:23:55.474Z",
"mpg": 17.973,
"vehicle": "truck"
}, {
"dateAdded": "2018-02-14T13:46:43.398Z",
"mpg": 20.791,
"vehicle": "truck"
}];
var d3svg = d3.select('svg');
var margin = {
top: 20,
right: 20,
bottom: 50,
left: 60
};
var width = +d3svg.attr('width') - margin.left - margin.right;
var height = +d3svg.attr('height') - margin.top - margin.bottom;
// massage the data
data = data.map(function(d) {
return {
vehicle: d.vehicle,
dateAdded: new Date(d.dateAdded),
mpg: d.mpg
};
});
// scales
var xScale = d3.scaleTime().rangeRound([0, width]);
var yScale = d3.scaleLinear().rangeRound([height, 0]);
// create line for car
var line = d3.line()
.x(function(d) {
return xScale(d.dateAdded)
})
.y(function(d) {
return yScale(d.mpg)
});
// set the domain
xScale.domain(d3.extent(data, function(d) {
return d.dateAdded;
}));
yScale.domain(d3.extent(data, function(d) {
return d.mpg;
})).nice();
var carData = data.filter(function(d) {
return d.vehicle === "car"
});
var truckData = data.filter(function(d) {
return d.vehicle === "truck"
});
// create the outer g tag
var g = d3svg.append('g')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
// add the x-axis
var xAxis = d3.axisBottom(xScale)
.ticks(d3.timeMonth.every(1))
.tickFormat(d3.timeFormat('%Y-%m'));
g.append('g')
.attr('class', 'axis axis-x')
.attr('transform', 'translate(0,' + height + ')')
.call(xAxis);
// add the y-axis
var yAxis = d3.axisLeft(yScale)
.tickFormat(d3.format('.1f'));
g.append('g')
.attr('class', 'axis axis-y')
.call(yAxis);
// add the paths that represent the data
g.append('path')
.datum(carData)
.attr('fill', 'none')
.attr('class', 'line line-car')
.attr('stroke-linejoin', 'round')
.attr('stroke-linecap', 'round')
.attr('stroke-width', 1.5)
.attr("stroke", "blue")
.attr('d', line);
g.append('path')
.datum(truckData)
.attr('fill', 'none')
.attr('class', 'line line-truck')
.attr('stroke-linejoin', 'round')
.attr('stroke-linecap', 'round')
.attr('stroke-width', 1.5)
.attr("stroke", "red")
.attr('d', line);
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg width="900" height="600"></svg>
关于javascript - 如何将多条线添加到 D3JS 折线图中,其中因变量数据源从范围内的不同位置开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48870825/
我将 Bootstrap 与 css 和 java 脚本结合使用。在不影响前端代码的情况下,我真的很难在css中绘制这个背景。在许多问题中,人们将宽度和高度设置为 0%。但是由于我的导航栏,我不能使用
我正在用 c 编写一个程序来读取文件的内容。代码如下: #include void main() { char line[90]; while(scanf("%79[^\
我想使用 javascript 获取矩阵数组的所有对 Angular 线。假设输入输出如下: input = [ [1,2,3], [4,5,6], [7,8,9], ] output =
可以用pdfmake绘制lines,circles和other shapes吗?如果是,是否有documentation或样本?我想用jsPDF替换pdfmake。 最佳答案 是的,有可能。 pdfm
我有一个小svg小部件,其目的是显示角度列表(参见图片)。 现在,角度是线元素,仅具有笔触,没有填充。但是现在我想使用一种“内部填充”颜色和一种“笔触/边框”颜色。我猜想line元素不能解决这个问题,
我正在为带有三角对象的 3D 场景编写一个非常基本的光线转换器,一切都工作正常,直到我决定尝试从场景原点 (0/0/0) 以外的点转换光线。 但是,当我将光线原点更改为 (0/1/0) 时,相交测试突
这个问题已经有答案了: Why do people write "#!/usr/bin/env python" on the first line of a Python script? (22 个回
如何使用大约 50 个星号 * 并使用 for 循环绘制一条水平线?当我尝试这样做时,结果是垂直(而不是水平)列出 50 个星号。 public void drawAstline() { f
这是一个让球以对角线方式下降的 UI,但球保持静止;线程似乎无法正常工作。你能告诉我如何让球移动吗? 请下载一个球并更改目录,以便程序可以找到您的球的分配位置。没有必要下载足球场,但如果您愿意,也可以
我在我的一个项目中使用 Jmeter 和 Ant,当我们生成报告时,它会在报告中显示 URL、#Samples、失败、成功率、平均时间、最短时间、最长时间。 我也想在报告中包含 90% 的时间线。 现
我有一个不寻常的问题,希望有人能帮助我。我想用 Canvas (android) 画一条 Swing 或波浪线,但我不知道该怎么做。它将成为蝌蚪的尾部,所以理想情况下我希望它的形状更像三角形,一端更大
这个问题已经有答案了: Checking Collision of Shapes with JavaFX (1 个回答) 已关闭 8 年前。 我正在使用 JavaFx 8 库。 我的任务很简单:我想检
如何按编号的百分比拆分文件。行数? 假设我想将我的文件分成 3 个部分(60%/20%/20% 部分),我可以手动执行此操作,-_-: $ wc -l brown.txt 57339 brown.tx
我正在努力实现这样的目标: 但这就是我设法做到的。 你能帮我实现预期的结果吗? 更新: 如果我删除 bootstrap.css 依赖项,问题就会消失。我怎样才能让它与 Bootstrap 一起工作?
我目前正在构建一个网站,但遇到了 transform: scale 的问题。我有一个按钮,当用户将鼠标悬停在它上面时,会发生两件事: 背景以对 Angular 线“扫过” 按钮标签颜色改变 按钮稍微变
我需要使用直线和仿射变换绘制大量数据点的图形(缩放图形以适合 View )。 目前,我正在使用 NSBezierPath,但我认为它效率很低(因为点在绘制之前被复制到贝塞尔路径)。通过将我的数据切割成
我正在使用基于 SVM 分类的 HOG 特征检测器。我可以成功提取车牌,但提取的车牌除了车牌号外还有一些不必要的像素/线。我的图像处理流程如下: 在灰度图像上应用 HOG 检测器 裁剪检测到的区域 调
我有以下图片: 我想填充它的轮廓(即我想在这张图片中填充线条)。 我尝试了形态学闭合,但使用大小为 3x3 的矩形内核和 10 迭代并没有填满整个边界。我还尝试了一个 21x21 内核和 1 迭代,但
我必须找到一种算法,可以找到两组数组之间的交集总数,而其中一个数组已排序。 举个例子,我们有这两个数组,我们向相应的数字画直线。 这两个数组为我们提供了总共 7 个交集。 有什么样的算法可以帮助我解决
简单地说 - 我想使用透视投影从近裁剪平面绘制一条射线/线到远裁剪平面。我有我认为是使用各种 OpenGL/图形编程指南中描述的方法通过单击鼠标生成的正确标准化的世界坐标。 我遇到的问题是我的光线似乎
我是一名优秀的程序员,十分优秀!