无法使D3 y轴和列沿x轴正确对齐

尼尔

我现在正在处理的D3图有几个问题:

  1. 我无法y axis在页面上正确对齐。这些数字超出了最左边的边界,因此无法看到。

  2. 我希望条形图中使用的列在刻度线之间整齐地对齐,并且在两侧均匀间隔。

小提琴:http : //jsfiddle.net/bf1gf8ep/8/

D3.js

var barWidth = 70;
var width = (barWidth + 10) * 7;
var height = 200;
var data = [{"label" : "1/7yrs", "contract" : "111830.17", "annReturn" : "1.63%"},
            {"label" : "2/7yrs", "contract" : "115311.17", "annReturn" : "2.07%"},
            {"label" : "3/7yrs", "contract" : "118984.65", "annReturn" : "2.52%"},
            {"label" : "4/7yrs", "contract" : "122859.65", "annReturn" : "2.98%"},
            {"label" : "5/7yrs", "contract" : "126947.77", "annReturn" : "3.46%"},
            {"label" : "6/7yrs", "contract" : "131260.74", "annReturn" : "3.94%"},
            {"label" : "7/7yrs", "contract" : "135810.92", "annReturn" : "4.44%"}];

 var margin = { top: 20, right: 20, bottom: 20, left: 20 };

 var chart = d3.selectAll("body").append("svg:svg")
            .attr("width", width + margin.left + margin.right)
            .attr("height", height + margin.top + margin.bottom + 20);

        var x = d3.scale.linear().domain([0, data.length]).range([0, width]);
        var y = d3.scale.linear().range([height, 0]);

        var xAxis = d3.svg.axis().scale(x).orient("bottom");
        var yAxis = d3.svg.axis().scale(y).orient("left").ticks(5);

  chart.append("g")
       .attr("class", "axis").call(xAxis)
       .attr("transform", "translate(0," + (height) + ")");

  chart.append("g")
       .attr("class", "axis")
       .attr("transform", "translate(" + 10 + ",0)")
       .call(yAxis);


x = d3.scale.linear().domain([0, data.length]).range([0, width]);
y = d3.scale.linear().domain([0, 135810.92 + 1000]).range([height, 0]);

chart.selectAll("rect")
    .data(data)
    .enter()
    .append("svg:rect")
    .attr("x", function (d, i) { return x(i); })
    .attr("y", function (d) { return y(d.contract); })
    .attr("height", function (d) { return height - y(d.contract); })
    .attr("width", barWidth)
    .attr("fill", "#2d578b");

chart.selectAll("text.contractInfo")
    .data(data)
    .enter()
    .append("svg:text")
    .attr("x", function(d, i) { return x(i) + barWidth; })
    .attr("y", function(d) { return y(d.contract); })
    .attr("dx", -barWidth / 2)
    .attr("dy", "1.2em")
    .attr("text-anchor", "middle")
    .text(function(d) { return d.contract; })
    .attr("fill", "white")
    .attr("class", "contractInfo");

chart.selectAll("text.yAxis")
    .data(data)
    .enter().append("svg:text")
    .attr("x", function (d, i) { return x(i) + barWidth; })
    .attr("y", height)
    .attr("dx", -barWidth / 2)
    .attr("dy", "15px")
    .attr("text-anchor", "middle")
    .attr("style", "font-size: 12; font-family; Helvetica, sans-serif")
    .text(function (d) { return d.label; })
    .attr("transform", "translate(0, 18)")
    .attr("class", "yAxis");

截屏

在此处输入图片说明

用户名

您已经完成了所有艰苦的工作,只需要再使用margin变量即可。您真正想要做的就是将栏向右推20pxmargin.left并将它们居中。width变量已设置为barwidth + 10,因此您需要10px填充。要居中,您需要在条宽上添加一半的填充。因此,在创建这些条时将它们放在一起,需要添加margin.left和5,即:

.attr("x", function (d, i) { return x(i) + margin.left + 5; })

您还需要使用完全相同的代码移动文本。

还需要通过添加margin.left值来移动xAxis,例如:

.attr("transform", "translate(" + margin.left + "," + (height) + ")");

我还注意到您对y scale max进行了硬编码,因此我引入了ymax变量来计算最大值,并如下修改了y变量;

var ymax = d3.max(data, function(d) { return d.contract; });
var y = d3.scale.linear().domain([0, ymax]).range([height, 0]);

上面概述的方法的替代方法是附加一个group元素,以将条放置在其中并通过margin变量平移该组。这样可以避免必须在条形几何图形中使用margin变量。

无论如何,我碰到了你的小提琴,其中包含到这里的更新

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

D3条形图无法正确动态更新y轴和x轴

来自分类Dev

如何使用D3轴命令正确地换位X和Y轴?

来自分类Dev

D3 沿右轴对齐文本

来自分类Dev

D3注释沿x轴的位置不正确

来自分类Dev

如何创建堆积的折线图D3,多个Y轴和公共X轴

来自分类Dev

无法在 d3 散点图的 x 轴上显示日期

来自分类Dev

D3 - 更新模式和 y 轴

来自分类Dev

反转Y轴D3

来自分类Dev

D3 Y 轴似乎倒置

来自分类Dev

每周D3的X轴

来自分类Dev

D3在X轴上缩放

来自分类Dev

D3 x 轴数据重叠

来自分类Dev

带有 D3 js 的 A 帧无法添加 x、y、z 轴坐标点并且缩放不起作用

来自分类Dev

d3 sankey图表-沿x轴手动定位节点

来自分类Dev

d3 sankey图表-沿x轴手动定位节点

来自分类Dev

d3瀑布图沿x轴值旋转180至-90度

来自分类Dev

d3 v4为什么我的x轴和条形图不能对齐?

来自分类Dev

D3:根据x轴的值在y轴上添加类别以打勾

来自分类Dev

适当缩放比例(Y轴,X轴)的图的D3缩放问题

来自分类Dev

D3:根据x轴的值在y轴上添加类别以打勾

来自分类Dev

如何沿 X、Y 或 Z 轴平面旋转 3D 矩阵?

来自分类Dev

无法使用d3在“矩形”内仅显示一次X轴值

来自分类Dev

无法使用d3在“矩形”内仅显示一次X轴值

来自分类Dev

无法在 D3 条形图中在 x 轴上换行中文文本

来自分类Dev

在D3.js图表中添加工具提示和x轴,y轴标题

来自分类Dev

d3.js如何分辨X轴和Y轴之间的区别?

来自分类Dev

d3对立图表轴对齐问题

来自分类Dev

d3对立图表轴对齐问题

来自分类Dev

如何在D3 / javascript中将一列绘制为x轴,另一列绘制为y轴