- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我第一次使用D3.js,我用这段代码画了一个条形图。
var dataset = [20, 55, 30, 40, 50, 35, 97, 75, 100, 45];
var w = 500;
var h =100;
var xScale = d3.scaleBand()
.domain(d3.range(dataset.length))
.rangeRound([0,w])
.paddingInner(0.05);
var yScale = d3.scaleBand()
.domain(d3.range(d3.max(dataset)))
.rangeRound([0,h]);
var svg = d3.select("#chart")
.append("svg")
.attr("width", w)
.attr("height", h);
svg.selectAll("rect")
.data(dataset)
.enter()
.append("rect")
.attr("x", function(d,i) {
return xScale(i);
})
.attr("y",function(d){console.log(yScale(d)); return h - yScale(d);})
.attr("width", xScale.bandwidth())
.attr("fill", function(d) {if(d<50) { return "blue" }
else if (d>=50) { return "red" }; })
.attr("height", function(d){return yScale(d);
});
但是我得到了这个结果:
我无法理解为什么我的某个特定值会“未定义”。
最佳答案
问题在于 yScale 域,并使用 d3.range 设置域。
d3.range(100) 创建一个包含 100 个元素的数组,其值从 0 到 99。因此,当您尝试获取 yScale(100) 时,“100”不在域中。
例如,对于您的数据,您建议使用线性比例
var yScale = d3.scaleLinear()
.domain([0, d3.max(dataset)])
.rangeRound([0,h]);
或者如果需要使用d3.range,则将元素数量设置为1+最大值,例如:
var yScale = d3.scaleRange()
.domain(d3.range(d3.max(dataset) + 1))
.rangeRound([0,h]);
关于javascript - D3.JS yScale 仅针对一个值返回 "undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61399246/
这个问题在这里已经有了答案: How to plot an image with non-linear y-axis with Matplotlib using imshow? (4 个答案) 关闭
我正在绘制带轴的条形图,yScale 在我的 yAxis 上的表现与在附加条上的表现不同。 我将 yScale 范围设置为从 (h - yPadding) 开始,以便在底部为 xAxis 标签留出额外
我第一次使用D3.js,我用这段代码画了一个条形图。 var dataset = [20, 55, 30, 40, 50, 35, 97, 75, 100, 45]; var w = 500; var
我一直在尝试将一些数据拟合到特定集合 x 和 y 的最佳拟合线。我尝试了很多次,但都没有成功,而且我似乎无法找到一种方法来使用 yscale('log') 和 xscale('log') 来拟合数据。
我有一个调用 Serieschart 的脚本。我已将图表与三个按钮链接起来,这些按钮加载不同的数据集并相应地更新图表(请参阅下面的代码)。每次选择另一个数据集时,我都想重新定义 yscale。我不知道
在某些情况下,当使用对数刻度时,matplotlib 会错误地显示带有误差条的图。假设这些数据(例如在 pylab 中): s=[19.0, 20.0, 21.0, 22.0, 24.0] v=[36
我尝试在 Chart.js 中显示带有两个 yAxis 的折线图。 我的代码: window.onload = function() { var ctx = document.getEleme
我想知道有什么区别: ax.set_yscale('log') ax.plot(a,b) 和 ax.plot(a,np.log10(b)) 在第一种情况下,我们只是将 yscale 设置为对数刻度。
Sprite Kit 依赖于 zRotation、xScale 和 yScale 而不是简单的变换属性。是因为苹果需要旋转和缩放值来计算性能更高的物理吗? 或者他们为什么不简单地公开一个变换属性而不是
我是一名优秀的程序员,十分优秀!