6
votes

My df looks like this:

 Product       Day      Month Total
Web Server, Applicatiion Server, Database Server, Middle Tier Tue 2015-01-01  10
Web Server, Application Server, Database Server, Middle Tier  Wed 2015-01-01    6
Web Server, Application Server, Database Server, Middle Tier  Wed 2015-02-01    6

I need to create a heat map in ggplot2 where I need to insert Product name as geom_text.

I have this so far:

ggplot(cal, aes(x=Month, y=Day, fill=Total)) +
   geom_tile() +
   scale_fill_gradient2(high="red",mid="green",low="yellow", 
       na.value="white", midpoint=mean(cal$Total, na.rm=T))+scale_x_date(labels = date_format("%b-%Y"), breaks = date_breaks("month"))+
       geom_text(aes(label=Product))

What happens is since there are multiple Product names separated by comma, when I do geom_text (aes(label=Product)), text is written on top of each other.

Is it possible put each Product name on different lines?

1
ggplot2 can't do automatic linebreaks for you. Have you tried adding \n after , in your Product names? - Roland
@Roland, I just tried your recommendation inserting \n after the comma in my data frame, still the same. Text are written on top of each other. - user1471980

1 Answers

24
votes

Just add "\n" to your "Product" labels wherever you need a line break:

library(ggplot2)
df <- data.frame(
  label=c("bla \n foo", "first line \n second line"),
  x = c(1, 2), y =c(1,2))
ggplot(df, aes(x=x, y=y, label=label)) + geom_text()

enter image description here