Max C
Max C

Reputation: 2613

How to force the x-axis tick marks to appear at the end of bar in heatmap graph?

I created a simple heatmap graph with ggplot2 but I need to force the x-axis tick marks to appear at the end of my x variable, rather than at its center. For example, I would expect 1 to appear at the position of where 1.5 is now. I beleive a heatmap done in Base R would do that.

library(car) #initialize libraries
library(ggplot2)  #initialize libraries
library(reshape)

df=read.table(text= "x  y  fill
1 1 B
2 1 A
3 1 B
1 2 A
2 2 C
3 2 A
",  header=TRUE, sep=""  )

#plot data
qplot(x=x, y=y, 
      fill=fill, 
      data=df, 
      geom="tile")+  
      scale_x_continuous(breaks=seq(1:3) ) 

enter image description here

The idea is to create a simple heatmap which looks like this: enter image description here

The tick marks in this graph are placed at the end of the bars instead of their centers

Upvotes: 3

Views: 2863

Answers (2)

mnel
mnel

Reputation: 115392

geom_tile centres each tile at the coordinates given. Therefore you would expect the output which it does give.

Therefore If you give ggplot the centres (not the top-right corner coordinates) for each cell it will work.

ggplot(df, aes(x = x-0.5, y = y-0.5, fill = fill)) + 
  geom_tile() + 
  scale_x_continuous(expand = c(0,0), breaks = 0:3) + 
  scale_y_continuous(expand = c(0,0), breaks = 0:3) + 
  ylab('y') + 
  xlab('x')

or using qplot

qplot(data = df, x= x-0.5, y = y-0.5, fill = fill, geom = 'tile')  + 
   scale_x_continuous(expand = c(0,0), breaks = 0:3) + 
   scale_y_continuous(expand = c(0,0), breaks = 0:3) + 
   ylab('y') + 
   xlab('x')

Upvotes: 3

Alex
Alex

Reputation: 4180

What about this?

object = qplot(x=x, y=y, 
      fill=fill, 
      data=df, 
      geom="tile")+  
      scale_x_continuous(breaks=seq(1:3))

object + scale_x_continuous(breaks=seq(.5,3.5,1), labels=0:3)

enter image description here

Upvotes: 4

Related Questions