回调函数返回未定义

时间:2019-03-04 17:46:46

标签: javascript d3.js data-visualization

我正在d3.js中构建三个折线图,我希望当观众将鼠标悬停在折线图的一部分上时,他们能够看到国家/地区,日期和事件。当前返回的所有内容都是不确定的。任何帮助将不胜感激。

这是我的html:

<div id="callOut">
<div id="divCountry"></div>
<div id="divDate"></div>
<div id="divIncidents"></div>
</div>

这是我的助手功能:

function circleHover(chosen) {

if (modus == "incidents") {

d3.select("#callOut")
  .style("top", "570px")
  .style("left", "30px"); 


d3.select("#divCountry").html('Country: ' + chosen.country);
d3.select("#divDate").html('Date: ' + chosen.date);
d3.select("#divIncidents").html('Incidents: ' + chosen.incidents);


d3.select("#callOut")
.style("visibility","visible");

}
}; 

function showOne(d) {


var margin = {top: 80, right: 80, bottom: 80, left: 80},
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;


var svg = d3.select("#svg").append("svg")
          .attr("width", width)
          .attr("height", height);

var incidentsData = svg.append("g"); 

incidentsData.selectAll(".incidentsData")
            .data(incidentData)
            .enter()
            .append('incidentsData')
            .attr('class', 'incidentsData');

var chosen = d;
var setOpacity = 0;

if (modus == "incidents") {
  circleHover(chosen);
  setOpacity = 0.1;

  incidentsData.selectAll(".incidentsData")
 .filter(function (d) { return eval("d.country") != 
 eval("chosen.country");})
 .style("fill-opacity", setOpacity);
}

}
};

这是我的eventsData的快照:

var incidentData = 
[
{
"country": "Israel",
"date": 1971,
"incidents": 1,
"": ""
},
{
"country": "Israel",
"date": 1972,
"incidents": 15,
"": ""
},

这是我的totalIncidentsLineGraph:

function totalIncidentsLineGraph() {

modus = "incidents"; 


var margin = {top: 80, right: 80, bottom: 80, left: 80},
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;


var svg = d3.select("#svg").append("svg")
          .attr("width", width)
          .attr("height", height);

var incidentsData = svg.append("g"); 

incidentsData.selectAll(".incidentsData")
            .data(incidentData)
            .enter()
            .append('incidentsData')
            .attr('class', 'incidentsData')
            .attr('id', function(d) { return d.country, d.date, 
             d.incidents}); 

 var parse = d3.time.format("%Y").parse; 

var x = d3.time.scale().range([0, width]),
y = d3.scale.linear().range([height, 0]),
xAxis = d3.svg.axis().scale(x).tickSize(-height).tickSubdivide(true),
yAxis = d3.svg.axis().scale(y).ticks(4).orient("right");


var area = d3.svg.area()
.interpolate("monotone")
.x(function(d) { return x(d.date); })
.y0(height)
.y1(function(d) { return y(d.incidents); }); 

var line = d3.svg.line()
.interpolate("monotone")
.x(function(d) { return x(d.date); })
.y(function(d) { return y(d.incidents); });

function type(d) {
d.country = d.country;
d.date = parse(d.date);
d.incidents = +d.incidents
return d;
};

var data = d3.csv("static/data/israel/incidents_linechart.csv", type, 
function(error, data) {
console.log(data);

var israel = data.filter(function(d) {
return d.country == "Israel";
});

var unitedStates = data.filter(function(d) {
return d.country == "United States";
});

var iran = data.filter(function(d) {
return d.country == "Iran";
});

x.domain([unitedStates[0].date, unitedStates[unitedStates.length - 
1].date]);
y.domain([0, d3.max(egypt, function(d) { return d.incidents; 
})]).nice();

 var svg = d3.select("svg")
  .attr("width", width + margin.left + margin.right)
  .attr("height", height + margin.top + margin.bottom)
  .append("g")
  .attr("transform", "translate(" + margin.left + "," + margin.top + 
   ")")


svg.append("clipPath")
  .attr("id", "clip")
  .append("rect")
  .attr("width", width)
  .attr("height", height);


 svg.append("g")
  .attr("class", "x axis")
  .attr("transform", "translate(0," + height + ")")
  .call(xAxis);

 svg.append("g")
  .attr("class", "y axis")
  .attr("transform", "translate(" + width + ",0)")
  .call(yAxis);

  svg.append("text")
      .attr("id", "titleLine")
      .attr("y", -50)
      .attr("x", 250)
      .attr("dy", ".35em")
      .style("font-size", "12px")
      .text("Total Incidents Amongst Countries: 1970 - 2017"); 

 var colors = d3.scale.category10();

  svg.selectAll('.line')
.data([israel, unitedStates, iran, saudiArabia, turkey, egypt, syria, 
lebanon, jordan, palestine]) /// can add however many i want here 
.enter()
  .append('path')
    .attr('class', 'line')
    .style('stroke', function(d) {
      return colors(Math.random() * 50);
    })
    .attr('clip-path', 'url(#clip)')
    .attr('d', function(d) {
      return line(d);
    })
  .on("mouseover", showOne)
  .on("mouseout", showAll); 

0 个答案:

没有答案