geom_tile 找到合适的瓷砖高度

geom_tile finding the proper height of tiles

我正在用

绘制热图
ggplot(param, aes(V2,  V1,z=V7))+ geom_tile(aes(fill = V7, height=0.02))

但是我的V1不是等间距的。我怎样才能找到合适的高度?因为 height=0.02 对于一些小值可能太大了,所以它们被其他覆盖了。

你能举个例子吗?例如。 V1 值如下:

1, 0.8,0.7,0.45,0.3, 0.12,0.07,0.0004

所以我需要找出每对值的差异。但是最小高度与最大高度不同。我读到瓷砖的高度 h 从 -h/2 到 h/2。但是最小高度当然是不同的,以避免差距!

答案(很大程度上)取决于您要表达的内容。如果有一些固有的高度(例如,该值应适用的范围),您应该使用它。也就是说,如果每个度量是一个小区域上的点度量,那就是应该使用的区域。

但是,如果您只想让条形相互接触,那可以做到,但必须在调用 ggplot 之外完成。 (另请注意:您的图表的解释可能有点偏差,因为较大的差距意味着某些措施比其他措施覆盖更广泛的区域,并且这些条不会以真实位置为中心。)

使用 dplyr 您可以简单地计算两个测量值之间的中点并将其用作点之间的边界。然后,使用 geom_rect 而不是 geom_tile 直接传入这些边界。请注意,由于您没有 post 任何数据:

,因此这假设了一些关于您的值范围的事情
sampleData <-
  data.frame(
    x = c(1,2,3)
    , y = c(0.01, 0.1, 1)
    , z = c(1,2,3)
  )


sampleData %>%
  mutate(ymin = (y + lag(y, default = 0))/2
         , ymax = (y + lead(y, default = 1.5))/2
         , xmin = x - 0.5
         , xmax = x + 0.5
         ) %>%
  ggplot(aes(xmin = xmin
             , xmax = xmax
             , ymin = ymin
             , ymax = ymax
             , fill = z)) +
  geom_rect()

这是一个使用多个 x 位置的示例。请注意,在这里,我没有平均得到 yminymax,而是明确地将它们设置为我想要的边缘:

sampleData <-
  data.frame(
    x = rep(c(1,2,3), each = 3)
    , y = c(0.01, 0.1, 1
            , 0.04, 0.3, 0.9
            , 0.2, 0.5, 0.8)
    , z = c(1,2,3)
  )


sampleData %>%
  group_by(x) %>%
  arrange(y) %>%
  mutate(ymin = (y + lag(y))/2
         , ymax = (y + lead(y))/2
         , xmin = x - 0.5
         , xmax = x + 0.5
         , ymin = ifelse(is.na(ymin), 0, ymin)
         , ymax = ifelse(is.na(ymax), 1.25, ymax)
  ) %>%
  ggplot(aes(xmin = xmin
             , xmax = xmax
             , ymin = ymin
             , ymax = ymax
             , fill = z)) +
  geom_rect()

谢谢!有效!但是在你最后一个例子中我不需要 default=0 和 lead 因为我得到了 NAs 吗?

它是否类似于 y 值的不相等的 sopaced x 值?

根据我的数据结构:

数据是按列排列的,每个 y 都有 x 值:

y x z 1 0.1# 1 0.2# 1 0.3# 1 0.4# 3 0.1 3 0.2 3 0.3 3 0.4

等等,例如