有指定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)

《有指定geom_raster插值范围的方法吗?》

# 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)

《有指定geom_raster插值范围的方法吗?》

# 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)

《有指定geom_raster插值范围的方法吗?》

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

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

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

如果您不想显示这些半块,可以在coord_cartesian而不是ylim中设置y轴限制(这会将限制应用于坐标系,而不是比例;请参阅?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)

《有指定geom_raster插值范围的方法吗?》

或者,如果你有其他geom层超出c(1 * 10 ^ -10,1 * 10 ^ -9)&不想缩放,你可以添加一个遮盖层来覆盖半块:

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")

《有指定geom_raster插值范围的方法吗?》

点赞