有没有指定geom_raster插值范围的方法?

时间:2019-01-08 04:37:20

标签: 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处的两条水平线指定。

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

1 个答案:

答案 0 :(得分:1)

我认为这与插值无关,也与geom_rastergeom_tile的特例)默认使用x / {{1} }作为每个图块的 center 。指定y会向下移动磁贴,但思路仍然相同。您看到的超出vjust = 1限制的范围是第一行磁贴的上半部分和最后一行磁贴的下半部分。

如果您不想显示这些半砖,则可以在geom_hline中而不是coord_cartesian中设置y轴限制(这会将限制应用于坐标系,而不是缩放;请参见ylim了解更多信息)以放大到特定数据范围:

?coord_cartesian

coord lim approach

或者,如果您还有其他超出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) 且不希望缩放的几何图层,则可以添加遮罩层以覆盖半砖:

c(1*10^-10, 1*10^-9)

masking approach