Skip to content

Commit 5f47187

Browse files
committed
Update calendar example to use DOW data.
1 parent 544e88d commit 5f47187

4 files changed

Lines changed: 5401 additions & 6 deletions

File tree

examples/calendar/calendar.html

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<head>
33
<title>Calendar</title>
44
<script type="text/javascript" src="../../d3.js"></script>
5+
<script type="text/javascript" src="csv.js"></script>
6+
<script type="text/javascript" src="nest.js"></script>
57
<style type="text/css">
68

79
body {
@@ -25,31 +27,48 @@
2527
<body>
2628
<script type="text/javascript">
2729

28-
var color = d3.interpolateRgb("#Feffc3", "#D80223");
30+
var c0 = d3.interpolateRgb("#Feffc3", "#D80223"),
31+
c1 = d3.interpolateRgb("#Feffc3", "#B5E28B");
32+
33+
function color(d) {
34+
if (isNaN(d)) return "none";
35+
d *= 40; // TODO quantile scale
36+
return d > 0 ? c1(d) : c0(-d);
37+
}
38+
39+
var dow = nest(csv("dow.csv"))
40+
.key(function(d) { return d.Date; })
41+
.rollup(function(d) { return (d[0].Close - d[0].Open) / d[0].Open; });
2942

3043
var w = 960,
3144
h = 150,
32-
p = 10,
45+
p = 14,
3346
z = ~~Math.min((h - p * 2) / 7, (w - p * 2) / 53);
3447

3548
var vis = d3.select("body")
3649
.selectAll("svg")
37-
.data(range(1987, 2000))
50+
.data(range(1990, 2011))
3851
.enter.append("svg:svg")
3952
.attr("width", w)
4053
.attr("height", h)
4154
.append("svg:g")
4255
.attr("transform", "translate(" + p + "," + p + ")");
4356

57+
vis.append("svg:text")
58+
.attr("transform", "translate(-6," + h/2 + ")rotate(-90)")
59+
.text(function(d) { return d; });
60+
4461
vis.selectAll("rect.day")
4562
.data(dates)
4663
.enter.append("svg:rect")
4764
.attr("x", function(d) { return d.week * z; })
4865
.attr("y", function(d) { return d.day * z; })
4966
.attr("class", function(d) { return "day q" + d.month; })
50-
.attr("fill", function(d) { return color(Math.random()); })
67+
.attr("fill", function(d) { return color(dow[d.Date]); })
5168
.attr("width", z)
52-
.attr("height", z);
69+
.attr("height", z)
70+
.append("svg:title")
71+
.text(function(d) { return d.Date + ": " + (dow[d.Date] * 100).toFixed(1) + "%"; });
5372

5473
vis.selectAll("path.month")
5574
.data(months)
@@ -82,6 +101,16 @@
82101
return range;
83102
}
84103

104+
function pad(n) {
105+
return n < 10 ? "0" + n : n;
106+
}
107+
108+
function format(d) {
109+
var month = d.getMonth() + 1,
110+
date = d.getDate();
111+
return d.getFullYear() + "-" + pad(month) + "-" + pad(date);
112+
}
113+
85114
function dates(year) {
86115
var dates = [],
87116
date = new Date(year, 0, 1),
@@ -91,7 +120,8 @@
91120
dates.push({
92121
day: day = date.getDay(),
93122
week: week,
94-
month: date.getMonth()
123+
month: date.getMonth(),
124+
Date: format(date)
95125
});
96126
date.setDate(date.getDate() + 1);
97127
if (day == 6) week++;

examples/calendar/csv.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
function csv(url) {
2+
var values = [],
3+
req = new XMLHttpRequest(),
4+
value,
5+
row,
6+
rows,
7+
columns,
8+
i,
9+
n,
10+
j,
11+
m;
12+
req.overrideMimeType("text/plain");
13+
req.open("GET", url, false);
14+
req.send(null);
15+
rows = req.responseText.split(/\n/g);
16+
header = rows[0].split(/,/g);
17+
for (i = 1, n = rows.length; i < n; ++i) {
18+
if ((row = rows[i]).length) {
19+
values.push(value = {});
20+
for (j = 0, columns = row.split(/,/g), m = columns.length; j < m; ++j) {
21+
value[header[j]] = columns[j];
22+
}
23+
}
24+
}
25+
return values;
26+
}

0 commit comments

Comments
 (0)