是否可以在geom_raster()上强制缩放?

时间:2017-03-31 04:23:45

标签: r ggplot2

我正在尝试使用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 个答案:

答案 0 :(得分: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