有没有指定geom_raster插值范围的方法?
Is there a method to specify geom_raster interpolation range?
我正在使用 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)
# 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)
# 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)
我希望最终的情节能够限制给定的实际数据(由 y = 1*10^-9 和 y = 1*10^-10 处的两条水平线指定。
我认为我观察到的是内插像素大小,但我不确定。
我认为这与插值无关,并且与 geom_raster
(geom_tile
的特例)默认使用 x
/ y
作为每个图块的 center。指定 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)
或者,如果您有其他几何图层超出 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")
我正在使用 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)
# 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)
# 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)
我希望最终的情节能够限制给定的实际数据(由 y = 1*10^-9 和 y = 1*10^-10 处的两条水平线指定。
我认为我观察到的是内插像素大小,但我不确定。
我认为这与插值无关,并且与 geom_raster
(geom_tile
的特例)默认使用 x
/ y
作为每个图块的 center。指定 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)
或者,如果您有其他几何图层超出 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")