r - 有没有一种方法可以指定 geom_raster 插值范围?

标签 r ggplot2 geom-raster

我正在使用 R 来求解 R 中具有两个变量的方程。我通过一个序列来改变这两个变量,然后使用带有插值的 geom_raster 来生成解图。

但是,当我绘制数据时,我注意到绘图区域超出了我作为输入提供的 y 轴值的范围。

如果我使用 ylim 对区域施加限制,则插值图会缩小并且不再限制值。如果我使用 vjust = 0,则图的顶部会限制该区域,但底部不会。

我的可重现示例代码如下:

library(ggplot2)
library(reshape2)


x_range <- seq(0.001,10, by=0.001)
y_range <- (seq(1*10^-10, 1*10^-9, by = 1*10^-10))

FUN <- function(x, y) log10((1)/(x*y))

data <- outer(x_range, y_range, FUN)

colnames(data) <- y_range
rownames(data) <- x_range

melted_data <- melt(data)

p <- ggplot(data=melted_data)

# basic plot
p + geom_raster(aes(x=Var1, y=Var2, fill=value), interpolate = TRUE) +
  geom_hline(yintercept = 1*10^-10) +
  geom_hline(yintercept = 1*10^-9)

enter image description here
# with imposed ylim
p + geom_raster(aes(x=Var1, y=Var2, fill=value), interpolate = TRUE) +
  geom_hline(yintercept = 1*10^-10) +
  geom_hline(yintercept = 1*10^-9) + 
  ylim(1*10^-9, 1*10^-10)

enter image description here
# with modified vjust
p + geom_raster(aes(x=Var1, y=Var2, fill=value), interpolate = TRUE, vjust = 0) +
  geom_hline(yintercept = 1*10^-10) +
  geom_hline(yintercept = 1*10^-9)

enter image description here

我希望最终的绘图能够限制给定的实际数据(由 y = 1*10^-9 和 y = 1*10^-10 处的两条水平线指定。

我认为我观察到的是由于内插像素大小,但我不确定。

最佳答案

我认为这与插值无关,与geom_raster 的事实有关。 ( geom_tile 的特例)默认使用 x/y作为每个瓷砖的中心。指定 vjust = 1将瓷砖向下移动,但想法仍然相同。您所看到的超出了 geom_hline 施加的限制是第一排瓷砖的上半部分和最后一排瓷砖的下半部分。

如果您不想显示这些半平铺,您可以在 coord_cartesian 中设置您的 y 轴限制。而不是 ylim (这将限制应用于坐标系,而不是比例;有关更多详细信息,请参阅 ?coord_cartesian)以放大特定数据范围:

p + geom_raster(aes(x=Var1, y=Var2, fill=value), interpolate = TRUE) +

  # limit coordinate system, without expansion
  coord_cartesian(ylim = c(1*10^-10, 1*10^-9), expand = FALSE)

coord lim approach

或者,如果您有其他超出 c(1*10^-10, 1*10^-9) 的几何层& 不想缩放,可以添加 mask 层来覆盖半块:
p + geom_raster(aes(x=Var1, y=Var2, fill=value), interpolate = TRUE) +

  # add masking layers
  annotate(geom = "rect", xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = 1*10^-10, fill = "white") +
  annotate(geom = "rect", xmin = -Inf, xmax = Inf, ymin = 1*10^-9, ymax = Inf, fill = "white")

masking approach

关于r - 有没有一种方法可以指定 geom_raster 插值范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54085284/

相关文章:

r - ggplot2:如何标记事件发生的日期

r - 如何删除 geom_raster 中连续 x 值之间的空间/间隙

r - ggplot2:如何区分点击和画笔?

r - knitr : How to improve typography 中的科学记数法

r - 是否可以将图例放置在R中ggplot的右上方?

r - 使用ggplot2绘制时间序列数据

r - r 中带有 geom_raster 的热图

r - 结合 coord_proj 和 geom_raster

r - 在 R 中自定义时间序列数据图 X 轴的日期格式?

r - 如何使用带有 for 循环的粘贴?