Tuesday, November 24, 2020

Treemap in R

Treemap is a hierarchical chart in which higher values are represented by bigger rectangles. Such a chart can be created in R by using treemap package. 

For instance, we have the COVID-19 cases in Nepal by province and gender . The data looks like :

SN province  gender  cases 
1 Province_I Male  15614
2 Province_II Male  16066
3 Province_III Male  70088
4 Province_IV_ Male  8705
5 Province_V Male  16597
6 Province_VI Male  4480
7 Province_VII Male  8314
8 Province_I Female  8741
9 Province_II Female  3326
10 Province_III Female  44503
11 Province_IV_ Female  3732
12 Province_V Female  6997
13 Province_VI Female  1470
14 Province_VII Female  2842

We can make a simple treemap by creating this data in R and saving it as 'datafile' object and following  the  commands below . 

library(treemap)

treemap(datafile,
        index="province",
        vSize="cases",
       title="Distribution of CoviD-19 Cases in Nepal",
        type="index"
)

It will produce a chart like below :

 

 

To plot the treemap with labels, we can do a simple trick : find totals by province and the plot the treemap. 

 library(dplyr)
new<-datafile%>%
  group_by(province)%>%
  summarise(p_total=sum(cases))%>%
  mutate(newlab=paste(province, p_total, sep ="\n"))%>%
  treemap(index="newlab", vSize="p_total",
          title="Disribution of COVID-19 Cases in Nepal",
          palette = "Reds",      

            fontsize.title=12                                 
           )
It will produce the map as shown below : 

Finally, we can group the chart with gender and show the map with province and gender. This can be done by : 

treemap(datafile, index=c("province","gender"),    
        vSize="cases", type="index",
        fontsize.labels=c(15,12),                #
        fontcolor.labels=c("white","blue"),    #
        fontface.labels=c(2,1),                  #
        title="Disribution of COVID-19 Cases in Nepal",
        bg.labels=c("transparent"),              #
        align.labels=list(
          c("center", "center")),
          c("right", "bottom"),
                                       # place of labels in the rectangle
        overlap.labels=0.5,                      
        inflate.labels=F  )                    # If true, labels are bigger when rectangle is bigger.
     
It will produce the following map in R .

The R script file is available here.

 



No comments: