【问题标题】:dc.js reduce space/padding inside svg elementdc.js 减少 svg 元素内的空间/填充
【发布时间】:2017-02-18 16:26:20
【问题描述】:

我在 dc.js 中有一个图表(使用 d3.js)。

我需要将我的 SVG 图表紧贴在 div 容器中,我注意到 SVG 元素内部有一些空白 - 在 SVG 元素和其中的 g 元素之间。

请注意,在这个堆栈 sn-p 示例中(以及在 jsFiddle example 中)有一个内部 svg 元素(svg>svg>g),但在我的实时代码中只有一个 svg g 元素之前的元素 (svg>g)。

如何设置图表样式以立即删除外部 svg 容器内的空白? (在下面的示例中,我希望删除绿线和红线之间的空白。)

var myCSV = [
	{"shift":"1","date":"01/01/2016/08/00/00","car":"178","truck":"255","bike":"17","moto":"7"},
	{"shift":"2","date":"01/01/2016/17/00/00","car":"125","truck":"189","bike":"45","moto":"3"},
	{"shift":"3","date":"02/01/2016/08/00/00","car":"140","truck":"219","bike":"28","moto":"12"},
	{"shift":"4","date":"02/01/2016/17/00/00","car":"222","truck":"290","bike":"32","moto":"8"},
	{"shift":"5","date":"03/01/2016/08/00/00","car":"200","truck":"250","bike":"20","moto":"19"},
	{"shift":"6","date":"03/01/2016/17/00/00","car":"230","truck":"220","bike":"10","moto":"13"},
];

lc1 = dc.lineChart("#line1");

var dateFormat = d3.time.format("%d/%m/%Y/%H/%M/%S");

myCSV.forEach(function (d) {
	d.date = dateFormat.parse(d.date);
});

var facts = crossfilter(myCSV);
var dateDim = facts.dimension(function (d) {return d.date});

var carDim = facts.dimension(function (d) {return d['car']});
var dgCar = dateDim.group().reduceSum(function (d) {return d['car']});

var minDate = new Date ("2016-01-01T08:00:00.000Z");
var maxDate = new Date ("2016-01-03T17:00:00.000Z");	

var maxY = d3.max(myCSV, function(d) {return d['car']});

lc1
.renderArea(false)
.width(300)
.height(250)
.dimension(dateDim)
.group(dgCar)
.defined(function(d) {if(d.y !==null) {return d.y;}})
.transitionDuration(1000)
.margins({top: 30, right: 20, bottom: 35, left: 60})
.yAxisLabel('Cars')
.renderHorizontalGridLines(true)
.brushOn(false)
.x(d3.time.scale().domain([minDate,maxDate]));
lc1.yAxis().ticks(5);
lc1.xAxis().ticks(3);

dc.renderAll();
dc.redrawAll();
svg{height:280px;}
#msg{position:fixed;top:0;right:0;padding:5px;}
svg{outline:1px solid green;}
svg>svg{outline:1px solid red;}
svg>g{outline:1px solid gold;}
<script src="http://cdnjs.cloudflare.com/ajax/libs/d3/3.3.3/d3.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/crossfilter/1.3.1/crossfilter.min.js"></script>
<script src="http://dc-js.github.io/dc.js/js/dc.js"></script>
<link href="http://dc-js.github.io/dc.js/css/dc.css" rel="stylesheet"/>
<svg id="line1"></svg>

【问题讨论】:

  • 将 svg 的高度从 280px 降低到更小的数字。
  • 可能是您在上面设置的边距? dc-js.github.io/dc.js/docs/html/dc.marginMixin.html
  • @Gordon 正是戈登,谢谢。有时我看不到眼前的事物(或者,成为克拉克第三定律的牺牲品)。

标签: d3.js svg dc.js


【解决方案1】:

如果您减小边距的大小并增加内部 svg 的高度(以匹配外部 svg),它会很好地贴合:

var myCSV = [
	{"shift":"1","date":"01/01/2016/08/00/00","car":"178","truck":"255","bike":"17","moto":"7"},
	{"shift":"2","date":"01/01/2016/17/00/00","car":"125","truck":"189","bike":"45","moto":"3"},
	{"shift":"3","date":"02/01/2016/08/00/00","car":"140","truck":"219","bike":"28","moto":"12"},
	{"shift":"4","date":"02/01/2016/17/00/00","car":"222","truck":"290","bike":"32","moto":"8"},
	{"shift":"5","date":"03/01/2016/08/00/00","car":"200","truck":"250","bike":"20","moto":"19"},
	{"shift":"6","date":"03/01/2016/17/00/00","car":"230","truck":"220","bike":"10","moto":"13"},
];

lc1 = dc.lineChart("#line1");

var dateFormat = d3.time.format("%d/%m/%Y/%H/%M/%S");

myCSV.forEach(function (d) {
	d.date = dateFormat.parse(d.date);
});

var facts = crossfilter(myCSV);
var dateDim = facts.dimension(function (d) {return d.date});

var carDim = facts.dimension(function (d) {return d['car']});
var dgCar = dateDim.group().reduceSum(function (d) {return d['car']});

var minDate = new Date ("2016-01-01T08:00:00.000Z");
var maxDate = new Date ("2016-01-03T17:00:00.000Z");	

var maxY = d3.max(myCSV, function(d) {return d['car']});

lc1
.renderArea(false)
.width(300)
.height(280)
.dimension(dateDim)
.group(dgCar)
.defined(function(d) {if(d.y !==null) {return d.y;}})
.transitionDuration(1000)
.margins({top: 0, right: 0, bottom: 20, left: 27})
.yAxisLabel('Cars')
.renderHorizontalGridLines(true)
.brushOn(false)
.x(d3.time.scale().domain([minDate,maxDate]));
lc1.yAxis().ticks(5);
lc1.xAxis().ticks(3);

dc.renderAll();
dc.redrawAll();
svg{height:280px;}
#msg{position:fixed;top:0;right:0;padding:5px;}
svg{outline:1px solid green;}
svg>svg{outline:1px solid red;}
svg>g{outline:1px solid gold;}
<script src="http://cdnjs.cloudflare.com/ajax/libs/d3/3.3.3/d3.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/crossfilter/1.3.1/crossfilter.min.js"></script>
<script src="http://dc-js.github.io/dc.js/js/dc.js"></script>
<link href="http://dc-js.github.io/dc.js/css/dc.css" rel="stylesheet"/>
<svg id="line1"></svg>

【讨论】:

    猜你喜欢
    • 2021-05-26
    • 2018-02-26
    • 2022-12-23
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    相关资源
    最近更新 更多