所以我有这样的概念,即所有的单轴数据应该被允许显示在所有的基本途径;至少从馅饼到酒吧。理想情况下,这将是一个动画过渡,但那是困难进来。
获取饼图工作很容易,就像获取条形图一样。以下是我迄今为止:
# fields
width = 750
height = width/2
margin = 20
radius = (height-(margin*2))/2
# helpers
pie = d3.layout.pie().value (d) -> d
arc = d3.svg.arc()
.outerRadius(radius)
.innerRadius(radius/4)
x = d3.scale.linear().domain([0, 100]).range [0, width]
$http.get('/Classification_Top_10_by_Count.json').success (data) ->
percents = (parseFloat item.Percent for item in data).sort d3.ascending
svg = d3.select('#svgStage').append('svg')
.attr('width', width+(margin*2))
.attr('height', height+(margin*2))
svg.data([percents])
g = svg.append('g')
.attr('transform', "translate(#{radius},#{radius})")
paths = g.selectAll 'path'
paths.data(pie).enter().append('path')
.attr('d', arc)
toBars = ->
g.selectAll('path').transition().duration(2000)
.attr 'd', (d, index) ->
# this is over complex because I was playing with it.
cord =
tl : [0, index*20]
tr : [d.value*20, index*20]
br : [d.value*20, index*20-20]
bl : [0, index*20-20]
oCord = [
cord.tl
cord.tr
cord.br
cord.bl
]
"M #{oCord[0][0]}, #{oCord[0][2]}
A 0, 0 0 0, 0 #{oCord[1][0]}, #{oCord[1][3]}
L #{oCord[2][0]}, #{oCord[2][4]}
A 0, 0 0 0, 0 #{oCord[3][0]}, #{oCord[3][5]}
Z"
显然,这个工作它必须是路径元素路径元素,现在的过渡工作。问题是它看起来像废话。它一开始就看起来乱码,直到它结束,并成为体面的条形图。
我一直在看这个:http://d3-example.herokuapp.com/examples/showreel/showreel.html 这演示了一个酒吧以我想要的方式过渡到甜甜圈。查看源代码,这是通过自定义补间完成的。 (查看源代码行518)
现在我在我的头上。这里发生了什么?我怎样才能使这个转换工作?有没有其他人处理这个问题?
UPDATE
只是要清楚,下面的插图我升技转型的意图更加清晰。
赏金清晰度。我为这个问题添加了一笔赏金,因为我需要解释发生了什么问题。 Superboggly做到了,所以他得到了赏金。然而阿米特·阿维夫的方法是优越的,所以我接受他的答案是最正确的。我也有+1。
我只能看到在之前的HTML线660 ......我应该在看另一个文件呢? – 2013-05-02 02:45:49
你是对的。它的518, – Fresheyeball 2013-05-02 17:32:40
除了任何技术问题,你将如何从一个楔形动画到一个酒吧?因为甜甜圈“楔子”实际上只是弯曲的酒吧,所以您只需将它们弄平即可。楔子自然不适用于这种变换。如果你添加一个中间步馅饼 - >甜甜圈 - >酒吧它能帮助你达到你想要的效果吗? – 2013-05-03 11:57:17