- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个简单的条形图,为每条数据绘制一个矩形元素。这是我没有比例的代码的一部分,它工作正常:
const rect = svg.selectAll("rect")
.data(dataset)
.enter()
.append("rect")
.attr("x", (d, i) => (i*4))
.attr("y", (d) => h - d[1]/50)
但是,如果我添加 y 尺度,我的条就会翻转,如果我添加 x 尺度,我只能看到一个条。这是我的带有比例的代码:
const xScale = d3.scaleLinear()
.domain([0, d3.max(dataset, (d) => d[0])])
.range([padding, w - padding]);
const yScale = d3.scaleLinear()
.domain([0, d3.max(dataset, (d) => d[1])])
.range([h - padding, padding]);
//some other code
const rect = svg.selectAll("rect")
.data(dataset)
.enter()
.append("rect")
.attr("x", (d, i) => xScale(i*4))
.attr("y", (d) => yScale(d[1]/50))
这是我的带有刻度的 CodePen,它看起来像这样:http://codepen.io/enk/pen/vgbvWq?editors=1111
如果有人告诉我我做错了什么,我会非常感激。
最佳答案
D3 比例不会弄乱您的图表。这里的问题很简单。
现在,这是您的数据集:
[["1947-01-01", 243.1], ...]
如您所见,d[0]
是一个字符串(代表日期),而不是数字。而且,在 d3.scaleLinear
中,定义域是一个只有两个值的数组。
这里的解决方案是使用 scaleBand
代替:
const xScale = d3.scaleBand()
.domain(dataset.map(d => d[0]))
.range([padding, w - padding]);
并更改矩形的代码以实际使用比例(我做了几处更改,检查它们):
const rect = svg.selectAll("rect")
.data(dataset)
.enter()
.append("rect")
.attr("width", xScale.bandwidth())
.attr("x", (d => xScale(d[0]))) //xScale
.attr("height", (d => h - yScale(d[1]))) //yScale
.style("y", (d => yScale(d[1])))
.attr("data-date", (d) => d[0])
.attr("data-gdp", (d) => d[1])
.attr("class", 'bar')
这是您更新后的 CodePen:http://codepen.io/anon/pen/NdJGdo?editors=0010
关于javascript - D3 秤弄乱了我的条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42236705/
我一直在寻找一种正确的方法来使用内部负载均衡器来改造我的内部虚拟机规模集,该负载均衡器不会通过公共(public) IP 暴露在互联网上。但是,节点应该能够访问互联网来下载 github 中的一些包。
我一直在寻找一种正确的方法来使用内部负载均衡器来改造我的内部虚拟机规模集,该负载均衡器不会通过公共(public) IP 暴露在互联网上。但是,节点应该能够访问互联网来下载 github 中的一些包。
我正在使用 D3 编写一些图表组件。其中一些组件是有意通用的,因此它们可以在各种场景中重复使用。 在一个函数中,我收到一个比例对象作为参数。我想根据这是线性尺度、时间尺度还是顺序尺度采取略有不同的操作
我想看看因子值在哪里转换为数字值。我试图通过简单地添加 print 来实现这一点。到处都有说法... geom_tile2 ggplot2:::ggplot_build.ggplot functio
我有一个通过 USB 连接到我的 Ubuntu 笔记本电脑的数字秤,我想从中读取测量值。串行协议(protocol)非常简单(9600,8N1,ttyUSB0),我能够通过使用终端的 putty (V
我是一名优秀的程序员,十分优秀!