javascript - d3.js:轴上每个刻度的双行文本?

标签 javascript d3.js axis-labels

我有一个 X 轴上有日期的图表。 现在我还想添加时间并将其放在每个刻度的日期下方的行中,因为每个刻度的日期和时间文本都变得相当宽。

通过查看下面的问题建议,我改为尝试这样做:

var xMainScale = d3.scale.linear()
   .domain([0,100])
   .range([20, 600]);

//--- date format
var formatAsDate = function(d) {var md = new Date(d*1000);
   md_utc=new Date(md.getUTCFullYear(), md.getUTCMonth(),
   md.g etUTCDate(),  md.getUTCHours(), md.getUTCMinutes(), md.getUTCSeconds());
   return md_utc.format("Y-m-d H:i:s");};

//--- label on several rows
var insertLinebreaks = function (d) {
var el = d3.select(this);
var words = d.split(' ');
el.text('');

for (var i = 0; i < words.length; i++) {
  var tspan = el.append('tspan').text(words[i]);
  if (i > 0)
    tspan.attr('x', 0).attr('dy', '15');
 }
};

//===== axis
var xMainAxis = d3.svg.axis()
  .scale(xMainScale)
  .orient("bottom")
  .ticks(5)
  .tickFormat(formatAsDate);

//====== create SVG element
var chart = d3.select("body")
  .append("svg:svg")
  .attr("width", w)
  .attr("height", h)
  .attr("id","chart")
  .attr("class","chart");

//==== main chart (there are more but I left them out here)
var main = chart.append('g')
  .attr('transform', 'translate(' + 25 + ',' + 25 + ')')
  .attr('width', w)
  .attr('height', main_h)
  .attr('class', 'main')
  .attr('id', 'mainchart');

//===== create x axis
main.append("g")
  .attr("id","main_x")
  .attr("class", "x_axis")
  .attr("transform", "translate("+0+"," + (700 - 25)  + ")")
  .call(xMainAxis);

在函数中稍微向下一点:

//----- update the axis
main.select('#main_x').call(xMainAxis);
main.selectAll('#main_x g text').each(insertLinebreaks);

由于我的代码相当大,所以我删减了我认为重要的部分。 我想我将错误的对象传递给了 insertLinebreaks 函数,但我应该传递什么?

/拉斯

最佳答案

感谢@Lars Kotthoff 帮助我找到了解决方案。

通过将函数 insertLinebreakes 更改为:

var insertLinebreaks = function (d) {
  var el = d3.select(this);
  var words=d3.select(this).text().split(' ');

  el.text('');

  for (var i = 0; i < words.length; i++) {
var tspan = el.append('tspan').text(words[i]);
if (i > 0)
      tspan.attr('x', 0).attr('dy', '15');
  }
 };

它有效。

关于javascript - d3.js:轴上每个刻度的双行文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19428669/

相关文章:

javascript - 多选和取消选择 Boundlist

javascript - 处理 JavaScript 中的 net::ERR_CONTENT_LENGTH_MISMATCH 错误

javascript - 在 Meteor 模板上使用 NPM 包

javascript - iframe 窗口中的链接以在新选项卡中打开

javascript - 在两个地方使用 d3 在饼图中的饼图上显示文本

d3.js - d3 V4 d3.stratify 如何处理树?

r - 在条形图中设置轴标签和刻度线的不同位置

javascript - 使用 D3.js 绘制方阵

python - Matplotlib (GridSpec) - 子图轴标签被截断?尝试过 `tight_layout`

javascript - d3.js 轴标签 - 颜色不变