Skip to content

Instantly share code, notes, and snippets.

@allardw
Last active February 27, 2020 14:34
Show Gist options
  • Save allardw/1e5697279523002aaa0e to your computer and use it in GitHub Desktop.
Save allardw/1e5697279523002aaa0e to your computer and use it in GitHub Desktop.
Eerste eilegdatum zangvogels

Eerste eilegdatum zangvogels, 1986-2014

De laatste decennia zijn zangvogels eerder gaan broeden, wellicht vanwege hogere temperaturen in het voorjaar. In dit figuur staat voor 44 zangvogels aangegeven waneer het eerste ei gelegd werd in de periode van 1986 tot en met 2014. Goed te zien is hoe deze vogels steeds vroeger in het jaar hun eieren leggen.

Bron data: compendiumvoordeleefomgeving.nl

naam 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014
Appelvink 132 132 127 126 122 127 128 124 127 130 125 121 122 122 122 122 120 123 126 123 123 120 122 120 123 120 121 127 116
Boerenzwaluw 169 169 164 163 159 164 164 166 161 162 164 161 157 158 160 160 158 161 158 158 159 156 160 156 160 156 162 162 157
Bonte vliegenvanger 132 132 130 132 129 136 129 126 126 128 129 128 125 127 125 127 126 123 126 125 125 121 126 123 126 121 126 128 124
Boomklever 117 115 109 107 98 102 110 106 105 110 111 106 107 104 106 112 105 103 107 102 114 101 104 102 104 102 98 113 97
Boomkruiper 126 127 120 128 116 120 121 118 121 118 121 119 114 116 122 115 108 117 108 114 117 113 108 113 120 109 122 120 110
Bosrietzanger 161 161 156 155 151 156 157 153 156 154 155 150 151 151 151 153 149 152 154 155 152 149 151 149 152 149 150 156 145
Ekster 108 107 102 101 98 102 103 100 103 103 104 97 98 98 97 98 96 99 101 99 98 96 98 96 99 96 97 102 92
Fitis 134 133 128 127 123 128 129 126 129 128 129 123 124 124 123 123 121 125 127 124 124 122 124 121 125 121 123 128 118
Geelgors 151 151 146 145 141 146 147 143 147 146 147 140 141 141 143 139 139 142 145 142 142 139 141 139 142 139 140 146 135
Gekraagde roodstaart 137 136 138 135 133 142 135 131 129 133 135 134 130 129 125 131 126 130 129 126 127 129 129 124 129 121 128 131 123
Gierzwaluw 155 154 149 148 144 149 150 139 146 153 154 143 149 144 150 146 146 140 142 145 143 144 142 145 148 141 141 146 144
Glanskop 116 112 110 106 100 110 108 107 110 110 117 106 110 103 108 110 103 106 106 106 106 100 107 102 106 103 104 109 97
Grasmus 150 149 144 143 139 144 145 142 145 142 141 142 139 140 139 138 137 141 143 142 140 137 139 137 140 140 139 144 134
Graspieper 129 129 123 123 119 124 125 121 124 124 125 120 119 119 115 117 119 120 120 117 119 118 119 116 124 121 117 125 110
Grauwe klauwier 167 167 162 161 157 162 163 159 163 162 161 156 150 158 160 156 155 159 167 160 158 155 157 155 158 155 157 162 152
Grauwe vliegenvanger 148 161 156 153 151 156 157 153 154 163 148 150 154 156 150 151 149 153 155 165 152 149 151 163 152 149 149 145 146
Grote lijster 123 123 117 117 113 118 119 115 118 118 119 112 113 113 116 109 111 114 116 114 114 111 113 111 114 111 112 117 107
Heggenmus 141 141 136 135 131 136 137 133 153 143 137 126 113 131 123 122 130 142 143 131 132 136 120 129 132 129 130 135 125
Huiszwaluw 176 176 171 170 166 171 172 168 171 171 174 159 169 181 162 166 164 167 170 167 146 164 166 174 167 164 165 170 160
Kauw 114 111 106 107 106 111 112 110 110 116 111 106 104 106 109 106 104 108 110 107 107 104 114 106 106 104 105 111 100
Kleine karekiet 173 173 168 167 163 165 159 160 168 167 168 164 169 169 159 161 147 164 174 167 164 164 164 164 167 160 164 169 158
Kneu 152 160 156 137 148 144 145 141 141 135 140 138 131 140 143 142 126 141 143 148 130 137 139 137 148 131 142 144 134
Koolmees 129 123 117 117 110 119 122 116 118 120 123 118 113 112 114 118 112 113 115 108 117 105 113 111 117 107 111 124 103
Kruisbek 81 81 75 74 71 76 76 73 75 76 77 47 95 71 71 71 69 72 74 72 72 69 71 69 72 69 70 75 65
Kuifmees 115 115 106 109 105 110 111 107 110 110 111 104 105 109 105 105 103 106 109 106 106 103 105 103 106 103 104 109 99
Matkop 118 117 112 112 108 111 113 110 113 112 113 107 108 108 107 108 105 109 111 108 108 106 108 105 109 106 107 112 102
Merel 122 130 125 124 120 122 126 122 130 131 130 121 114 119 120 118 118 127 128 121 129 114 110 117 118 123 123 123 111
Pimpelmees 125 119 115 112 106 115 116 112 115 114 118 112 109 108 109 115 106 109 110 106 115 102 109 106 110 104 105 119 99
Putter 144 144 138 138 134 139 140 136 139 139 140 133 134 134 133 134 132 135 137 135 135 132 134 132 135 132 133 138 128
Ringmus 138 134 130 129 120 131 144 139 136 137 137 129 129 124 132 132 123 119 126 124 132 120 129 130 134 133 134 138 124
Roodborst 135 135 130 129 136 130 131 127 122 121 132 118 138 127 127 120 123 126 129 126 126 121 119 123 126 132 126 130 118
Roodborsttapuit 130 130 125 124 120 125 126 122 126 127 126 119 119 115 128 135 126 118 124 121 121 118 126 118 121 110 115 114 109
Spotvogel 169 169 164 163 159 164 165 161 164 164 165 158 159 159 159 159 160 162 160 157 160 159 158 156 156 156 159 160 162
Spreeuw 118 118 112 109 105 114 114 108 112 112 120 114 109 108 109 113 110 111 112 114 117 105 110 112 114 107 112 115 108
Tjiftjaf 137 137 131 131 127 132 133 129 140 134 137 125 124 127 127 122 127 131 137 133 117 125 127 113 128 125 126 131 121
Tuinfluiter 160 159 154 153 150 154 155 152 156 156 146 140 150 150 149 138 148 142 154 150 157 157 154 146 143 148 151 167 155
Veldleeuwerik 134 134 129 128 124 129 130 126 130 129 130 123 124 128 122 124 124 126 128 123 125 125 140 118 127 127 120 118 110
Vink 135 135 129 128 125 130 130 127 134 119 125 125 130 125 123 122 126 132 137 120 126 123 125 123 122 129 120 129 119
Winterkoning 140 139 134 151 130 134 135 132 144 135 136 129 121 130 123 123 132 131 133 131 130 128 128 116 129 133 130 134 123
Witte kwikstaart 142 142 137 125 132 137 138 134 134 131 148 135 132 127 119 135 129 138 136 154 133 133 132 130 138 128 135 134 115
Zanglijster 134 134 129 128 124 129 130 126 135 126 126 121 121 123 117 121 119 132 138 122 125 130 132 113 124 122 122 129 124
Zwarte kraai 111 110 105 104 100 105 106 103 100 109 104 103 101 99 101 104 96 102 104 101 101 98 100 98 102 98 100 105 95
Zwarte mees 140 130 116 120 116 120 123 119 119 124 126 116 116 110 116 114 111 113 115 101 114 109 109 120 110 114 103 129 111
Zwartkop 146 145 140 139 135 140 141 138 144 140 143 129 132 136 135 131 137 140 139 137 144 134 136 133 132 131 136 140 130
<!DOCTYPE html>
<meta charset="utf-8">
<style>
text {
font-family: Verdana, Arial, sans-serif;
font-size: 0.6em;
font-stretch: condensed;
fill: darkgrey;
}
text.years {
font-size: 0.55em;
font-stretch: extra-condensed;
}
text.hover {
font-weight: bold;
fill: black;
}
.legend text {
fill: black;
}
div.tooltip {
font-family: Verdana, Arial, sans-serif;
font-size: 0.6em;
position: absolute;
text-align: center;
padding: 1px;
background: lightsteelblue;
border: 0px;
border-radius: 4px;
pointer-events: none;
}
</style>
<div id="viz"></div>
<script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script>
var width = 960,
height = 500;
var padding = 10;
var rasterw = 750-padding,
rasterh = height-3*padding;
var svg = d3.select("#viz").append("svg")
.attr("width",width)
.attr("height",height)
.append("g")
.attr("transform","translate("+padding+","+padding+")");;
var colours = ["#4575b4","#91bfdb","#e0f3f8", "#ffffbf", "#fee090", "#fc8d59"].reverse();
var heatmapColour = d3.scale.linear()
.domain(d3.range(0, 1, 1.0 / (colours.length - 1)))
.range(colours);
var div = d3.select("body").append("div")
.attr("class", "tooltip")
.style("opacity", 0);
d3.tsv("birds.tsv", function(error, _data) {
_data.sort(function(a,b) {return a[2014]-b[2014]});
years = Object.keys(_data[0]);
years.forEach(function(d,i) {
if (d == "naam") {
years.splice(i, 1);}
});
var data = [];
_data.forEach(function(d,i) {
data.push({
naam: d.naam,
values: years.map(function(o){
return [o,d[o]];}),
extent: d3.extent(years.map(function(o){return parseInt(d[o]);}))
});
});
var cn = years.length,
rn = data.length;
var bw = rasterw/cn,
bh = rasterh/rn;
var birds = svg.selectAll("birds")
.data(data)
.enter().append("g")
.attr("transform",function(d,i) {return "translate(0,"+i*bh+")";});
birds.append("text")
.text(function(d) {return d.naam})
.attr("class",function(d) {return "b"+d.naam})
.attr("transform",function(d,i) {return "translate("+(rasterw+3)+","+(bh-2)+")";});
var blocks = birds.selectAll("blocks")
.data(function(d) {return d.values;})
.enter().append("rect")
.attr("class",function(d) {
p = d3.select(this.parentNode).datum();
return "y"+d[0]+" b"+p.naam})
.attr("width",bw)
.attr("height",bh)
.style("fill",function(d) {
p = d3.select(this.parentNode).datum();
c = d3.scale.linear().domain(p.extent).range([0,1]);
return heatmapColour(c(d[1]));
})
.attr("transform",function(d,i) {return "translate("+i*bw+",0)";})
.on("mouseover", function(d) {
d3.selectAll(".hover").classed("hover", false);
d3.selectAll(".y"+d[0]).classed("hover", true);
p = d3.select(this.parentNode).datum();
p = p.naam;
d3.selectAll(".b"+p.replace(" ",".")).classed("hover", true);
div.transition()
.duration(200)
.style("opacity", .7);
div .html("Eerste eilegdatum <br>"+p+"<br>"+d[0] + ": "+dateFromDay(d[0], d[1]))
.style("left", (d3.event.pageX+10) + "px")
.style("top", (d3.event.pageY +10) + "px");
})
.on("mouseout", function(d) {
div.transition()
.duration(500)
.style("opacity", 0);
});
var years = svg.selectAll("years")
.data(years)
.enter().append("text")
.text(function(d,i) {return d})
.style("text-anchor","middle")
.attr("class",function(d) {return "years y"+d})
.attr("transform",function(d,i) {return "translate("+(i*bw+bw/2)+"," + (height-2*padding) + ")";})
var legenddata = [[0,"vroeger"],[1,""],[2,""],[3,""],[4,"later"],[5,""]];
var legend = svg.append("g")
.attr("class","legend")
.attr("transform", function(d,i) {return "translate(865,460)"});;
var lblocks = legend.selectAll("legend")
.data(legenddata)
.enter().append("g")
.attr("transform", function(d,i) {return "translate(" + i*bw/2 + ",0)"});
lblocks.append("rect")
.attr("width",bw/2)
.attr("height",bh)
.style("fill",function(d) {
c = d3.scale.linear().domain([0,5]).range([0,1]);
return heatmapColour(c(d[0]));
});
lblocks.append("text")
.text(function(d) {
return d[1]
})
.attr("transform", "translate(0,20)");;
legend.append("text")
.text("Wanneer werd")
.attr("transform", "translate(0,-30)");
legend.append("text")
.text("het eerste")
.attr("transform", "translate(0,-20)");
legend.append("text")
.text("ei gelegd:")
.attr("transform", "translate(0,-10)");
});
function dateFromDay(year, day){
var date = new Date(year, 0);
var options = { month: 'long', day: 'numeric' };
return new Date(date.setDate(day)).toLocaleDateString('nl-NL', options);
}
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment