Forum Discussion
d3 Line graph dual y-axis
Hi, I am also facing the same problem. I am using the custom visual D3JSVisuals and embedding the D3 code into it.
I get to see that the lines always start from the same point and not from the previous point. Can't figure where mistake is going on.
Request your help in the same.
D3 Version : V3
Custom Visual: D3JSVisual
D3 Code: http://bl.ocks.org/d3noob/e34791a32a54e015f57d
PBI Code :
var margin = {top: 30, right: 40, bottom: 30, left: 50},
width = pbi.width - margin.left - margin.right,
height = pbi.height - margin.top - margin.bottom;
var parseDate = d3.time.format("%d-%b-%y").parse;
var x = d3.time.scale().range([0, width]);
var y0 = d3.scale.linear().range([height, 0]);
var y1 = d3.scale.linear().range([height, 0]);
var xAxis = d3.svg.axis().scale(x)
.orient("bottom").ticks(5);
var yAxisLeft = d3.svg.axis().scale(y0)
.orient("left").ticks(5);
var yAxisRight = d3.svg.axis().scale(y1)
.orient("right").ticks(5);
/*var valueline = d3.svg.line()
.x(function(d) { return d.date; })
.y(function(d) { return d.close; })
.interpolate("linear");
*/
var valueline = d3.svg.line()
.x(function(d) { return x(d.date); })
.y(function(d) { return y0(d.close); })
.interpolate("cardinal");
var valueline2 = d3.svg.line()
.x(function(d) { return x(d.date); })
.y(function(d) { return y1(d.open); });
var svgCont = d3.select("#chart")
.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 + ")");
// Get the data
pbi.dsv(function(data) {
data.forEach(function(d) {
d.date = parseDate(d.date);
d.close = +d.close;
d.open = +d.open;
});
// Scale the range of the data
x.domain(d3.extent(data, function(d) { return d.date; }));
y0.domain([0, d3.max(data, function(d) {
return Math.max(d.close); })]);
y1.domain([0, d3.max(data, function(d) {
return Math.max(d.open); })]);
svgCont.append("path") // Add the valueline path.
.attr("class","line")
.attr("d", valueline(data));
/*svg.append("path") // Add the valueline2 path.
.style("stroke", "red")
.attr("d", valueline2(data));*/
svgCont.append("g") // Add the X Axis
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
svgCont.append("g")
.attr("class", "y axis")
.style("fill", "steelblue")
.call(yAxisLeft);
svgCont.append("g")
.attr("class", "y axis")
.attr("transform", "translate(" + width + " ,0)")
.style("fill", "red")
.call(yAxisRight);
});jppp Can you help with this issue? It seems devs use D3.JS visual.
Ignat Vilesov,
Software Engineer
Microsoft Power BI Custom Visuals
- jppp8 years agoContinued Contributor
I managed to get the code working and basically the trick is in how the data is presented to and used by D3js.
In this case the date column: I have kept it as a string, e.g. '26-Mar-18' and add a derived column, convert as a date type and use that for the 'sort-by' column.After that the line d3.time.format("%d-%b-%y").parse; will correctly parse the column to dates that can be used by the d3js axis.
If you need some more explanation; I got a PBIX file that I can share if needed.
-JP
- aar0n8 years agoAdvocate II
i would really appreciate if you could share the file!
Thanks for the help!!
- sriksrin8 years agoFrequent Visitor
Hi JP,
While i am trying what you have said, it would really be very helpful to share the pbix file.
Thanks
Srikanth
- v-viig8 years agoCommunity Champion
PBIX has been attached by Jan Pieter. See link above.
Ignat Vilesov,
Software Engineer
Microsoft Power BI Custom Visuals
- tcd1nc8 years agoFrequent Visitor
https://github.com/tcd1nc/DualYAxesChart for alternative
- sriksrin8 years agoFrequent Visitor
Thanks jppp for sharing the pbix file. I am still puzzled as the new duplicate column didnot change any data after been applied to sort. Can u share some more details on the fix.
- Anonymous6 years agoNot applicable
Can you reshare PBIX file ? cause the link you posted is no longer available.