Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to embed a d3.js example to the Jekyll blog post?

Tags:

html

jekyll

d3.js

I am experimenting with this Jekyll theme http://richbray.me/frap/

And I want to create a blog post showing this D3.js example: http://bl.ocks.org/mbostock/4061502

So the main difficulty is how to let Markdown render the script to let d3.js show its contents. Any ideas?

like image 993
TongZZZ Avatar asked Mar 26 '14 04:03

TongZZZ


People also ask

What is the way to include D3 js library into HTML site?

Include D3 Library from CDN js library by linking it directly into our HTML page from the Content Delivery Network (CDN). CDN is a network of servers where files are hosted and are delivered to a user based on their geographic location. If we use the CDN, we do not need to download the source code.

What is SVG D3 JS?

Advertisements. SVG stands for Scalable Vector Graphics. SVG is an XML-based vector graphics format. It provides options to draw different shapes such as Lines, Rectangles, Circles, Ellipses, etc. Hence, designing visualizations with SVG gives you more power and flexibility.

What can you use D3 js for?

D3 is a JavaScript library and framework for creating visualizations. D3 creates visualizations by binding the data and graphical elements to the Document Object Model. D3 associates (binding) the data (stuff you want to visualize) with the DOM. This allows the user to manipulate, change or add to the DOM.


2 Answers

There are a few ways to get this to work:

Embed an <iframe>

In the d3 example, there's an embedded iframe:

<iframe src="/mbostock/raw/4061502/0a200ddf998aa75dfdb1ff32e16b680a15e5cb01/" marginwidth="0" marginheight="0" scrolling="no"></iframe>

You can change this to

<iframe src="http://bl.ocks.org/mbostock/raw/4061502/0a200ddf998aa75dfdb1ff32e16b680a15e5cb01/" marginwidth="0" marginheight="0" scrolling="no"></iframe>

Then, you can simply paste this iframe line into your markdown file. Make sure that you have an empty line before and after it.

You can also add width="600" height="400" attributes to that iframe element so that most of the chart will fit in the iframe.

Target a block element within the document (e.g. <div> instead of <body>)

  • change var svg = d3.select("body").selectAll("svg") to var svg = d3.select("div#example").selectAll("svg")
  • save morley.csv (you can get it here) to the root directory of your Jekyll site, then change d3.csv("morley.csv", function(error, csv) to d3.csv("/morley.csv", function(error, csv) (copy this file into your Jekyll project to resolve cross-site scripting errors)
  • change <script src="box.js"></script> to <script src="http://bl.ocks.org/mbostock/raw/4061502/0a200ddf998aa75dfdb1ff32e16b680a15e5cb01/box.js"></script>
  • create a new element called <div id="example"></div>

I created this Jekyll blog post that shows how to do this. Also, check out Matt Shwery's blog post (and raw markdown) with another d3 / Jekyll example.

like image 180
nicksuch Avatar answered Sep 27 '22 22:09

nicksuch


inframe is no longer supported by bl.ocks you will get the following error

Refused to display 'http://bl.ocks.org/mbostock/raw/4061502/0a200ddf998aa75dfdb1ff32e16b680a15e5cb01/' in a frame because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'self' *.ocks.org".

you can try using rawgit.com

like image 40
Raj Vansia Avatar answered Sep 27 '22 23:09

Raj Vansia