首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >d3.js -一起旋转轴和长方体

d3.js -一起旋转轴和长方体
EN

Stack Overflow用户
提问于 2021-06-03 04:26:23
回答 1查看 23关注 0票数 0

我想用文本旋转轴和框的位置(位置已旋转,但框不旋转),目前只有轴已旋转!

代码语言:javascript
复制
test()
function test() {
  var width = 800
  var height = 600
  var margin = 20
  var svg = d3.select('body').append('svg')
      .attr('width',width).attr('height',height)
      .style('border','1px solid red')

  var g = svg.append('g')
      .attr("transform", `translate(${margin}, ${margin})`)
  var data = [
      {
      pos:0,
      name:'A'
      },            
      {
      pos:2,
      name:'B'
      },      
      {
      pos:12,
      name:'C'
      },
      {
      pos:15,
      name:'D'
      },
      {
      pos:20,
      name:'E'
      },
      {
      pos:23,
      name:'F'
      },
      {
      pos:26,
      name:'G'
      },
  ];

  var xranges = data.map(function(d){
      return d.pos
  }) 
  
  var scalelinear = d3.scaleLinear()
      .domain([d3.min(xranges), d3.max(xranges)])
      .range([0, width-2*margin]);
  
  var scalepoint = d3.scalePoint()
      .domain(xranges)
      .range([0, width-2*margin]);

  var scale = scalepoint
  var x_axis = d3.axisTop()
      .scale(scale)
  
  g.append("g")
    .call(x_axis)
      .attr("transform", `translate(0, 5) rotate(30)`)
  var iw = 48
  var ih = 80

  var g1 = g.selectAll(null)
      .data(data).enter()
      .append('g')
      .attr("transform", `translate(0, 5)`)
  
    g1.append('rect')
    .attr('x', d => scale(d.pos)-iw/2)
    .attr('y', 0)
    .attr('width', iw)
    .attr('height', ih)
    .attr('fill','none')
    .attr('stroke','black')

  g1.append('text')
    .attr('x', d => scale(d.pos))
    .attr('y', ih/2)
    .text(d => d.name)
    .attr('text-anchor','middle')
    .attr('fill','none')
    .attr('stroke','black')
    }
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/6.7.0/d3.min.js"></script>

EN

回答 1

Stack Overflow用户

发布于 2021-06-03 16:10:09

将旋转应用于顶级组:

代码语言:javascript
复制
test()
function test() {
  var width = 800
  var height = 600
  var margin = 20
  var svg = d3.select('body').append('svg')
      .attr('width',width).attr('height',height)
      .style('border','1px solid red')

  var g = svg.append('g')
      .attr("transform", `translate(${margin}, ${margin}) rotate(30)`)
  var data = [
      {
      pos:0,
      name:'A'
      },            
      {
      pos:2,
      name:'B'
      },      
      {
      pos:12,
      name:'C'
      },
      {
      pos:15,
      name:'D'
      },
      {
      pos:20,
      name:'E'
      },
      {
      pos:23,
      name:'F'
      },
      {
      pos:26,
      name:'G'
      },
  ];

  var xranges = data.map(function(d){
      return d.pos
  }) 
  
  var scalelinear = d3.scaleLinear()
      .domain([d3.min(xranges), d3.max(xranges)])
      .range([0, width-2*margin]);
  
  var scalepoint = d3.scalePoint()
      .domain(xranges)
      .range([0, width-2*margin]);

  var scale = scalepoint
  var x_axis = d3.axisTop()
      .scale(scale)
  
  g.append("g")
    .call(x_axis)
      .attr("transform", `translate(0, 5)`)
  var iw = 48
  var ih = 80

  var g1 = g.selectAll(null)
      .data(data).enter()
      .append('g')
      .attr("transform", `translate(0, 5)`)
  
    g1.append('rect')
    .attr('x', d => scale(d.pos)-iw/2)
    .attr('y', 0)
    .attr('width', iw)
    .attr('height', ih)
    .attr('fill','none')
    .attr('stroke','black')

  g1.append('text')
    .attr('x', d => scale(d.pos))
    .attr('y', ih/2)
    .text(d => d.name)
    .attr('text-anchor','middle')
    .attr('fill','none')
    .attr('stroke','black')
    }
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/6.7.0/d3.min.js"></script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67812106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档