- 
      
- 
        Save benjchristensen/2579599 to your computer and use it in GitHub Desktop. 
| <html> | |
| <head> | |
| <title>Simple Line Graph using SVG and d3.js</title> | |
| <script src="http://mbostock.github.com/d3/d3.v2.js"></script> | |
| <style> | |
| /* tell the SVG path to be a thin blue line without any area fill */ | |
| path { | |
| stroke: steelblue; | |
| stroke-width: 1; | |
| fill: none; | |
| } | |
| .axis { | |
| shape-rendering: crispEdges; | |
| } | |
| .x.axis line { | |
| stroke: lightgrey; | |
| } | |
| .x.axis .minor { | |
| stroke-opacity: .5; | |
| } | |
| .x.axis path { | |
| display: none; | |
| } | |
| .y.axis line, .y.axis path { | |
| fill: none; | |
| stroke: #000; | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <div id="graph" class="aGraph" style="position:absolute;top:0px;left:0; float:left;"></div> | |
| <script> | |
| /* implementation heavily influenced by http://bl.ocks.org/1166403 */ | |
| // define dimensions of graph | |
| var m = [80, 80, 80, 80]; // margins | |
| var w = 1000 - m[1] - m[3]; // width | |
| var h = 400 - m[0] - m[2]; // height | |
| // create a simple data array that we'll plot with a line (this array represents only the Y values, X will just be the index location) | |
| var data = [3, 6, 2, 7, 5, 2, 0, 3, 8, 9, 2, 5, 9, 3, 6, 3, 6, 2, 7, 5, 2, 1, 3, 8, 9, 2, 5, 9, 2, 7]; | |
| // X scale will fit all values from data[] within pixels 0-w | |
| var x = d3.scale.linear().domain([0, data.length]).range([0, w]); | |
| // Y scale will fit values from 0-10 within pixels h-0 (Note the inverted domain for the y-scale: bigger is up!) | |
| var y = d3.scale.linear().domain([0, 10]).range([h, 0]); | |
| // automatically determining max range can work something like this | |
| // var y = d3.scale.linear().domain([0, d3.max(data)]).range([h, 0]); | |
| // create a line function that can convert data[] into x and y points | |
| var line = d3.svg.line() | |
| // assign the X function to plot our line as we wish | |
| .x(function(d,i) { | |
| // verbose logging to show what's actually being done | |
| console.log('Plotting X value for data point: ' + d + ' using index: ' + i + ' to be at: ' + x(i) + ' using our xScale.'); | |
| // return the X coordinate where we want to plot this datapoint | |
| return x(i); | |
| }) | |
| .y(function(d) { | |
| // verbose logging to show what's actually being done | |
| console.log('Plotting Y value for data point: ' + d + ' to be at: ' + y(d) + " using our yScale."); | |
| // return the Y coordinate where we want to plot this datapoint | |
| return y(d); | |
| }) | |
| // Add an SVG element with the desired dimensions and margin. | |
| var graph = d3.select("#graph").append("svg:svg") | |
| .attr("width", w + m[1] + m[3]) | |
| .attr("height", h + m[0] + m[2]) | |
| .append("svg:g") | |
| .attr("transform", "translate(" + m[3] + "," + m[0] + ")"); | |
| // create yAxis | |
| var xAxis = d3.svg.axis().scale(x).tickSize(-h).tickSubdivide(true); | |
| // Add the x-axis. | |
| graph.append("svg:g") | |
| .attr("class", "x axis") | |
| .attr("transform", "translate(0," + h + ")") | |
| .call(xAxis); | |
| // create left yAxis | |
| var yAxisLeft = d3.svg.axis().scale(y).ticks(4).orient("left"); | |
| // Add the y-axis to the left | |
| graph.append("svg:g") | |
| .attr("class", "y axis") | |
| .attr("transform", "translate(-25,0)") | |
| .call(yAxisLeft); | |
| // Add the line by appending an svg:path element with the data line we created above | |
| // do this AFTER the axes above so that the line is above the tick-lines | |
| graph.append("svg:path").attr("d", line(data)); | |
| </script> | |
| </body> | |
| </html> | 
If D3 is TeX, I'm waiting for LaTeX. If D3 is assembly, I'm waiting for C. I.e., a layer on top of it to make life easier. Coming from Matplotlib (pylab.plot(data)) or similar-like in R, Julia, Matlab, or any data-wrangling language, this is incredibly heavyweight.
Edit: C3.js seems like a good start!
Very nice Example. Good job @benjchristensen
Thanks so much for making this gist, it has helped me out a ton.
Extremely useful. Thanks a ton !
Thank you!
@benjchristensen Would you mind updating this to be Version 4 compatible? E.g. <script src="http://mbostock.github.com/d3/d3.v2.js"></script> would be changed to import the correct D3 V4 micro-libraries and main D3 V4 library needed to run this code.
How to fetch data from external JSON file?
Thanks for sharing your code solve my problem.
very nice