Click the Original, Code and Reconstruction tabs to read about the issues and how they were fixed.
Objective
This Visualisation is based on the 2015 tax filings of 51 states of USA.It visualises the details of elite- one percenter of American earners. It represents the average annual income of the top 1 % earners among Americans in each states and the annual income required to be in the top 1% earners. The green colour in visual represents the income required to become one among the top 1% earner and purple color represents the average annual income of the top 1% earner category. This visualisation mainly targets the finance analysts and policy makers who wish to study about the wealth distribution.
The visualisation chosen had the following three main issues:
Confusing Labels : Labelling inside the chart is hard to understand as many of them are extremely small and vertical. Due to the congestion of the inner bars, the labels for the green bars are lying on the purple bars.This lead to misinterpretation of the values.
Visual Difficulty : The inner bars are so close and it’s hard to understand the core of the visualisation. Along with that the combination of selected colors will confuse the people with color blindnes (deuteranomaly and protanomaly) as they find difficulty in distinguish between green and purple hues.
Comparison Complexity : The stacked circular nature of the visualisation is complex to understand. As the co-ordinate system selected is curved in nature it’s hard to compare the values and comprehend conclusions.
Reference
The following code was used to fix the issues identified in the original.
library(ggplot2)
library(magrittr)
library(dplyr)
library(tidyr)
library(scales)
#library(cowplot)
usdata <- data.frame(read.csv("US.csv"))
colnames(usdata) <- c("state","Minimum_Income","Average_Income","oth_ai","time")
data <- usdata[,c("state","Minimum_Income","Average_Income")]
data$Minimum_Income <- data$Minimum_Income/1000
data$Average_Income <- data$Average_Income/1000
top1 <- data %>%select("state","Minimum_Income","Average_Income") %>% filter(data$Minimum_Income<300)
top2 <- data %>%select("state","Minimum_Income","Average_Income") %>% filter(data$Minimum_Income>=300 & data$Minimum_Income<400)
top3 <- data %>%select("state","Minimum_Income","Average_Income") %>% filter(data$Minimum_Income>=400 & data$Minimum_Income<500)
top4 <- data %>%select("state","Minimum_Income","Average_Income") %>% filter(data$Minimum_Income>=500)
gat <- gather(data,Income,value,2:3)
gat1 <- gather(top1,Income,value,2:3)
gat2 <- gather(top2,Income,value,2:3)
gat3 <- gather(top3,Income,value,2:3)
gat4 <- gather(top4,Income,value,2:3)
fig1 <- ggplot(data=gat1,mapping=aes(x=reorder(state,value), value, fill = Income))
fig1 <- fig1+ geom_bar(stat="identity", colour="turquoise3",position = "dodge")+
theme(axis.text.x = element_text(angle = 0,hjust = 1))+coord_flip()+labs(title = "States with Minimum income required less than $300K",y="Income in thousand dollars",x="States" )+guides(fill=guide_legend(title = NULL))+scale_fill_manual(labels=c("Minimum Income required to be in top 1%","Average Income of top 1%"),values = c ("#67d294","#009a9c"))
fig2 <- ggplot(data=gat2,mapping=aes(x=reorder(state,value), value, fill = Income))
fig2 <- fig2+ geom_bar(stat="identity", colour="turquoise3",position = "dodge")+
theme(axis.text.x = element_text(angle = 0,hjust = 1))+coord_flip()+labs(title = "States with Minimum income required between $300K and $400K",y="Income in thousand dollars",x="States" )+guides(fill=guide_legend(title = NULL))+scale_fill_manual(labels=c("Minimum Income required to be in top 1%","Average Income of top 1%"),values = c ("#67d294","#009a9c"))
fig3 <- ggplot(data=gat3,mapping=aes(x=reorder(state,value), value, fill = Income))
fig3 <- fig3+ geom_bar(stat="identity", colour="turquoise3",position = "dodge")+
theme(axis.text.x = element_text(angle = 0,hjust = 1))+coord_flip()+labs(title = "States with Minimum income required between $400K and $500K",y="Income in thousand dollars",x="States" )+guides(fill=guide_legend(title = NULL))+scale_fill_manual(labels=c("Minimum Income required to be in top 1%","Average Income of top 1%"),values = c ("#67d294","#009a9c"))
fig4 <- ggplot(data=gat4,mapping=aes(x=reorder(state,value), value, fill = Income))
fig4 <- fig4+ geom_bar(stat="identity", colour="turquoise3",position = "dodge")+
theme(axis.text.x = element_text(angle = 0,hjust = 1))+coord_flip()+labs(title = "States with Minimum income required greater than $500K",y="Income in thousand dollars",x="States" )+guides(fill=guide_legend(title = NULL))+scale_fill_manual(labels=c("Minimum Income required to be in top 1%","Average Income of top 1%"),values = c ("#67d294","#009a9c"))
#fig <- ggplot(data=gat,mapping=aes(x=reorder(state,value), value, fill = Income))
#fig <- gat+ geom_bar(stat="identity", colour="turquoise3",position = "dodge")
#fig
Data Reference
The following plot fixes the main issues in the original.