Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript d3.js更改可平移图形上记号标签的位置_Javascript_D3.js - Fatal编程技术网

Javascript d3.js更改可平移图形上记号标签的位置

Javascript d3.js更改可平移图形上记号标签的位置,javascript,d3.js,Javascript,D3.js,我在d3.js中工作,有两个可平移(但不可缩放)的时间轴。一个轴的标签为天,一个轴的标签为月。我对两个轴使用相同的比例 目前,它看起来是这样的:(管道和减号仅用于更好的可见性) 我想将月份的名称移动到间隔的中间,这样看起来像这样: |-------------November 1 2 3 4 5 6 7 8 9 10 11 12 13 ... 30 我已经尝试了几种方法来解决这个问题,但没有成功。核心问题是平移时,勾号本身一消失,勾号文本就会消失 如果使用“后选择”将记号的文本移动到右侧位置,

我在d3.js中工作,有两个可平移(但不可缩放)的时间轴。一个轴的标签为天,一个轴的标签为月。我对两个轴使用相同的比例

目前,它看起来是这样的:(管道和减号仅用于更好的可见性)

我想将月份的名称移动到间隔的中间,这样看起来像这样:

|-------------November
1 2 3 4 5 6 7 8 9 10 11 12 13 ... 30
我已经尝试了几种方法来解决这个问题,但没有成功。核心问题是平移时,勾号本身一消失,勾号文本就会消失

  • 如果使用“后选择”将记号的文本移动到右侧位置,则向左平移轴时,文本将过早消失

    首字母(ok):

    向左平移后(错误):

  • 我试着把时间间隔改为接近“中间”的日期。而不是用

    .ticks(d3.time.months, 1);
    
    我尝试使用以下方法进行设置:

    .ticks(d3.time.days, 15);
    
    |November-----November------November
    1 2 3 4 5 6 7 8 9 10 11 12 13 ... 30
    
    但这并没有达到预期的效果。它生成以下内容:

    .ticks(d3.time.days, 15);
    
    |November-----November------November
    1 2 3 4 5 6 7 8 9 10 11 12 13 ... 30
    
  • 以下情况对我没有帮助:

    .style("text-anchor", "end/begin")
    
  • 我找到了一种方法(如本例中所述:)向轴添加偏移,以便仍然显示过长的记号。我无法在可平移的图形中运行此操作

    var x = d3.time.scale()
        .domain([t0, t3])
        .range([t0, t3].map(d3.time.scale()
              .domain([t1, t2])
              .range([0, width])));
    
  • 有更好的解决方案吗?

    编写自定义ticks()函数对我来说很有用。使用此功能,我可以将记号(及其标签)设置到任何给定位置

    我创建了一个简单的要点来向您展示我的解决方案:

    干得好!我正在使用您的解决方案,对此非常满意。我不知道可以在.ticks()方法中创建自定义函数。谢谢!
    var x = d3.time.scale()
        .domain([t0, t3])
        .range([t0, t3].map(d3.time.scale()
              .domain([t1, t2])
              .range([0, width])));