Click the Original, Code and Reconstruction tabs to read about the issues and how they were fixed.
Objective
The objective of this visualisation is to educate audience that climate change is happenning and we are running out of time to take action.
The target audience for this visualisation is European general public.
The visualisation chosen had the following three main issues:
Unnecessary use of polar coordinates. The data is not periodic, It’s a time progression and a more conventional way to visualise this data is through cartesian coordinates. Usage of polar coordinates makes the increase of the number of hot days less apparent.
The data is animated, it’s fast and the years appear for a short time thus the viewer cannot really take a moment to see and compare number of hot days at different years. Additionally it’s hard to see the number of hot days between 10 and 20 due to both speed of animation and polar coordinates.
Lack of text: titles, data source reference, axis titles. Without previously reading the article it’s hard to figure out what’s happenning in the visualisation. Moreover, even the article is not accurate about it stating that it visualises Dutch summers, however it visualises specifically the data from the station in De Bilt.
I would also like to note that the data visualisation looks like sun, the clock sound does make it seem urgent, however for people who watch it without the sound the image is very optimistic and doesn’t convey the seriousness of climate change.
Reference
The following code was used to fix the issues identified in the original.
library(dplyr)
library(readr)
library(tidyr)
library(knitr)
library(readxl)
library(ggplot2)
library(colourpicker)
library(zoo)
library(extrafont)
data <- read_csv("KNMI_data.csv")
#choose only date and max temperature
data <- data[c(2,15)]
#separate date into year, month, day
data <- data%>%separate(YYYYMMDD,into = c("year", "MMDD"),sep = 4,remove = TRUE)
data <- data%>%separate(MMDD,into = c("month", "day"),sep = 2,remove = TRUE)
#changing temperature to degrees celsius
data <- data%>%mutate(TX = data$TX/10)
#Creating columns to count hot, tropical and extreme days
data <- data%>%mutate(hot = TX>=25)
data <- data%>%mutate(tropical = TX>=30)
data <- data%>%mutate(extrem = TX>=35)
#Changing TRUE to 1 and FALSE to 0
data[,c(5,6,7)] <- lapply(data[,c(5,6,7)], as.numeric)
#Grouping data by year and counting number of hot days
hotd <- tapply(data$hot, data$year, FUN=sum)
tropd <- tapply(data$tropical, data$year, FUN=sum)
extremd <- tapply(data$extrem, data$year, FUN=sum)
#Creating new data frame
Year <- c(1901:2020)
newdata <- data.frame(Year,hotd, tropd, extremd )
#Calculate moving average:
newdata1 <- data.frame(Year,hotd)
newdata1 <- newdata1 %>%
dplyr::mutate(rol_average = zoo::rollmean(hotd, k = 10, fill = NA, align = "right"))
#Dropping columns before 1920 year
newdata <- newdata[-c(1:19),]
newdata1 <- newdata1[-c(1:19),]
#Correcting the amount of hot and tropical days to exclude extreme days
newdata <- newdata%>%mutate(hotd = hotd-tropd-extremd)
newdata <- newdata%>%mutate(tropd = tropd-extremd)
newdata <- newdata%>%gather(key = "Temperature", value = "Number of days", c(2:4))
newdata$Temperature <- factor(newdata$Temperature, levels = c("extremd", "tropd","hotd" ), labels = c(">35 C","30-35 C","25-30 C" ), ordered = TRUE)
#Creating layered plot
reconstruction <- ggplot() + coord_cartesian() +
labs(title="Century of summer days in De Bilt",subtitle="The 10-year average number of summer days (+25 C) has more than doubled since 1920", caption= "Source: KNMI. Retrieved September 21, 2020, from https://www.knmi.nl/nederland-nu/klimatologie/daggegevens") +
scale_x_continuous(breaks = round(seq(1900, 2020, by = 20),1)) + scale_y_continuous(breaks = round(seq(0, 50, by = 10),1)) +
theme(plot.title=element_text(size=20, face="bold",family="American Typewriter",color="#403d39",lineheight=1),
plot.subtitle =element_text(size=15, color="#58534c"),
plot.caption =element_text(size=9, color="#74706b"),
aspect.ratio=9/16, plot.background = element_rect(fill = "white"),
panel.background = element_rect(fill = "#EDE9E9"),
axis.text = element_text(size = 11),
axis.title.x = element_text(size = 13),
axis.title.y = element_text(size = 13),
legend.text=element_text(size=13),
legend.title=element_text(size=13)) +
layer(data = newdata, mapping = aes(fill = Temperature, x = Year, y =`Number of days`), stat = "identity",
geom = "bar",
position = "stack") + scale_fill_manual(values = c("#9d0208","#f48c06", "#EEBA0B")) +
layer(data = newdata1, mapping = aes(x = Year, y = rol_average), stat = "identity",
geom = "line",
position = position_identity()) +annotate("text", label = "10-year average", x = 1925, y = 16, size = 5, colour = "#403d39")
Data Reference
The following plot fixes the main issues in the original.