如何获取d3轴刻度以匹配我的数据
How can I get the d3 axis ticks to match my data?
这是我的代码:
<!doctype html>
<html>
<head>
<title>D3</title>
<script src="https://d3js.org/d3.v3.min.js" charset="utf-8"></script>
</head>
<body>
<script>
var dataArray=[{"letter":"a", "value":20},
{"letter":"b", "value":40},
{"letter":"c", "value":50},
{"letter":"m", "value":60}];
console.log(dataArray)
var width=500;
var height=500;
var widthScale=d3.scale.linear()
.domain([0, 60])
.range([0, width]);
var heightScale=d3.scale.ordinal()
.domain(dataArray.map(function(d){ return d.letter }))
.range([0,height-125]);
var letterScale=d3.scale.linear()
.domain([0,26])
.range(["A","B","c","d"])
var color=d3.scale.linear()
.domain([0,60])
.range(["red", "blue"]);
var x_axis=d3.svg.axis()
.orient("bottom")
.ticks(12)
.scale(widthScale);
var y_axis=d3.svg.axis()
.orient("left")
.ticks(4)
.tickFormat(function (d) {return d})
.scale(heightScale);
var canvas=d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(25, 0)");
var bars=canvas.selectAll("rect")
.data(dataArray)
.enter()
.append("rect")
.attr("width", function(d) {return widthScale(d.value);})
.attr("height", 50)
.attr("fill", function(d) {return color(d.value)})
.attr("y", function(d, i) {return i*100});
// bars.append("text")
// .attr("x", function(d) {return widthScale(d)/2})
// .attr("y", function(d) {return -heightScale(d)})
// .style("stroke-width", 6)
// .style("text-anchor", "middle")
// .style("font-size", "34px")
// .style("fill", "black")
// .text(function(d) {return console.log(d);});
canvas.append("g")
.attr("transform", "translate(5, 375)")
.call(x_axis);
canvas.append("g")
.attr("transform", "translate(5,0)")
.call(y_axis)
</script>
</body>
</html>
我不知道如何让y轴刻度与数据匹配并与条形图对齐?或者,正如你在注释掉的代码中看到的那样,我很难让文本出现。正确的文本(数字)会显示在开发工具的元素中,但不会显示在页面上。如有任何帮助,我们将不胜感激。
这不是D3的问题,而是关于统计和数据的问题,即:你说"我不知道如何获得y轴刻度来匹配数据",但什么数据?没有!
您的数据集只是一个由4个值组成的数组。如果要为每个值绘制一个水平条,x轴将显示一个定量变量(值:20、40、50、60)。但y轴只显示不同的条形图:其分类,而不是定量。例如,这4个酒吧可以有橙子、苹果、香蕉和酸橙。
所以,你的y轴必须是heightScale = d3.scale.ordinal()
,而不是linear
,你必须设置条形图的分类值,就像我在这里对一组对象所做的那样:
var dataArray = [
{
"fruit": "orange",
"value": 20
},
{
"fruit": "apple",
"value": 40
},
{
"fruit": "banana",
"value": 50
},
{
"fruit": "lime",
"value": 60
}
]
之后,您将域设置为:
heightScale.domain(dataArray.map(function(d){ return d.fruit }));
然后,您不需要使用i * 100
设置y位置。相反,你可以用一种更灵活的方式设置它:
.attr("y", function(d){ return heightScale(d) });
只要更改字母(a、b、c、d)的"水果",你就会得到你想要的。
相关文章:
- 如何将JSON数据导入我的ejs模板
- 无法将数据从firebase获取到我的html页面
- 用我的json数据填充JQuery DataTable
- 在php和mysql中选择选项.一旦选择了选项,就列出我的sql数据库数据
- ajax请求成功,但可以'我看不到我的数据
- 如何检查Json文件更新,如果更新了,则用更新的数据刷新我的页面
- 更新数据,而不是用javascript和jquery将其添加到我的表中
- 无法在我的JSON文件中发布数据
- 我尝试使用我的本地js文件来获取远程IP数据,但它不起作用
- 我的地图数据's不会使用php存储在mysql数据库中
- 如何使用XMLHttpRequest()不断地将数据发送到我的网站中的另一个页面
- 我没有'我不知道为什么我的jqGrid子网格没有'不要给我看数据
- 将用户选择的数据临时存储在我的阵列中
- 用我的函数jquery给出数据/参数
- JQuery$.ajax()发布数据以调用我的控制器中的方法
- 我的复选框没有't使用的循环来显示数据
- 在我的案例中,如何获取异步数据
- 如何在 D3 中更新我的多折线图数据
- “玩转这些数据!”我的plot.js图没有显示
- jQuery不是从JSON中提取数据并添加数据-我的代码有什么问题?