addtable2plot()
- suppose you have a vector with different dates of events and you want to investigates if there are month with more or less events, the first step maybe is to draw a barplot
- so let us generate first a vector with the different dates:
- and than we create a vector with the extracted month (as factor)
my.dat <- as.Date(sample.int(500, 1000, replace=T), origin="2000-01-01") # extract month, use the abbreviated form of months my.months <- months(my.dat, abbreviate=T) df <- data.frame(date=my.dat, month=my.months) table(df$month)
Apr Aug Dez Feb Jan Jul Jun Mai Mär Nov Okt Sep 122 72 66 103 121 61 51 85 129 59 64 67
- as one can see the month are in alphabetical order so we have to correct this
- therefore we use ISOdatetime and format for creating a vector of the 12 months in the correct order and use this vector for creating a labeled factor out of df$month
df$month <- factor(df$month, levels=format(ISOdatetime(2000,1:12,1,0,0,0),"%b")) # show the first 50 elements of my. table(df$month)
Jan Feb Mär Apr Mai Jun Jul Aug Sep Okt Nov Dez 121 103 129 122 85 51 61 72 67 64 59 66
- now we can create hour barplot (use the package plotrix)
# if it is not installed yet, install it via install.packages("plotrix") # load the package library(plotrix) # create the table for plotting (the same as above) my.table <- with(df, table(month)) # equivalent to table(df$month) # plot it! (choosing the color from here) barp(my.table, col=colors()[c(462:471,473,477)], xlab="Month", ylab="count")
- now we create the same plot but add the table
# create the table for the plot - i want the horizontal table so i have to transpose it m2 <- t(as.matrix(my.table)) # barplot barp(my.table, col=colors()[c(462:471,473,477)], xlab="month", ylab="count") # add the table: the first two arguments are the position relative to the coord system of the plot # the third argument is the table (a data frame or a matrix), the bty: "o" draw a box, "n" no box # bg is the argument for the background addtable2plot(3,140,m2, bty="o", bg="aliceblue")
now add the table with ggplot2
require(gridExtra) require(ggplot2) # generate random dates my.dat <- as.Date(sample.int(500, 1000, replace=T), origin="2000-01-01") # extract month my.months <- factor(month(my.dat),levels=1:12,labels=month.abb) df <- data.frame(date=my.dat, month=my.months) # prepare table mytable <- tableGrob(t(as.data.frame(table(df$month))),show.rownames = F,show.colnames = F) ggplot(df,aes(x=month,fill=month)) + geom_bar() + ylim(0,150) + annotation_custom(mytable,xmin = 4.5,xmax=15,ymin=130,ymax = 150) + scale_fill_manual(values=colors()[c(462:471,473,477)],guide="none") ggsave("tabletoplot.png")
No comments :
Post a Comment