javascript - 从 v3 转换为 v4 时缺少轴标签

标签 javascript d3.js

当我将代码从 D3.js v3 转换为 v4 时,轴标签丢失了。我不明白为什么。

v4中axis对应的代码如下:

    // setup x 
    var xValue = function(d) { return d[xText];}, // data -> value
        xScale = d3.scaleLinear().range([0, width]), // value -> display
        xMap = function(d) { return xScale(xValue(d));}, // data -> display
        xAxis = d3.axisBottom(xScale);

    // setup y
    var yValue = function(d) { return d[yText];}, // data -> value
        yScale = d3.scaleLinear().range([height, 0]), // value -> display
        yMap = function(d) { return yScale(yValue(d));}, // data -> display
        yAxis = d3.axisLeft(yScale)


      // x-axis
      svg.append("g")
          .attr("class", "x axis")
          .attr("transform", "translate(0," + height + ")")
          .call(xAxis)
        .append("text")
          .attr("class", "label")
          .attr("x", width)
          .attr("y", -6)
          .style("text-anchor", "end")
          .text(xText);

      // y-axis
      svg.append("g")
          .attr("class", "y axis")
          .call(yAxis)
        .append("text")
          .attr("class", "label")
          .attr("transform", "rotate(-90)")
          .attr("y", 6)
          .attr("dy", ".71em")
          .style("text-anchor", "end")
          .text(yText);

v3 可以很好地显示标签。下面是原始代码。

    // setup x 
    var xValue = function(d) { return d[xText];}, // data -> value
        xScale = d3.scale.linear().range([0, width]), // value -> display
        xMap = function(d) { return xScale(xValue(d));}, // data -> display
        xAxis = d3.svg.axis().scale(xScale).orient("bottom");

    // setup y
    var yValue = function(d) { return d[yText];}, // data -> value
        yScale = d3.scale.linear().range([height, 0]), // value -> display
        yMap = function(d) { return yScale(yValue(d));}, // data -> display
        yAxis = d3.svg.axis().scale(yScale).orient("left");

最佳答案

与 D3 v3 不同,D3 v4/5 轴有一个 fill: none默认值,由 <text> 继承.

因此,您只需设置 fill为您的文本。例如:

// x-axis
svg.append("g")
    .attr("class", "x axis")
    .attr("transform", "translate(0," + height + ")")
    .call(xAxis)
    .append("text")
    .attr("class", "label")
    .attr("x", width)
    .attr("y", -6)
    .style("text-anchor", "end")
    .style("fill", "black")//<---- here
    .text(xText);

关于javascript - 从 v3 转换为 v4 时缺少轴标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56485241/

相关文章:

javascript - 带 mask 的 mouseOut 效果

javascript - 线图缩放

javascript - D3.js多维数组

d3.js - 在 d3.js 中设置对数刻度的基础

javascript - 使用可变尺度时区分 React 和 D3 的关注点

javascript - 如果有条件,如何使用 JavaScript 比较 css 样式值?

Javascript - 如何使用数组中的元素设置按钮的值?

javascript - ES6 中的私有(private) props 不适用于 WeakMap

javascript - 宽度基于百分比高度的方形 div

javascript - 在 d3js 中生成箭头