2016-07-01 8 views
1

как выбрать и повернуть тексты только по оси x! В этом примере: http://dc-js.github.io/dc.js/examples/heat.htmldc.js heatmap как повернуть текст?

Итак, выберите от 1 до 20 и поверните их!

Я попробовал этот путь:

chart 
.selectAll("g.cols.axis > text") 
.attr("text-anchor", "middle") 
.attr("transform", function() { 
    return "rotate(-20)" 
    }) 
.style("fill", "blue"); 

но мне кажется, что I'am выбор всей оси Х, а не каждый текст раздельно. Стиль заполнения отлично работает, но преобразование не работает должным образом, и топор полностью вращается.

ответ

2

Вы должны повернуть каждый текстовый элемент на оси X вокруг своего собственного центра. Для этого необходимо указания угла поворота и центром вращения

rotate(angle centerX centerY) 

С, что на виду, вы можете сделать:

chart.selectAll('g.cols.axis > text') 
      .attr('transform', function (d) { 
       var coord = this.getBBox(); 
       var x = coord.x + (coord.width/2), 
        y = coord.y + (coord.height/2); 
       return "rotate(-20 "+x+" "+y+")" 
       }); 

Запомнить это сделать после вызова chart.render(); или ваш выбор будет пустым

Если вы хотите понять, почему это, обратите внимание на: https://sarasoueidan.com/blog/svg-transformations/

Here the working code

+1

Лучшее место для этого - '.on ('pretransition', function (chart) {...})', по крайней мере, если вы используете бета-версии 2.0. Это срабатывает после любого рендера или перерисовки. (Renderlet в более ранних версиях, но это после переходов, поэтому есть прыжок.) – Gordon

+0

Спасибо вам обоим! Оно работает ! У меня есть еще один вопрос, что если на оси X у меня есть несколько строк с разной длиной! как эти строки начинаться с каждого первого символа? Если я использую .attr ('dy', '+50'), результат не будет плохим, но не желательным! из-за разной длины каждой строки ... chart.selectAll ("g.cols.axis text") .attr ('dy', '+50') .attr ("transform", function() { var coord = this.getBBox(); var x = coord.x + (coord.width/2), y = coord.y + (coord.height/2); return "rotate (90" + x + "" + y + ")" }) . style ("fill", "blue"); –

+0

Текстовую метку можно выровнять с использованием свойства text-anchor. «начать» «средний» конец. Взгляните сюда: https://developer.mozilla.org/en/docs/Web/SVG/Attribute/text-anchor – Klaujesi

0

Что-то вроде этого, что вы ищете?

.cols.axis text{ 
    transform-origin: center; 
    transform: rotateX(-20deg); 
} 

Я не уверен, если это ось вы хотите повернуть на, так как он просто перемещает их на график - но для любой оси вы можете просто использовать rotateX/Y/Z!

+0

О, я понимаю, что вы имеете в виду ... хммм. – will

+0

Кажется, что проблема связана с селектором css .selectAll ("g.cols.axis> text") –

+1

Я думаю, что на самом деле происхождение трансформации застревает слева от всей оси, даже если вы установите его для каждый элемент – will

Смежные вопросы