gpt4 book ai didi

javascript - D3js - 将垂直条形图更改为水平条形图

转载 作者:可可西里 更新时间:2023-11-01 01:42:12 25 4
gpt4 key购买 nike

我有一个成对分组的垂直条形图。我正在尝试如何水平翻转它。在我的例子中,关键字会出现在 y 轴上,比例会出现在 x 轴上。

我尝试切换各种 x/y 变量,但这当然只会产生奇怪的结果。我需要关注代码的哪些区域才能将其从垂直条切换为水平条?

My JSFiddle: Full Code

var xScale = d3.scale.ordinal()
.domain(d3.range(dataset.length))
.rangeRoundBands([0, w], 0.05);

// ternary operator to determine if global or local has a larger scale
var yScale = d3.scale.linear()
.domain([0, d3.max(dataset, function (d) {
return (d.local > d.global) ? d.local : d.global;
})])
.range([h, 0]);

var xAxis = d3.svg.axis()
.scale(xScale)
.tickFormat(function (d) {
return dataset[d].keyword;
})
.orient("bottom");

var yAxis = d3.svg.axis()
.scale(yScale)
.orient("left")
.ticks(5);

var commaFormat = d3.format(',');

//SVG element
var svg = d3.select("#searchVolume")
.append("svg")
.attr("width", w + margin.left + margin.right)
.attr("height", h + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");

// Graph Bars
var sets = svg.selectAll(".set")
.data(dataset)
.enter()
.append("g")
.attr("class", "set")
.attr("transform", function (d, i) {
return "translate(" + xScale(i) + ",0)";
});

sets.append("rect")
.attr("class", "local")
.attr("width", xScale.rangeBand() / 2)
.attr("y", function (d) {
return yScale(d.local);
})
.attr("x", xScale.rangeBand() / 2)
.attr("height", function (d) {
return h - yScale(d.local);
})
.attr("fill", colors[0][1])
;

sets.append("rect")
.attr("class", "global")
.attr("width", xScale.rangeBand() / 2)
.attr("y", function (d) {
return yScale(d.global);
})
.attr("height", function (d) {
return h - yScale(d.global);
})
.attr("fill", colors[1][1])
;

sets.append("rect")
.attr("class", "global")
.attr("width", xScale.rangeBand() / 2)
.attr("y", function (d) {
return yScale(d.global);
})
.attr("height", function (d) {
return h - yScale(d.global);
})
.attr("fill", colors[1][1])
;

最佳答案

我昨晚刚做了同样的事情,我基本上最终重写了代码,因为这比修复所有错误要快,但这里是我可以给你的提示。

翻转 x 轴和 y 轴的最大问题是 return h - yScale(d.global) 之类的东西,因为高度是从页面的“顶部”而不是底部计算的。

另一个要记住的关键是,当您设置 .attr("x", ..) 时,确保将其设置为 0(加上左侧的任何填充)所以 = .attr("x", 0)"

我使用本教程来帮助我从水平条的 Angular 来思考我自己的代码——它真的很有帮助

http://hdnrnzk.me/2012/07/04/creating-a-bar-graph-using-d3js/

如果有帮助,这是我自己的代码,可以将其水平放置:

var w = 600;
var h = 600;
var padding = 30;

var xScale = d3.scale.linear()
.domain([0, d3.max(dataset, function(d){
return d.values[0]; })]) //note I'm using an array here to grab the value hence the [0]
.range([padding, w - (padding*2)]);

var yScale = d3.scale.ordinal()
.domain(d3.range(dataset.length))
.rangeRoundBands([padding, h- padding], 0.05);

var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h)

svg.selectAll("rect")
.data(dataset)
.enter()
.append("rect")
.attr("x", 0 + padding)
.attr("y", function(d, i){
return yScale(i);
})
.attr("width", function(d) {
return xScale(d.values[0]);
})
.attr("height", yScale.rangeBand())

关于javascript - D3js - 将垂直条形图更改为水平条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16202721/

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