【问题标题】:ggplot2 geom_tile: how to have no spacing between lines when plotting non-continuous dataggplot2 geom_tile:绘制非连续数据时如何在行之间没有间距
【发布时间】:2018-02-06 09:54:03
【问题描述】:

我正在尝试使用 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]))

这会产生以下情节:

有没有一种简单的方法可以完全填充情节,即使情节上部的线条更宽? 谢谢!

【问题讨论】:

  • geom_tile 采用您可以使用的height 美学。我建议不要使用dat[,1] 来引用使用ggplot 的数据,而是使用变量名。
  • 我建议查看great answer,了解在绘制类似内容时推断缺失值
  • @Axeman,您能否详细说明一下高度参数?我认为这将是某种矢量,为图中的每一行指定高度?
  • @PoGibas,谢谢你的链接。由于懒惰的原因,我试图避免插入我的数据,但这可能是我必须走的路。

标签: r plot ggplot2


【解决方案1】:

确定另一种解决方案.. 您可以使用 approx 函数进行插值。虽然也许 2D 克里金法更适合您的应用程序???

library(purrr)
dat2<- dat %>%
  split(.$X) %>%
  map_dfr(~ approx(.$Y, .$data, xout =1:83), .id = "X") 

ggplot(dat2, aes(x=as.integer(dat2$X), y=dat2$x, z=dat2$y)) +geom_tile(aes(fill=dat2$y))

这会给你:

【讨论】:

  • 刚刚在我的数据上进行了测试,它可以工作并且看起来不错。谢谢!
【解决方案2】:

你可以使用geom_tile中的height和width属性,或者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()

这假设您的身高是每个级别的最高点,并且它们从零开始。

【讨论】:

  • 我喜欢这个,可惜我的真实数据中的高度信息标记了网格点的中心。
【解决方案3】:

您可以将 y 轴转换为 factor 以消除死区。然而,这不会使上限更宽。

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

【讨论】:

  • 谢谢,但我真的很想保留我在身高时所拥有的空间信息。
  • 那么,我认为你需要用上下信息填充空行。我正在努力。 brb 编辑
猜你喜欢
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
相关资源
最近更新 更多