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]))
это создает следующий график:
есть простой способ, чтобы полностью заполнить участок, т. е. сделать линии в верхней часть сюжета шире? Спасибо!
3 ответов
вы можете использовать атрибуты высоты и ширины в 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()
Это предполагает, что ваши высоты верхней части каждого уровня, и что они начинаются с нуля.
вы можете преобразовать ось y в factor
для того, чтобы ликвидировать мертвое пространство. Это, однако, не сделает верхние линии более широкими.
ggplot(dat, aes(x=dat[,1], y=factor(dat[,2]),z=dat[,3])) +geom_tile(aes(fill=dat[,3]))