- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 d3 v3 显示箱线图,但我收到了与其他同类错误一起提到的错误:
Error: <line> attribute y2: Expected length, "NaN".
Error: <rect> attribute y: Expected length, "NaN".
完整错误信息:
Error: attribute y: Expected length, "NaN". o @ d3.v3.min.js:1 (anonymous) @ d3.v3.min.js:3 R @ d3.v3.min.js:1 da.each @ d3.v3.min.js:3 da.attr @ d3.v3.min.js:3 (anonymous) @ box.js:103 (anonymous) @ d3.v3.min.js:3 R @ d3.v3.min.js:1 da.each @ d3.v3.min.js:3 box @ box.js:19 da.call @ d3.v3.min.js:3 (anonymous) @ subject:262 (anonymous) @ d3.v3.min.js:1 t @ d3.v3.min.js:1 u @ d3.v3.min.js:1 load (async) St @ d3.v3.min.js:1 e @ d3.v3.min.js:3 (anonymous) @ subject:170
我从一个网站上得到了js代码,所以我只是改变了他们提到的参数......图表的js代码如下:
var labels = true; // show the text labels beside individual boxplots?
var margin = {
top: 30,
right: 50,
bottom: 70,
left: 50
};
var width = 800 - margin.left - margin.right;
var height = 400 - margin.top - margin.bottom;
var min = 1000,
max = -1000;
// parse in the data
d3.csv("../static/CSV/Chart_data/boxplot_year.csv?rnd='+(new Date).getTime()", function(error, csv) {
// using an array of arrays with
// data[n][2]
// where n = number of columns in the csv file
// data[i][0] = name of the ith column
// data[i][1] = array of values of ith column
var data = [];
data[0] = [];
data[1] = [];
data[2] = [];
data[3] = [];
data[4] = [];
data[5] = [];
// add more rows if your csv file has more columns
// add here the header of the csv file
data[0][0] = "Y1";
data[1][0] = "Y2";
data[2][0] = "Y3";
data[3][0] = "Y4";
data[4][0] = "Y5";
data[5][0] = "Y6";
// add more rows if your csv file has more columns
data[0][1] = [];
data[1][1] = [];
data[2][1] = [];
data[3][1] = [];
data[4][1] = [];
data[5][1] = [];
csv.forEach(function(x) {
var v1 = Math.floor(x.Y1),
v2 = Math.floor(x.Y2),
v3 = Math.floor(x.Y3),
v4 = Math.floor(x.Y4),
v5 = Math.floor(x.Y5),
v6 = Math.floor(x.Y6);
// add more variables if your csv file has more columns
var rowMax = Math.max(Math.max(v1, v2), Math.max(Math.max(v3, v4), Math.max(v5, v6)));
var rowMin = Math.min(Math.min(v1, v2), Math.min(Math.min(v3, v4), Math.min(v5, v6)));
data[0][1].push(v1);
data[1][1].push(v2);
data[2][1].push(v3);
data[3][1].push(v4);
data[4][1].push(v5);
data[5][1].push(v6);
// add more rows if your csv file has more columns
if (rowMax > max) max = rowMax;
if (rowMin < min) min = rowMin;
});
var chart = d3.box()
.whiskers(iqr(1.5))
.height(height)
.domain([min, max])
.showLabels(labels);
var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.attr("class", "box")
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// the x-axis
var x = d3.scale.ordinal()
.domain(data.map(function(d) {
console.log(d);
return d[0];
}))
.rangeRoundBands([0, width], 0.7, 0.3);
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");
// the y-axis
var y = d3.scale.linear()
.domain([min, max])
.range([height + margin.top, 0 + margin.top]);
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
// draw the boxplots
svg.selectAll(".box")
.data(data)
.enter().append("g")
.attr("transform", function(d) {
return "translate(" + x(d[0]) + "," + margin.top + ")";
})
.call(chart.width(x.rangeBand()));
// add a title
svg.append("text")
.attr("x", (width / 2))
.attr("y", 0 + (margin.top / 2))
.attr("text-anchor", "middle")
.style("font-size", "18px")
//.style("text-decoration", "underline")
.text("Grade through the years");
// draw y axis
svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("Grade") // and text1
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", ".71em")
.style("text-anchor", "end")
.style("font-size", "16px")
.text("Revenue in €");
// draw x axis
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + (height + margin.top + 10) + ")")
.call(xAxis)
.append("Year") // text label for the x axis
.attr("x", (width / 2))
.attr("y", 10)
.attr("dy", ".71em")
.style("text-anchor", "middle")
.style("font-size", "16px")
.text("Quarter");
});
// Returns a function to compute the interquartile range.
function iqr(k) {
return function(d, i) {
var q1 = d.quartiles[0],
q3 = d.quartiles[2],
iqr = (q3 - q1) * k,
i = -1,
j = d.length;
while (d[++i] < q1 - iqr);
while (d[--j] > q3 + iqr);
return [i, j];
};
}
我的 csv 文件是:
Y1,Y2,Y3,Y4,Y5,Y6
3.8,5.7,0.0,6.8,8.2,6.8
5.0,1.5,5.0,0.0,6.1,9.0
4.0,5.6,5.5,4.1,5.5,5.1
5.4,6.7,5.1,5.0,9.0,6.8
5.5,5.3,8.0,8.6,6.1,7.7
8.0,1.7,4.6,6.1,7.6,5.9
6.3,7.3,6.8,8.3,6.0,0.0
5.0,5.1,6.6,7.8,5.4,3.5
5.6,3.7,7.0,5.1,7.1,2.7
8.5,6.0,1.8,7.7,2.5,8.0
6.4,9.8,5.8,7.0,6.8,8.7
6.7,7.5,5.0,6.3,0.0,7.4
有什么想法吗?提前致谢!
最佳答案
问题似乎在于将数据传递给箱线图:
// draw the boxplots
svg.selectAll(".box")
.data(data)
.enter().append("g")
.attr("transform", function(d) {
return "translate(" + x(d[0]) + "," + margin.top + ")";
})
.call(chart.width(x.rangeBand()));
您的 data
数组是 2 元素子数组的数组,其中每个子数组由一个列标签和另一个子数组中的一列数据组成。例如,data[2][0]
是 "Y3"
但 data[2][1]
是对应年份的数据 Y3
([0, 5, 5, 5, 8, ... ]
)。
D3 对此感到困惑:它尝试将 2 元素数组中的两个值都转换为数字,当然将列子数组转换为单个数字失败并以 NaN
结尾.
您需要做的是仅将列子数组的数组传递给 .data()
。然后,对于transform
属性,将对应的label传入x
函数。 transform
中调用的函数通过索引和数据列:我们使用此索引来获取相应的标签。
因此,请尝试将上面的行替换为以下行:
// draw the boxplots
svg.selectAll(".box")
.data(data.map(function (d) { return d[1]; }))
.enter().append("g")
.attr("transform", function(d, i) {
return "translate(" + x(data[i][0]) + "," + margin.top + ")";
})
.call(chart.width(x.rangeBand()));
关于javascript - 错误 : <line> attribute y1: Expected length, "NaN",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50238237/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我是脚本新手。如何编写 Expect 脚本以通过 ssh 连接到设备并提示用户输入密码?我们使用 pin + RSA token 代码作为密码,因此我无法存储密码。 #!/usr/bin/expect
我编写了以下代码并尝试执行它。但我在执行 do {”时遇到“无效的命令名称“do”” 代码: #!/usr/bin/expect set val 0; set input 5; do { pu
我已经查看了 Expect 联机帮助页并用 Google 搜索了它,但我还没有找到 expect 的 -r 是什么。我看到这个选项以前是这样用的 expect -r "\r\n\r\n" 在 expe
我的 shebang 看起来像这样: #!/usr/bin/expect -d 当我从命令行运行脚本时,它会提供我想要的内容。 但是,我通过 crontab 运行这个脚本。是否可以将调试开关保持打开状
我是 Expect 脚本的新手。 我在 Linux 机器上为 ssh 编写了一个 Expect 脚本,在那里我在 ssh 到不同的 Linux 机器时遇到了问题。下面我复制了脚本。 !/usr/loc
Scene 1, Layer 'script', Frame 1, Line 9 1084: Syntax error: expecting identifier before this. Sc
我正在运行调试命令以将命令的输出记录到文件中。我尝试了 log_file 命令,但它没有记录输出。我的代码如下: log_file -a gdb.txt send "~/debugulator.sh
我希望 expect_user 有一个无限的(或非常大的)超时和 expect 的默认超时。有没有办法设置不同的超时?或者我是否只需要在每次更改用途之前手动执行此操作? 最佳答案 expect 和ex
我正在学习 iOS 编程(我来自 Android),我正在寻找更容易获取字符串的方法。有了这个建议,我定义了下一个宏并在一些代码片段中使用它: #define STRING_BASE @"InfoPl
你好我是 rspec 的新手,我想弄清楚将 block 传递给 expect{} 和只使用 expect() 之间的区别 这是一个简单的例子 require "rails_helper" RSpec.
我正在尝试为 React JS 运行单元测试 - 使用 jest/enzyme。 目前测试失败。不太清楚为什么,也许我没有正确调用 expect(wrapper.find)。这是我测试的一部分: F
例如,现在我有一个“root.exp”期望脚本如下: spawn ssh user@ip expect "Password:" send "password" 然后,我要发送到这个ssh服务器的exp
您好,我是 Expect 脚本编写的新手,我一直在尝试使用以下方法将 IP 地址获取到变量中: set timeout -1 spawn $env(SHELL) match_max 100000 se
expect.anything() 不适用于 expect.toBe(),但适用于 expect.toEqual() test("this will pass", () => { expect("
我有一个如下所示的简单脚本,从命令行读取 2 个数字并将它们加在一起: $cat runexp.sh #!/bin/bash echo "read 1st number" read n1 echo "
当 Linux 机器的 $IP 登录后询问密码时,下面的 expect 脚本工作正常 但在某些情况下,某些Linux机器不需要ssh密码(我们可以不用密码登录), 所以我需要更改我的期望脚本以支持没有
我正在尝试使用 expect 远程登录服务器并更改用户密码。该应用程序要求,如果您要更改的密码包含特殊字符,则将其引用。问题是,还需要引用 expect send 语句,当我尝试将两者结合起来时,脚本
下面这个简单的 expect 脚本的目标是获取远程机器上的 hostname 名称 有时期望脚本无法执行到 $IP_ADDRESS 的 ssh(因为远程机器不活动等) 所以在这种情况下,expect
我试图创建一个宏来替换, first: Some(first.as_ref().parse::().expect("Could not parse 'first'")) 我在其他模块(如 Clap w
我是一名优秀的程序员,十分优秀!