gpt4 book ai didi

javascript - D3 条形图 - 如何一起显示正值/负值?

转载 作者:行者123 更新时间:2023-11-29 10:07:32 29 4
gpt4 key购买 nike

我正在尝试在 D3 中创建一个复制 this design 的条形图.这个想法是值的范围可以从 -100 到 100 并且彼此并排显示。比例必须保持在 0-100,并使用颜色来指示数字是高于还是低于 0。

我已经设法创建了一个显示正数的简单条形图,但一旦添加负数,图表就会中断。以下代码用于创建 x 和 y 轴。如果 x 域更改为 [-100, 100],则会显示负值,但这样做会以与原始设计大相径庭的方式呈现图表。

  var y = d3.scaleBand()
.range([height, 0])
.padding(0.1);

var x = d3.scaleLinear()
.range([0, width]);

x.domain([0, 100])
y.domain(data.map(function(d) { return d.sentiment; }));

如果可能的话,任何人都可以提供一些关于生成看起来与所提供设计相似的图表的提示/指导吗?可以在下面的 JSFiddle 中找到指向我当前图表的链接:

JSFiddle

非常感谢。

最佳答案

只需使用 Math.abs() :

.attr("width", function(d){
return x(Math.abs(d.value));
})

这是演示:

  var data = [{"sentiment":"Result","value":28},{"sentiment":"Result2","value":-56}]

var margin = {top: 20, right: 20, bottom: 50, left: 70},
width = 850 - margin.left - margin.right,
height = 200 - margin.top - margin.bottom;

var y = d3.scaleBand()
.range([height, 0])
.padding(0.1);

var x = d3.scaleLinear()
.range([0, width]);

var svg = d3.select("#graph").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform",
"translate(" + margin.left + "," + margin.top + ")");

data.forEach(function(d) {
d.value = +d.value;
});

x.domain([0, 100])
y.domain(data.map(function(d) { return d.sentiment; }));

svg.selectAll(".bar")
.data(data)
.enter().append("rect")
.attr("class", "bar")
.attr("width", function(d) {return x(Math.abs(d.value)); } )
.attr("y", function(d) { return y(d.sentiment) + 15; })
.attr("height", y.bandwidth())
.attr("fill", function(d) {
if (d.value <= 0) {
return "#FC4E5C";
} else {
return "#34A232";
}
});

svg.append("g")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x));

svg.append("g")
.call(d3.axisLeft(y));

svg.append("text")
.attr("class", "x label")
.attr("text-anchor", "end")
.attr("x", width - 300)
.attr("y", height + 40)
.text("Sentiment (%)");
.bar {
margin-top: 50px;
height: 30px;
}

text {
fill: black;
font-size: 14px;
}

path {
stroke: black;
}

line {
stroke: black;
}
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="https://d3js.org/d3-selection-multi.v1.min.js"></script>
<div id="graph">
</div>

关于javascript - D3 条形图 - 如何一起显示正值/负值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40488857/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com