Reputation: 2613
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) )
The idea is to create a simple heatmap which looks like this:
The tick marks in this graph are placed at the end of the bars instead of their centers
Upvotes: 3
Views: 2863
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
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)
Upvotes: 4