geom_raster()能否强制缩放?

3
我正在尝试使用geom_raster()比较三个图。问题在于,我希望在所有三个图中都保持与第一个图[-3,3]相同的比例。

以下是我的代码:

#raster plots
box <- .05
df <- expand.grid(x1 = seq(-1, 1, box), x2 = seq(-1, 1, box))
df$risk <- df$x1 + 2*df$x2

p1 <- ggplot(df, aes(x1, x2, fill = risk)) + geom_raster() +
  scale_fill_gradientn(colours=c("#FFFFFF","#046380","#000000")) +
  theme_minimal() +
  ggtitle("True Risk")

df <- expand.grid(x1 = seq(-1, 1, box), x2 = seq(-1, 1, box))
df$risk <- .99*df$x1 + 1.98*df$x2

p2 <- ggplot(df, aes(x1, x2, fill = risk)) + geom_raster() +
  scale_fill_gradientn(colours=c("#FFFFFF","#046380","#000000")) +
  theme_minimal() +
  ggtitle("Estimated Risk")

df <- expand.grid(x1 = seq(-1, 1, box), x2 = seq(-1, 1, box))
df$risk <- .01*df$x1 + .02*df$x2
p3 <- ggplot(df, aes(x1, x2, fill = risk)) + geom_raster() +
  scale_fill_gradientn(colours=c("#FFFFFF","#046380","#000000")) +
  theme_minimal() +
  ggtitle("Difference")

library(gridExtra)
grid.arrange(p1, p2, p3, ncol=1)

这是我的输出

enter image description here

由于比例尺变为[0.03,-0.03],很难看出差异很小。我该如何展示正确的表面,但在原始比例尺上呢?

1个回答

4
你可以将这三个变量都放在一个 data.frame 中,并使用 facet_gridfacet_wrap 来保持比例。
library(ggplot2)
library(reshape2)
box <- .05
df <- expand.grid(x1 = seq(-1, 1, box), x2 = seq(-1, 1, box))
# Calculate each field
df$TrueRisk <- df$x1 + 2*df$x2
df$EstimatedRisk <- .99*df$x1 + 1.98*df$x2
df$Difference <- .01*df$x1 + .02*df$x2

# Transform the data into long format for ggplot2
df <- melt(df, c("x1", "x2"))

# Use facet_grid/facet_wrap to create the plot
ggplot(df, aes(x1, x2, fill = value)) + geom_raster() +
  facet_grid(variable ~ .) + 
  scale_fill_gradientn(colours=c("#FFFFFF","#046380","#000000")) +
  theme_minimal() +
  ggtitle("Risk")

enter image description here


2
不错!您可以利用 expand.grid 来创建额外的行:`grps <- c('True Risk', 'Estimated Risk', 'Difference');df <- expand.grid(x1 = seq(-1, 1, box), x2 = seq(-1, 1, box), group = factor(grps, levels = grps));groups <- data.frame(group = grps, v1 = c(1, .99, .01), v2 = c(2, 1.98, .02));df <- merge(df, groups); df$risk <- df$v1 * df$x1 + df$v2 * df$x2; ggplot(df, aes(x1, x2, fill = risk)) + geom_raster() + facet_wrap(~group, ncol = 1)` - alistaire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接