2017-05-06 51 views
1

下面是我的路线图,其中我使用2线,以显示不同的值,线图不打表上正确的价值,并具有流畅的线条

一号线是蓝色的,而另一个是红色的。

我希望该行有尖锐的点。而且我希望线条坐在正确的位置上,我拥有gievn。例如,如果'28 dec'是值'4'并且'29 dec'是值'2'并且'30 dec'是值'5',那么现在这些值并不是完全按照例如'Dec 25'该值为3,但在图表上线路将在3以下,看起来像2.5。这是因为线条是平滑的线条而不是尖锐的线条?

我想看看这条线上下锋利而不光滑。如果这是有道理的。我希望这是有道理的,因为我对

的JS拨弄我创建挣扎大时间为:https://jsfiddle.net/dave1231/cexLbfnk/2/

,如果有人能告诉我如何我将不胜感激了很多。

谢谢你提前!

这是我的HTML:

<div id="LineChart"></div> 

这是我的CSS:

#search { 
    position:absolute; 
    top: -2%; 
} 

#LineChart{ 
    text-align:center; 
} 

.tablebad thead tr { 
    background-color: #eee; 
} 

.tablegood thead tr th { 
    background-color: #eee; 
} 


path.line { 
    fill: none; 
    stroke: #004ecc; 
    stroke-width: 4px; 
    } 

    path.line2 { 
    fill: none; 
    stroke: #cc0000; 
    stroke-width: 4px; 
    } 

    path.area { 
    fill: #e7e7e7; 
    } 

    .guideline { 
    margin-right: 100px; 
    float: right; 
    } 

    .axis path, 
    .axis line { 
    fill: none; 
    stroke-width: 5px; 
    } 

    .x.axis path { 
    display: none; 
    } 

    .y.axis path { 
    display: none; 
    } 

    .grid .tick { 
    stroke: black; 
    stroke-width: 0.2px; 

    } 
#fade p { 


    text-align: center; 
    animation: fadein 4s; 
    -moz-animation: fadein 4s; /* Firefox */ 
    -webkit-animation: fadein 4s; /* Safari and Chrome */ 
    -o-animation: fadein 4s; /* Opera */ 
} 

#fade ul,li { 

    animation: fadein 4s; 
    -moz-animation: fadein 4s; /* Firefox */ 
    -webkit-animation: fadein 4s; /* Safari and Chrome */ 
    -o-animation: fadein 4s; /* Opera */ 
} 
@keyframes fadein { 
    from { 
     opacity:0; 
    } 
    to { 
     opacity:1; 
    } 
} 
@-moz-keyframes fadein { /* Firefox */ 
    from { 
     opacity:0; 
    } 
    to { 
     opacity:1; 
    } 
} 
@-webkit-keyframes fadein { /* Safari and Chrome */ 
    from { 
     opacity:0; 
    } 
    to { 
     opacity:1; 
    } 
} 
@-o-keyframes fadein { /* Opera */ 
    from { 
     opacity:0; 
    } 
    to { 
     opacity: 1; 
    } 
} 

这是我d3.js:

var margin = { 
    top: 0, 
    right: 90, 
    bottom: 30, 
    left: 50 
    }, 
    width = 1200 - margin.left - margin.right, 
    height = 500 - margin.top - margin.bottom, 
    padding = 1; 

var parseDate = d3.time.format("%d-%b-%y").parse; 

// Set the ranges 
var x = d3.time.scale() 
    .range([10, width - 15]); 

var x2 = d3.scale.ordinal().rangePoints([10, width], .10) 

var y = d3.scale.linear() 
    .range([height, 100]); 

var xAxis = d3.svg.axis().scale(x2) 
    .orient("bottom") 
    .tickFormat(d3.time.format("%b %d")) 
    .ticks(4) 
    .tickPadding(2); 

var yAxis = d3.svg.axis().scale(y) 
    .orient("left"); 

var valueline = d3.svg.line() 
    .interpolate("basis") 
    .x(function(d) { 
    return x(d.date); 
    }) 
    .y(function(d) { 
    return y(d.XMAS); 
    }); 

var valueline2 = d3.svg.line() 
    .interpolate("basis") 
    .x(function(d) { 
    return x(d.date); 
    }) 
    .y(function(d) { 
    return y(d.JANSALES); 
    }); 

//florida 

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

//needed for the grid 
function make_y_axis() { 
    return d3.svg.axis() 
    .scale(y) 
    .orient("left") 
} 

data1 = [{ 
    "date": "24-Dec-12", 
    "XMAS": 2, 
    "JANSALES": 0 
    }, { 
    "date": "25-Dec-12", 
    "XMAS": 3, 
    "JANSALES": 0 
    }, 

    { 
    "date": "26-Dec-12", 
    "XMAS": 1, 
    "JANSALES": 0 
    }, 

    { 
    "date": "27-Dec-12", 
    "XMAS": 2.0, 
    "JANSALES": 0 
    }, 

    { 
    "date": "28-Dec-12", 
    "XMAS": 4.0, 
    "JANSALES": 0 
    }, 

    { 
    "date": "29-Dec-12", 
    "XMAS": 4.0, 
    "JANSALES": 0 
    } 
    , 

    { 
    "date": "29-Dec-12", 
    "XMAS": 5, 
    "JANSALES": 0 
    }, 

    { 
    "date": "30-Dec-12", 
    "JANSALES": 3.0 
    }, 

    { 
    "date": "31-Dec-12", 

    "JANSALES": 2.0 
    }, 

    { 
    "date": "01-Jan-13", 

    "JANSALES": 3.0 
    }, 

    { 
    "date": "02-Jan-13", 

    "JANSALES": 1.0 
    }, 

    { 
    "date": "03-Jan-13", 

    "JANSALES": 3.0 
    }, 

    { 
    "date": "04-Jan-13", 

    "JANSALES": 2.0 
    }, 

    { 
    "date": "05-Jan-13", 

    "JANSALES": 2.0 
    }, 

    { 
    "date": "06-Jan-13", 

    "JANSALES": 1.0 
    }, 

    { 
    "date": "07-Jan-13", 

    "JANSALES": 2.0 
    }, 

    { 
    "date": "08-Jan-13", 

    "JANSALES": 2.0 
    }, 

    { 
    "date": "09-Jan-13", 

    "JANSALES": 3.0 
    }, 

    { 
    "date": "10-Jan-13", 

    "JANSALES": 2.0 
    }, 

    { 
    "date": "11-Jan-13", 

    "JANSALES": 3.0 
    }, 

    { 
    "date": "12-Jan-13", 

    "JANSALES": 3.0 
    }, 

    { 
    "date": "13-Jan-13", 

    "JANSALES": 2.0 
    }, 

    { 
    "date": "14-Jan-13", 

    "JANSALES": 1.0 
    } 
]; 


var color = d3.scale.ordinal().range(["#004ecc", "#cc0000"]); 
//d3.csv("data.csv", function(error, data) { 
data1.forEach(function(d) { 
    d.date = parseDate(d.date); 
    d.XMAS = +d.XMAS; 
    d.JANSALES = +d.JANSALES; 
}); 

// Scale the range of the data 


x.domain(d3.extent(data1, function(d) { 
    return d.date; 
})); 
y.domain([0, 10]); 

x2.domain(data1.map(function(d) { 
    return d.date; 
})); 

//add the grid 
chart1.append("g") 
    .attr("class", "grid") 
    .call(make_y_axis() 
    .tickSize(-width, 0, 0) 
    .tickFormat("") 
) 

chart1.append("path") 
    .attr("class", "line") 
    .attr("stroke", "red") 
    .attr("d", valueline(data1)); 

chart1.append("path") 
    .attr("class", "line2") 
    .attr("d", valueline2(data1.filter(function(d) { 
    return d.date > parseDate("29-Dec-12"); 
    }))); 

// Add the X Axis 
chart1.append("g") 
    .attr("class", "x axis") 
    .attr("transform", "translate(0," + height + ")") 
    .call(xAxis); 

// Add the Y Axis 
chart1.append("g") 
    .attr("class", "y axis") 
    .call(yAxis); 

chart1.append("text") 
    .attr("transform", "translate(" + (width + 3) + "," + y(data1[0].JANSALES) + ")") 
    .attr("x", ".1em") 
    .attr("y", "-40") 
    .attr("text-anchor", "start") 
    .style("fill", "red") 
    .style("font-size", "15") 
    .style("font-weight", "bold") 
    .text("JAN SALES"); 

chart1.append("text") 
    .attr("transform", "translate(" + (width + 3) + "," + y(data1[0].XMAS) + ")") 
    .attr("x", ".1em") 
    .attr("y", "10") 
    .attr("text-anchor", "start") 
    .style("fill", "steelblue") 
    .style("font-size", "15") 
    .style("font-weight", "bold") 
    .text("XMAS"); 

//plus 1: animation 

var curtain = chart1.append('rect') 
    .attr('x', -1 * width) 
    .attr('y', -1 * height - 2) 
    .attr('height', height) 
    .attr('width', width) 
    .attr('class', 'curtain') 
    .attr('transform', 'rotate(180)') 
    .style('fill', '#ffffff') 

/* Optionally add a guideline */ 
var guideline = chart1.append('line') 
    .attr('stroke', '#333') 
    .attr('stroke-width', 0.4) 
    .attr('class', 'guide') 
    .attr('x1', 1) 
    .attr('y1', 1) 
    .attr('x2', 1) 
    .attr('y2', height) 

var t = chart1.transition() 
    .delay(120) 
    .duration(500) 
    .ease('linear') 
    .each('end', function() { 
    d3.select('line.guide') 
     .transition() 
     .style('opacity', 0) 
     .remove() 
    }); 

t.select('rect.curtain') 
    .attr('width', 0); 
t.select('line.guide') 
    .attr('transform', 'translate(' + width + ', 0)') 

d3.select("#show_guideline").on("change", function(e) { 


}); 
+0

不拆除的'.interpolate( “基础”)'在这两个地方,你想要什么? –

回答

2

这里只是删除interpolate功能:

var valueline = d3.svg.line() 
    .interpolate("basis") 
    .x(function(d) { 
     return x(d.date); 
    }) 
    .y(function(d) { 
     return y(d.XMAS); 
    }); 

并在valueline2中也做同样的事情。现在你正在使用basis,它创建了B-spline

如果您想要设置不同的插值,请在D3 v3.x中提供here is a list的可用选项。

这是你更新的提琴:https://jsfiddle.net/7apnhbqd/

+0

有没有办法在每个价值点上悬停? – dave

2

如果你不想D3平滑的边缘,你应该删除从线发生器插值。

https://jsfiddle.net/cexLbfnk/3/

var valueline2 = d3.svg.line() 
    .interpolate("basis") // this line needs to go 
    .x(function(d) { 
    return x(d.date); 
    }) 
    .y(function(d) { 
    return y(d.JANSALES); 
    }); 
+0

有没有办法在每个价值点上悬停? – dave

+0

此外,你帮助我的条形图响应页面。有没有办法为这个折线图做到这一点? – dave