ggplot2 geom tile: как не иметь расстояния между строками при построении не непрерывных данных

Я пытаюсь сделать levelplot, используя ggplot2 для (метеорологической) переменной. Переменная измеряется непрерывно во времени (моя ось x), но в непрерывных высотах (ось y) на каждом временном шаге. Поэтому на произведенном графике отображаются данные на указанных высотах (координатах y), но ничего между ними. Вот пример:

library(ggplot2)
data <- runif(400, min=0, max=10)
index <- c(1:20)
heights <- c(1,2,3,4,5,7,9,12,15,19,23,28,33,39,45,52,59,67,75,83)
dat <-     as.data.frame(cbind(expand.grid(X=index,Y=heights),data))                        
ggplot(dat, aes(x=dat[,1], y=dat[,2],z=dat[,3])) +geom_tile(aes(fill=dat[,3]))

это создает следующий график: image here

есть простой способ, чтобы полностью заполнить участок, т. е. сделать линии в верхней часть сюжета шире? Спасибо!

3 ответов


OK еще одно решение.. вы можете интерполировать с помощью


вы можете использовать атрибуты высоты и ширины в geom_tile, либо geom_rect

library(tidyverse)
data <- runif(400, min=0, max=10)
index <- c(1:20)
heights <- c(1,2,3,4,5,7,9,12,15,19,23,28,33,39,45,52,59,67,75,83)

dat <- crossing(index = index, heights = heights) %>% 
  mutate(
    Z = data,
    index0 = index - 1) %>% 
  left_join(data_frame(heights, heights0 = c(0, heights[-length(heights)])))    

ggplot(dat, aes(xmin = index0, xmax = index, ymin = heights0, ymax = heights, fill = Z)) +
  geom_rect()

Это предполагает, что ваши высоты верхней части каждого уровня, и что они начинаются с нуля.

enter image description here


вы можете преобразовать ось y в factor для того, чтобы ликвидировать мертвое пространство. Это, однако, не сделает верхние линии более широкими.

ggplot(dat, aes(x=dat[,1], y=factor(dat[,2]),z=dat[,3])) +geom_tile(aes(fill=dat[,3]))

enter image description here