2016-11-23 127 views
0

我有一个图表这里: - code link显示信息为提示

让我告诉你,我想实现here.There是从折线一年中的月份 - 一月,二月,三月,。 ...现在,当我徘徊在几个月的时间里,我想在一月,第五周,第六周,...,第八周显示week1,week2,....,week4 for 2月等等。也就是说,每个星期四月我将使用PHP来回显每周数据的价值 - 周1:23,周2:45,周3:56,周4:75等.....

友情提醒。

我试过使用.csv文件将所有的52周信息,但没有运气。 JavaScript的参与:

'use strict'; 
 

 
var dataset = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; 
 

 
// let colors = ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd']; 
 
let colors = ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#bc80bd', '#bc80bd']; 
 
var weeks = ['January - 2016', 'February -2016', 'March - 2016', 'April - 2016', 'May - 2016', 'June - 2016', 'July - 2016', 'August - 2016', 'September - 2016', 'October - 2016', 'November - 2016', 'December - 2016']; 
 

 
var width = document.querySelector('.chart-wrapper').offsetWidth, 
 
    height = document.querySelector('.chart-wrapper').offsetHeight, 
 
    minOfWH = Math.min(width, height)/2, 
 
    initialAnimDelay = 300, 
 
    arcAnimDelay = 150, 
 
    arcAnimDur = 3000, 
 
    secDur = 1000, 
 
    secIndividualdelay = 150; 
 

 
var radius = undefined; 
 

 
// calculate minimum of width and height to set chart radius 
 
if (minOfWH > 200) { 
 
    radius = 200; 
 
} else { 
 
    radius = minOfWH; 
 
} 
 

 
// append svg 
 
var svg = d3.select('.chart-wrapper').append('svg').attr({ 
 
    'width': width, 
 
    'height': height, 
 
    'class': 'pieChart' 
 
}).append('g'); 
 

 
svg.attr({ 
 
    'transform': 'translate(' + width/2 + ', ' + height/2 + ')' 
 
}); 
 

 
// for drawing slices 
 
var arc = d3.svg.arc().outerRadius(radius * 0.6).innerRadius(radius * 0.45); 
 

 
// for labels and polylines 
 
var outerArc = d3.svg.arc().innerRadius(radius * 0.85).outerRadius(radius * 0.85); 
 

 
// d3 color generator 
 
// let c10 = d3.scale.category10(); 
 

 
var tooltip = d3.select("body").append("div").attr("class", "tooltip").style("opacity", 0); 
 

 
var pie = d3.layout.pie().value(function(d) { 
 
    return d; 
 
}); 
 

 
var draw = function draw() { 
 

 
    svg.append("g").attr("class", "lines"); 
 
    svg.append("g").attr("class", "slices"); 
 
    svg.append("g").attr("class", "labels"); 
 

 
    // define slice 
 
    var slice = svg.select('.slices').datum(dataset).selectAll('path').data(pie); 
 
    slice.enter().append('path').attr({ 
 
    'fill': function fill(d, i) { 
 
     return colors[i]; 
 
    }, 
 
    'd': arc, 
 
    'stroke-width': '25px' 
 
    }).attr('transform', function(d, i) { 
 
    return 'rotate(-180, 0, 0)'; 
 
    }).style('opacity', 0).transition().delay(function(d, i) { 
 
    return i * arcAnimDelay + initialAnimDelay; 
 
    }).duration(arcAnimDur).ease('elastic').style('opacity', 1).attr('transform', 'rotate(0,0,0)'); 
 

 
    slice.transition().delay(function(d, i) { 
 
    return arcAnimDur + i * secIndividualdelay; 
 
    }).duration(secDur).attr('stroke-width', '5px'); 
 

 
    var midAngle = function midAngle(d) { 
 
    return d.startAngle + (d.endAngle - d.startAngle)/2; 
 
    }; 
 

 
    var text = svg.select(".labels").selectAll("text").data(pie(dataset)); 
 

 
    text.enter().append('text').attr('dy', '0.35em').style("opacity", 0).attr("cursor", "default").style('fill', function(d, i) { 
 
    return colors[i]; 
 
    }).text(function(d, i) { 
 
    return weeks[i]; 
 
    }).attr('transform', function(d) { 
 
    // calculate outerArc centroid for 'this' slice 
 
    var pos = outerArc.centroid(d); 
 
    // define left and right alignment of text labels 
 
    pos[0] = radius * (midAngle(d) < Math.PI ? 1 : -1); 
 
    return 'translate(' + pos + ')'; 
 
    }).style('text-anchor', function(d) { 
 
    return midAngle(d) < Math.PI ? "start" : "end"; 
 
    }).transition().delay(function(d, i) { 
 
    return arcAnimDur + i * secIndividualdelay; 
 
    }).duration(secDur).style('opacity', 1); 
 

 
    text.on("mousemove", function(d, i) { 
 
    tooltip.html("the color here<br>is " + colors[i] + "<span style='color:" + colors[i] + ";'><br>This is a text in that color</span>").style('top', d3.event.pageY - 6 + 'px').style('left', d3.event.pageX + 14 + 'px').style("opacity", 1); 
 
    }).on("mouseout", function(d) { 
 
    tooltip.style("opacity", 0); 
 
    }); 
 

 
    var polyline = svg.select(".lines").selectAll("polyline").data(pie(dataset)); 
 

 
    polyline.enter().append("polyline").style("opacity", 0.5).attr('points', function(d) { 
 
    var pos = outerArc.centroid(d); 
 
    pos[0] = radius * 0.95 * (midAngle(d) < Math.PI ? 1 : -1); 
 
    return [arc.centroid(d), arc.centroid(d), arc.centroid(d)]; 
 
    }).transition().duration(secDur).delay(function(d, i) { 
 
    return arcAnimDur + i * secIndividualdelay; 
 
    }).attr('points', function(d) { 
 
    var pos = outerArc.centroid(d); 
 
    pos[0] = radius * 0.95 * (midAngle(d) < Math.PI ? 1 : -1); 
 
    return [arc.centroid(d), outerArc.centroid(d), pos]; 
 
    }); 
 
}; 
 

 
draw(); 
 

 
var button = document.querySelector('button'); 
 

 
var replay = function replay() { 
 

 
    d3.selectAll('.slices').transition().ease('back').duration(500).delay(0).style('opacity', 0).attr('transform', 'translate(0, 250)').remove(); 
 
    d3.selectAll('.lines').transition().ease('back').duration(500).delay(100).style('opacity', 0).attr('transform', 'translate(0, 250)').remove(); 
 
    d3.selectAll('.labels').transition().ease('back').duration(500).delay(200).style('opacity', 0).attr('transform', 'translate(0, 250)').remove(); 
 

 
    setTimeout(draw, 800); 
 
};

+0

所以,你要当有人悬停在本月显示该月的周? – Inconnu

+0

谢谢@Achilles。我想显示每个月对应的星期。让我们说1月 - 周1,周2,周3,周4 .... 2月week5到week8等所有月份。我将使用PHP来回显值,如wee1-23(“23,我会使用php回复数据库”)。 – jane

+0

您可以尝试使用JQuery,因为它是动态的。 – Inconnu

回答

1

您是否尝试过使用每个元素的数据 - 标记来存储数据,然后使用jQuery来读取数据,并将其推到提示。这是我通常处理工具提示数据的方式,因为它可以在元素上动态更新。

例子:

text.on("mouseover", function() { 
    var tip = $(this).attr("data-tip"); 
    yourtooltip.text(tip); 
}); 

<div class="text" data-tip="this is the data you want to display in your tooltip."></div> 
+0

谢谢对于输入@ Korgue。但在我的情况下,我不认为我将能够使用它。这里的文本是通过使用d3。可能是我无法得到它。请你友好地编辑上面的codepen你说什么。可能一两个月,如果你能告诉我。不管怎样,我感谢你的帮助。上帝保佑。 – jane

+0

http://codepen.io/anon/pen/jVmXPa?editors=0010 – jane

+0

尝试使用你的概念,不幸的是,没有运气。 @Korgrue – jane