Quero produzir um mapa de calor de valores por dias (0 a 41 = 6 semanas) por horas do dia (0 a 23).
O primeiro exemplo abaixo funciona bem, mas o segundo produz um erro
Warning message: Removed 2 rows containing missing values (`geom_tile()`).
A mensagem de erro é estranha porque não há valores ausentes explícitos nos meus dados. Além disso, o gráfico mostra uma fusão de dias consecutivos!
Preciso definir os intervalos para que os eixos se alinhem com sete dias e três horas no dia. Defini os limites para que eu sempre tenha seis semanas e 24 horas completas. Já tive esse mesmo erro antes e pensei que o resolveria expandindo os limites de 0:23 e 0:41 para -1:24 e -1:42, o que ajudou em alguns casos (não entendo por que precisei fazer isso). Obrigado.
library(ggplot2)
hours<-c(8,9,1,12,8,9,8,9,8)
days<-c(0,0,1,1,14,14,40,40,41)
value<-c(47,11,46,11,48,12,57,3,47)
df<-data.frame(cbind(hours,days,value))
ggplot(df,aes(days,hours))+
geom_tile(fill=value)+
geom_text(aes(label=value),size=3)+
scale_fill_gradient(low="white",high="red")+
xlab("Day")+
ylab("Hour")+
scale_x_continuous(breaks=seq(0,41,by=7),limits=c(-1,42))+
scale_y_continuous(breaks=seq(0,23,by=3),limits=c(-1,24))
hours<-c(16,17,0,1,2,21,22,9,19,20)
days<-c(0,0,3,3,3,6,6,11,21,21)
value<-c(3,60,18,60,23,51,48,49,47,40)
df<-data.frame(cbind(hours,days,value))
ggplot(df,aes(days,hours))+
geom_tile(fill=value)+
geom_text(aes(label=value),size=3)+
scale_fill_gradient(low="white",high="red")+
xlab("Day")+
ylab("Hour")+
scale_x_continuous(breaks=seq(0,41,by=7),limits=c(-1,42))+
scale_y_continuous(breaks=seq(0,23,by=3),limits=c(-1,24))
EDITAR
Agradeço ao PBulls pela sugestão de ampliar ainda mais os limites. No entanto, ainda vejo uma caixa de calor mais ampla do que o esperado:
minha produção é diferente da deles.
Isto não é um erro, é um aviso. O problema é que o bloco é um pouco mais largo do que apenas o ponto onde é plotado; se você definir o limite inferior como -1, verá aqueles em x=0 serem descartados/truncados. É isso que o aviso indica. Defina o limite do eixo x um pouco mais baixo (-1,5 funciona) para fornecer espaço suficiente para esses blocos.
Aqui está o antes/depois com limites do eixo x um pouco mais amplos (seta vermelha adicionada na postagem):
O problema é que os blocos têm largura e altura, e você precisa levar isso em conta ao definir os limites (e o que você já tentou ao definir os limites). No entanto, enquanto em uma escala discreta a largura e a altura dos blocos são definidas como 1 por padrão (e é suficiente adicionar -/+ .5), isso não acontece em uma escala contínua. Não consultei a fonte, mas meu palpite é que a largura e a altura são definidas de acordo com o mínimo das distâncias (positivas) entre os pontos de dados. Portanto, dependendo dos seus dados, você acaba com valores diferentes para a largura e a altura do bloco e, consequentemente, precisa expandir os limites em quantidades diferentes.
Em vez disso, eu sugeriria definir explicitamente a largura e a altura como 1. Fazer isso é suficiente para expandir os limites em -/+ 0,5 e também deve corrigir o problema com os blocos "mesclados" ou sobrepostos por dias/horas consecutivos.