【问题标题】:How to align the y axis country labels to the left?如何将 y 轴国家标签向左对齐?
【发布时间】:2021-05-21 16:00:53
【问题描述】:

我正在 D3.js 中制作图表,但我需要专家帮助如何将 y 轴国家/地区标签对齐到左侧。现在它们向右对齐。

这是代码:

    <!DOCTYPE html>
<meta charset="utf-8">

<!-- Load d3.js -->
<script src="https://d3js.org/d3.v4.js"></script>

<!-- Create a div where the graph will take place -->
<div id="my_dataviz"></div>

<script>

// set the dimensions and margins of the graph
var margin = {top: 20, right: 30, bottom: 40, left: 90},
    width = 460 - margin.left - margin.right,
    height = 400 - margin.top - margin.bottom;

// append the svg object to the body of the page
var svg = d3.select("#my_dataviz")
  .append("svg")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
  .append("g")
    .attr("transform",
          "translate(" + margin.left + "," + margin.top + ")");

// csv data
d3.csv("XYZ.csv", function(data) {
        
  // Add X axis
  var x = d3.scaleLinear()
    .domain([0, 100])
    .range([ 0, width]);
  svg.append("g")
    .attr("transform", "translate(0," + height + ")")
    .call(d3.axisBottom(x).tickFormat(function(d){
             return "$" + d;
        }).ticks(10))
        .selectAll("text")
      .attr("transform", "translate(-10,0)rotate(-45)")
      .style("text-anchor", "end");

        
  // Y axis
  var y = d3.scaleBand()
    .range([ 0, height ])
    .domain(data.map(function(d) { return d.country; }))
    .padding(.1);
  svg.append("g")
    .call(d3.axisLeft(y))

  //Bars
  svg.selectAll("myRect")
    .data(data)
    .enter()
    .append("rect")
    .attr("x", x(0) )
    .attr("y", function(d) { return y(d.country); })
    .attr("width", function(d) { return x(d.price); })
    .attr("height", y.bandwidth() )
    .attr("fill", "red")

})

</script>

我尝试通过添加到 y 轴来解决它: .attr("变换", "翻译(-60, 0)") .attr("文本锚", "开始");

但它不仅向左移动并对齐国家标签,还向左对齐垂直轴线。

来自 csv 文件的数据点如下:csv file data points 有两列“国家”和“价格”

你能帮帮我吗?

谢谢!

【问题讨论】:

  • 您试图仅将 text-anchor="start" 应用于 y 轴上的标签?对吗?
  • 是的,没错,Guttersohn。
  • 这里的.domain(data.map(function(d) { 中的data 是什么?
  • 你能提供 ``"XYZ.csv"` 以便我们可以重现这个吗?
  • 嗨,马克,我很乐意提供 csv 文件,但由于某种原因,它不允许我附加它。我只设法在上面的“csv 文件数据点”超链接中提供了一张图片的链接。如果您知道如何附加 csv,欢迎您提出建议。谢谢马克。

标签: javascript html css svg d3.js


【解决方案1】:

在 D3 中,要将更改应用到轴中的文本,您需要在创建元素后专门选择它,然后应用您的属性。

如果您使用开发工具检查您的轴,您会看到标签存储在类名称为“domain”的组标签下。所以你可以像这样选择然后应用文本锚:

d3.selectAll('.tick text').attr('text-anchor','start')

我还建议在轴的 g 标记中添加一个类名。这样,如果您在一个页面上有多个图表,您可以使您的更改更加具体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 2013-03-30
    • 2012-01-27
    相关资源
    最近更新 更多