Nightingale Rose Chart Diagram of the Causes of Mortality in the Army in the East

The strengths of this visualization are how it shows the different volumes of cause of death in the Crimean war from 1854-1856, which was done by hand. Clearly you can tell that disease was a leading factor of soldier’s deaths. A weakness of the diagram in my opinion is that the months of each bar chart are angled, making it a bit difficult to read depending on the point of view. In my first example, the months are angled to reflect the actual diagram, and my second example I have the months starting at 3*pi/2 to make it more presentable.

library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5     v purrr   0.3.4
## v tibble  3.1.4     v dplyr   1.0.7
## v tidyr   1.1.3     v stringr 1.4.0
## v readr   2.0.1     v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(tidyr)
library(dplyr)
library(ggplot2)
library(ggthemes)
library(MASS)
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
library(AER)
## Loading required package: car
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following object is masked from 'package:purrr':
## 
##     some
## Loading required package: lmtest
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: sandwich
## Loading required package: survival
library(Hmisc)
## Loading required package: lattice
## Loading required package: Formula
## 
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:dplyr':
## 
##     src, summarize
## The following objects are masked from 'package:base':
## 
##     format.pval, units
library(zoo)
library(hexbin)
library(grid)
library(gridExtra)
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
load("Nightingale.RData")


d1 <- Nightingale %>%
  pivot_longer(cols = 8:10, names_to = "Cause", values_to = "Rate") %>% 
  mutate(Cause = gsub(".rate", "", Cause),
         period = ifelse(Date <= as.Date("1855-03-01"), "April 1854 to March 1855", "April 1855 to March 1856"),
         Month = fct_relevel(Month, "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "Jan", "Feb", "Mar", "Apr", "May", "Jun"))
d2 <- filter(d1, Cause == "Disease") %>%
  mutate(Angle = c(80, 45, 10, -15, -40, -70, -100, -125, -175, -185, -220, 100, 75, 45, 10, -20, -35, -75, -110, -120, -175, -190, -215, 110))

ggplot(d1) + 
  geom_bar(aes(Month, Rate, fill = Cause), width = 1, stat = "identity", position = "identity", alpha = 0.5) + 
  geom_text(d2, mapping = aes(x = Month, y = Rate + 175, label = Month), angle = d2$Angle) +
  coord_polar() + 
  facet_wrap(~period) +
  scale_fill_manual(values = c("skyblue3", "grey30", "firebrick")) +
  scale_y_sqrt() +
  theme_void() +
  theme(axis.text.x = element_blank(),
        strip.text = element_text(size = 11),
        legend.position = "bottom",
        plot.background = element_rect(fill = alpha("#F3E7E7", 0.5)),
        plot.margin = unit(c(10, 10, 10, 10), "pt"),
        plot.title = element_text(vjust = 5)) +
  ggtitle("Diagram of the Causes of Mortality in the Army in the East")

d3 <- filter(d1, Cause == "Disease")

ggplot(d1) + 
  geom_bar(aes(Month, Rate, fill = Cause), width = 1, stat = "identity", position = "identity", alpha = 0.5) + 
  geom_text(d3, mapping = aes(x = Month, y = Rate + 175, label = Month)) +
  coord_polar(start = 3*pi/2) + 
  facet_wrap(~period) +
  scale_fill_manual(values = c("skyblue3", "grey30", "firebrick")) +
  scale_y_sqrt() +
  theme_void() +
  theme(axis.text.x = element_blank(),
        strip.text = element_text(size = 11),
        legend.position = "bottom",
        plot.background = element_rect(fill = alpha("#F3E7E7", 0.5)),
        plot.margin = unit(c(10, 10, 10, 10), "pt"),
        plot.title = element_text(vjust = 5)) +
  ggtitle("Diagram of the Causes of Mortality in the Army in the East")