Как заставить отметки оси X появляться в конце столбца на графике тепловой карты?

Я создал простой график тепловой карты сggplot2 но мне нужно сделать так, чтобы отметки оси X появлялись в конце моей переменной x, а не в ее центре. Например, я ожидал бы, что 1 появится в позиции, где сейчас 1.5. Я полагаю, что тепловая карта, сделанная в Base R, сделает это.

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

Идея состоит в том, чтобы создать простую тепловую карту, которая выглядит следующим образом: enter image description here

Отметки на этом графике располагаются в конце столбцов вместо их центров

Ответы на вопрос(2)

geom_tile центрирует каждую плитку по заданным координатам. Поэтому вы ожидаете выход, который он дает.

Поэтому, если вы дадите ggplot центры (не координаты верхнего правого угла) для каждой ячейки, это сработает.

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')

или используя 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')
Решение Вопроса

Как насчет этого?

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

 23 мая 2012 г., 01:21
Что вы имеете в виду, не регулируя шкалу х? например, вместо того, чтобы начинать с 0, вы хотите начать с правильного значения, которое составляет 0,5?
 Max C23 мая 2012 г., 01:12
Спасибо!!! Я надеялся, что есть возможность сделать это без настройки шкалы x, но возможно, что я не совсем понимаю, как работает тепловая карта. я ценю вашу помощь
 23 мая 2012 г., 00:40
@SandyMuspratt Хороший улов. Спасибо!
 23 мая 2012 г., 01:26
@MaxC Попробуйте, если хотите, чтобы первый тик начинался с 0,5: object + scale_x_continuous (breaks = seq (.5,3.5,1), label = seq (.5,3.5,1))

Ваш ответ на вопрос