2015-01-08 4 views
1

Глядя на шоу d3 (http://bl.ocks.org/mbostock/1256572), переходы очень гладкие и красивые. Я пытаюсь подражать этому стилю для перехода между диаграммой рассеяния и гистограммой.d3, перевод диаграммы рассеяния в гистограмму

я могу сделать что-то вроде этого:

svg.selectAll(".dot") 
    .transition() 
    .duration(duration) 
    .delay(delay) 
    .remove(); 

plot_bar_graph(); 

который удаляет диаграмму рассеяния, а затем участки гистограмму, но я действительно хотел бы своего рода анимации, где круги «превращаются в» прямоугольник элементов, но я не уверен, как это сделать.

Моя нынешняя идея состоит в том, чтобы просто нарисовать круги в рассеянном ящике как прямоугольники, но придать им атрибут rx и ry, чтобы они выглядели как круги, а затем сменили их на прямоугольники.

Что-то вроде этого:

d3.select(".bar") 
    .transition() 
    .duration(duration) 
    .delay(delay) 
    .attr("rx",0) 
    .attr("ry",0); 

, но это кажется довольно громоздким.

ответ

2

Это единственный способ сделать это, за исключением написания собственного твина и рисования с элементами пути (что намного сложнее). Это сложнее настроить, потому что прямоугольники рисуют сверху и слева, а не в центре, как круги, но он будет работать.

Подростков трудно, но не невозможно: https://github.com/mbostock/d3/wiki/Transitions#attrTween

Если вы заинтересованы в получении в промежуточных кадров, вы можете увидеть яркий пример здесь с Superformula (который включает в себя прямоугольник, как и круг подобных форм):

http://bl.ocks.org/mbostock/1020902

+0

Ничего себе. Любые предложения о том, с чего начать с анимации? Или вы думаете, что это будет намного сложнее, чем необходимо? – user2631296

+0

Добавлены некоторые ссылки. Да, это сложнее, но это также дает вам больше контроля. Поскольку вы имеете дело с rect и circle, использование rx/ry намного удобнее. – Elijah

+2

@ user2631296 Вы можете искать здесь на SO для некоторых других примеров пользовательской анимации пути. Тем не менее, я подозреваю, что переход rx/ry, вероятно, проще. Просто не забудьте добавить дополнительную настройку для вашего состояния «круга», как указал Илия, чтобы учесть, что прямоугольники расположены сверху слева, в то время как точки рассеяния должны быть центрированы на значении данных. Таким образом, вы будете чередовать x и y немного, а также rx, height и width. Вы * не нуждаетесь в переходе отдельно: по умолчанию он равен rx. – AmeliaBR

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