条形图没有显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了条形图没有显示相关的知识,希望对你有一定的参考价值。

我正在研究第一组D3 tutorials并且有一个问题,显示SVG的区域,但没有任何属性的<rect>s!

这些是javascript,css和html源代码!

var svgWidth =500;
var svgHeight = 300;

var svg = d3.select('svg')
.attr("width", svgWidth)
.attr("height", svgHeight)
.attr("class","bar-chart");

var dataset = [80,100,56,120,130,44,55,120,160];
var barPadding = 5;
var barWidth = (svgWidth/dataset.length);

var barChart = svg.selectAll("rect")
	.data(dataset)
	.enter()
	.append("rect")
	.attr("y",function(d){
		return svgHeight - d;
	})
	.attr("width", barWidth - barPadding)
	.attr("transform", function(d,i){
		var translate = [barWidth * i, 0];
		return "translate("+translate+")";
	});
.bar-chart{
	background-color: #c7d9d9;
}
<!DOCTYPE html>
<html>
<head>
	<title></title>
	<link rel="stylesheet" type="text/css" href="./css/index.css">
</head>
<body>
	<svg></svg>
</body>
<script src="https://d3js.org/d3.v5.min.js"></script>
<script src="./js/index.js"></script>
</html>

我的错是什么?

答案

你没有指定身高 -

.attr("height", function(d) {
        return d;
})

var svgWidth =500;
var svgHeight = 300;

var svg = d3.select('svg')
.attr("width", svgWidth)
.attr("height", svgHeight)
.attr("class","bar-chart");

var dataset = [80, 100, 56, 120, 180, 30, 40, 120, 160];
var barPadding = 5;
var barWidth = (svgWidth/dataset.length);

var barChart = svg.selectAll("rect")
	.data(dataset)
	.enter()
	.append("rect")
	.attr("y",function(d){
		return svgHeight - d;
    })
    .attr("height", function(d) {
        return d;
    })
	.attr("width", barWidth - barPadding)
	.attr("transform", function(d,i){
		var translate = [barWidth * i, 0];
		return "translate("+translate+")";
	});
.bar-chart{
	background-color: #c7d9d9;
}
<svg></svg>
<script src="https://d3js.org/d3.v5.min.js"></script>
另一答案

需要缩小条形图的“y轴”。我们来看看下面的代码(参见提供的链接)

var data = [80,100,56,120,130,44,55,120,160];

var width = 500,
    barHeight = 20,
    margin = 1;

var scale = d3.scale.linear().domain([10,1000]).range([50,500]);

var svg = d3.select("body")
              .append("svg")
              .attr("width", width)
              .attr("height", barHeight * data.length);

var g = svg.selectAll("g")
              .data(data)
              .enter()
              .append("g")
              .attr("transform", function (d, i) {
                  return "translate(0," + i * barHeight + ")";
              });

g.append("rect")
   .attr("width", function (d) {
       return scale(d);
   })
   .attr("height", barHeight - margin)

g.append("text")
   .attr("x", function (d) { return (scale(d)); })
   .attr("y", barHeight / 2)
   .attr("dy", ".35em")
   .text(function (d) { return d; });

https://www.tutorialsteacher.com/d3js/scales-in-d3

以上是关于条形图没有显示的主要内容,如果未能解决你的问题,请参考以下文章

Rechart 条形图:除了条形图啥都不显示? (全宽和全高?)

Matplotlib条形图仅在非零条形图处显示x-ticks

无法在条形图上显示百分比

使D3堆积条形图填充父SVG容器

分布图未在 AnyLogic 中显示条形图

水平条形图标签