Tag Archives: visualizations

D3 visualizations work by manipulating elements in the browser window. This short tutorial will demonstrate the very basics of that. This is also a working, simple demonstration of the interplay of HTML, CSS and JavaScript from the introduction page in this D3 tutorial set.

For the sake of making this simple, everything will come from one HTML document, which can be found in my GitHub . This will container the HTML and JavaScript. You can [and should] separate the JavaScript into its own file on bigger projects.

In this small project, we will start with a simple div container with the class of “container”.

Python

1

<div class="container"></div>

Right now this doesn’t do anything, so it’s not worth showing. But if D3 code is added to create a blue box, it might look a little more interesting. [Provided you find blue boxes interesting.]

Blue Block

XHTML

1

2

3

4

5

6

7

8

9

10

11

12

<script type="text/javascript">

//creates the blue block

d3.selectAll('.container')

.append('div')//adds another div as a child of the container

.attr('class','new-block')//gives the new div the class of new-block

.style('width','300px')//sets width

.style('height','100px')//sets height

.style('background-color','#0066cc')//sets background color

.style('color','white')//sets font color

.text('Blue block')//sets the text that the div will contain

</script>

Above is a simple example of a basic D3 procedure. It can helpful to think about this command as having two parts: getting a DOM [browser] element to manipulate and giving instructions for those manipulations. Here is what the code is doing:

The select statement [d3.selectAll()] code is finding every instance of the class of “container”. [There is only one element on the page.]

The append() method adds another div as a child element inside of the container div.

The attr() method gives the new div a class of “new-block”.

The style() method gives the new div several style properties

The text() method puts the text “Blue block” into the div

The style() and attr() methods can be a little confusing since they do similar things, but attr() will place attributes in the HTML tag, while style() writes in-line CSS for the element, which will override any CSS stylesheet you load in the header. These are just a few of the different methods you can use for a D3 DOM selection object, and you can find more in the D3 API reference.

Blue Block with Functions

Creating the blue block was a blast, but adding some functionality might make this a little more useful. Let’s make the block change color on a click and then remove it on a double click.

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

<script type="text/javascript">

//creates the blue block

d3.selectAll('.container')

.append('div')

.attr('class','new-block')

.style('width','300px')

.style('height','100px')

.style('background-color','#0066cc')

.style('color','white')

.style('cursor','pointer')

.text('Blue block')

d3.selectAll('.container')

.append('div')

.attr('class','new-block')

.style('width','300px')

.style('height','100px')

.style('background-color','#0066cc')

.style('color','white')

.style('cursor','pointer')

.text('Blue block')

//click

d3.selectAll('.new-block').on('click',function(){

//turns block to orange

d3.select(this)

.style('background-color','#FF9821')

})

//double click

d3.selectAll('.new-block').on('dblclick',function(){

d3.select(this)

.remove()

})

</script>

The first part of the script to create the blue block is the same, except I’ve doubled the code to have to blue blocks and I added new code that interacts with the blue block. The on() method allows you to attach an event listener to elements rendered in the browser. These will wait until a certain event happens. In the example it executes a function to turn the box orange when the blue box is clicked. You can put many different instructions in here and aren’t limited to manipulating the element that is being clicked. Below is an illustration that I find useful for visualizing how event listeners are attached. I will devote another post to the details of D3 event listeners.

You might notice the d3.select(this) in the code. this is a fun keyword in JavaScript syntax which deals with scope, and the this in the code refers to the specific DOM element which was clicked or double clicked. If you click on the left block, only that block turns orange. You could change the code replace this with '.block-new' and clicking one button will change both buttons to orange.

Having the d3.select(this) code blocks in the event listener function makes it so they are only executed when the event happens. The block’s background color is changed to orange [#FF9821] when it’s clicked. The remove() method deletes any DOM elements within the selection including the children elements. This comes in handy when you need to rebuild or update a data visualization.