- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 d3.js 中使用了很多图表,它们在 x 轴上有负值,但我看到的 y 轴上有负值的例子很少,而且我没有一个能够开始工作。
我正在尝试创建一个图表,x 轴是我的日期,y 轴是相应的值。
我已经尝试通过操作下面链接中的代码来做到这一点:
D3 v4 bar chart X axis with negative values
我的代码如下:
var margin2 = { top: 20, right: 20, bottom: 40, left: 30 };
var height2 = 650 - margin2.top - margin2.bottom;
var width2 = 900 - margin2.left - margin2.right;
// Add svg to
var svg = d3.select('#macdChart').
append('svg').
attr('width', width2 + margin2.left + margin2.right).
attr('height', height2 + margin2.top + margin2.bottom).
append('g').
attr('transform', 'translate(' + margin2.left + ',' + margin2.top + ')');
//title
svg.append("text")
.attr("x", (width2 / 2))
.attr("y", 0 - (margin2.top / 3))
.attr("text-anchor", "middle")
.style("font-size", "16px")
.style("text-decoration", "underline")
.text("Title");
// X scale
var x2 = d3.scaleBand().
range([width2, 0])
.padding(0.1);
//y scale
var y2 = d3.scaleLinear()
.range([height2, 0]);
var xAxis = d3.axisBottom(x2);
var yAxis = d3.axisLeft(y2).
tickSize(6, 0);
// text label for the x axis
svg.append("text")
.attr("transform", "translate(" + (width2 / 2) + " ," + (height2 + margin2.top + 20) + ")")
.style("text-anchor", "middle")
.text("X Label");
function render(data) {
data.forEach(function (d) {
d.Macd = +d.Macd;
d.MacdSignal = +d.MacdSignal;
d.MacdHistogram = +d.MacdHistogram;
});
x2.domain(data.map(function (d) { return d["date"]; }));
y2.domain(d3.extent(data, function (d) { return d["MacdHistogram"]; })).nice();
svg.selectAll('.bar').
data(data).
enter().append('rect').
attr('class', function (d) {
return "bar bar--" + (d["MacdHistogram"] < 0 ? "negative" : "positive");
}).
attr('x', function (d) { return x2(d["date"]); }).
attr('y', function (d) { return y2(Math.min(0, d["MacdHistogram"])); }).
attr('height', function (d) { return Math.abs(y2(d["MacdHistogram"]) - y2(0)); }).
attr('width', x2.bandwidth());
svg.append('g').
attr('class', 'y axis').
attr('transform', 'translate(' + width2 + ',0)').
call(yAxis);
var tickNegative = svg.append('g').
attr('class', 'x axis').
attr('transform', 'translate(0,' + y2(0) + ')').
call(xAxis).
selectAll('.tick').
filter(function (d, i) { return data[i].value < 0; });
}
现在,如果我将 y 的范围从:
var y2 = d3.scaleLinear()
.range([height2, 0]);
收件人:
var y2 = d3.scaleLinear()
.range([0, height2]);
我得到的图表下方的条形值正确显示,但负值在顶部,正值在底部(如您在我的 y 轴标签上所见):
有人可以建议如何让图表准确地看它现在的样子只是翻转所以底片在底部吗?
最佳答案
在 y
位置使用 Math.max
而不是 Math.min
:
.attr('y', function (d) {
return y2(Math.max(0, d["MacdHistogram"]))
});
原因是,无论范围的方向如何,SVG 矩形总是(除非您弄乱了transform
)的宽度从左到右增加,并且高度从上到下增长。
这是一个使用虚假数据进行更改的演示:
var margin2 = {
top: 20,
right: 20,
bottom: 20,
left: 20
};
var height2 = 400 - margin2.top - margin2.bottom;
var width2 = 500 - margin2.left - margin2.right;
// Add svg to
var svg = d3.select('body').
append('svg').
attr('width', width2 + margin2.left + margin2.right).
attr('height', height2 + margin2.top + margin2.bottom).
append('g').
attr('transform', 'translate(' + margin2.left + ',' + margin2.top + ')');
//title
svg.append("text")
.attr("x", (width2 / 2))
.attr("y", 0 - (margin2.top / 3))
.attr("text-anchor", "middle")
.style("font-size", "16px")
.style("text-decoration", "underline")
.text("Title");
// X scale
var x2 = d3.scaleBand().
range([width2, 0])
.padding(0.1);
//y scale
var y2 = d3.scaleLinear()
.range([height2, 0]);
var xAxis = d3.axisBottom(x2);
var yAxis = d3.axisLeft(y2).
tickSize(6, 0);
// text label for the x axis
svg.append("text")
.attr("transform", "translate(" + (width2 / 2) + " ," + (height2 + margin2.top + 20) + ")")
.style("text-anchor", "middle")
.text("X Label");
function render(data) {
x2.domain(data.map(function(d) {
return d["date"];
}));
y2.domain(d3.extent(data, function(d) {
return d["MacdHistogram"];
})).nice();
svg.selectAll('.bar').
data(data).
enter().append('rect').
attr('class', function(d) {
return "bar bar--" + (d["MacdHistogram"] < 0 ? "negative" : "positive");
}).
attr('x', function(d) {
return x2(d["date"]);
}).
attr('y', function(d) {
return y2(Math.max(0, d["MacdHistogram"]));
}).
attr('height', function(d) {
return Math.abs(y2(d["MacdHistogram"]) - y2(0));
}).
attr('width', x2.bandwidth());
svg.append('g').
attr('class', 'y axis').
attr('transform', 'translate(' + width2 + ',0)').
call(yAxis);
var tickNegative = svg.append('g').
attr('class', 'x axis').
attr('transform', 'translate(0,' + y2(0) + ')').
call(xAxis).
selectAll('.tick').
filter(function(d, i) {
return data[i].value < 0;
});
}
var data = [{
date: 1,
MacdHistogram: 1
}, {
date: 2,
MacdHistogram: -2
}, {
date: 3,
MacdHistogram: 8
}, {
date: 4,
MacdHistogram: 3
}, {
date: 5,
MacdHistogram: 12
}, {
date: 6,
MacdHistogram: -5
}, {
date: 7,
MacdHistogram: 1
}, {
date: 8,
MacdHistogram: 9
}, {
date: 9,
MacdHistogram: -1
}, {
date: 10,
MacdHistogram: 10
}, {
date: 11,
MacdHistogram: 7
}, {
date: 12,
MacdHistogram: -8
}, {
date: 13,
MacdHistogram: 7
}, {
date: 14,
MacdHistogram: -4
}, {
date: 15,
MacdHistogram: 1
}];
render(data)
<script src="https://d3js.org/d3.v4.min.js"></script>
关于javascript - d3.js v4 条形图,y 轴上有负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46657820/
我有一个带有标志属性的枚举,我用它来表示权限。我用它来比较 if (CurrentPermissions & Permission1 == Permission1) 等... [FlagsAttrib
我在使用具有两个不同日期的 TIMEDIFF 时遇到问题。以下查询“应该”返回00:04:51 mysql> SELECT TIMEDIFF(TIME('2013-07-21 00:04:50'),T
我有一个页面抛出 JavaScript 异常: Unhandled exception at line 5144, column 13 in raphael.js0x80048270 - JavaSc
我有一个大整数,比如说 BigInteger a=Biginteger.valueOf(50); 除此之外 BigInteger a=(BigInteger.ZERO).subtract(BigInt
我正在使用 CoreLocation 框架获取我的速度和距离来计算平均速度。 在 CoreLocation 发出的第一个更新中,它显示了速度和行进距离的负值。我该如何解决这个问题? 速度是 locat
我有一个数据框“df”: x y 0 1 -1 1 -2 -3 2 3 4 3 4 5 4 9 6 我正在尝试确定 x 和 y 值的百分比是正数还是负数。所
引用自:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html 'd' '\u0054' Formats the a
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Negative ASCII value int main() { char b = 8-'3';
发现了一个令人费解的指标——事件消息计数为负值。我已确认 ServiceBus Explorer (v3.0.4) 和 Azure 门户报告相同的负值。 怎么会发生这种事? 我为 SB 队列启用了以下
我正在尝试编译一个很大程度上依赖于 libcurl 和 pcap 的自定义包,在我的机器上它工作得很好,但是当我尝试使用工具链编译它时,我收到此错误: $ /home/kavastudios/site
我正在开发一个桌面软件,它向用户每次执行主要操作收费。例如,每个 PDF 打印将向用户收取 0.1 美元的费用。 我的软件提供多线程。 . 所以,如果它运行单线程,它就可以正常工作:) 但问题是如果用
我有一个用户模型和一个工作场所模型。用户有一个字段性别(男/女),每个工作场所有很多用户。我想要选择工作场所的用户总数以及按工作场所名称分组的工作场所的女性用户总数。 这是我尝试过的。 User.se
我正在尝试在 D3 中创建一个复制 this design 的条形图.这个想法是值的范围可以从 -100 到 100 并且彼此并排显示。比例必须保持在 0-100,并使用颜色来指示数字是高于还是低于
我在使用 gcc4.4 的 Ubuntu 10.04 中遇到同样的问题,相同的代码有效使用 gcc4.1 在 RH 5.5 上很好 #include #include int main(int a
size_t 被声明为 unsigned int 所以它不能表示负值。 所以有 ssize_t 这是signed 类型的 size_t 对吗? 这是我的问题: #include #include
我正在尝试确定 x 列对于这些列中的值是否具有相同的方向(正或负)或者它们是否具有不同的方向(例如,一个为正,另一个为负)。 我目前正在使用 with确定列中的值是否为 > 0 , 0 & coun
我的 Firebird 过程采用了几个具有 bigint 值的参数。 当我从 uint64 类型的 go 程序参数调用此过程时,值大于 max int32/2 存储为负数。 如何将 bigint/ui
我正在考虑是否可以消除编译器警告。警告来自将 uint32 与 -1 进行比较。 现在只看一眼,这似乎是一件不明智的事情,因为 uint32 永远不应该为负,但我没有编写这段代码,也不熟悉 c++ 的
我有以下数据框(由负数和正数组成): df.head() Out[39]: Prices 0 -445.0 1 -2058.0 2 -954.0 3 -520.0 4 -73
我正在尝试使用库WPF Metro UI Charts,它派生自Modern UI Charts。但是,当我尝试在 Page 而不是 Window 中使用图表时,我遇到了 ClusteredColum
我是一名优秀的程序员,十分优秀!