R 如何在多个ggplot2等高线图上设置对数比例?
我试图创建三个等高线图,每个等高线图都说明了应用于两个输入向量和一个固定alpha的以下函数:R 如何在多个ggplot2等高线图上设置对数比例?,r,ggplot2,colorbar,R,Ggplot2,Colorbar,我试图创建三个等高线图,每个等高线图都说明了应用于两个输入向量和一个固定alpha的以下函数: alphas <- c(1, 5, 25) x_vals <- seq(0, 25, length.out = 100) y_vals <- seq(0, 50, length.out = 100) my_function <- function(x, y, alpha) { z <- (1 / (x + alpha)) * (1 / (y + alpha)) }
alphas <- c(1, 5, 25)
x_vals <- seq(0, 25, length.out = 100)
y_vals <- seq(0, 50, length.out = 100)
my_function <- function(x, y, alpha) {
z <- (1 / (x + alpha)) * (1 / (y + alpha))
}
alphas您可以将所有alphas的所有数据组合起来构建一个数据框,并用一列指示alpha,这样您就可以对图形进行分面:
我基本上删除了绘图[[I]]
部分,并将在前一个循环中创建的d
堆叠起来:
d = numeric()
for(i in seq_along(alphas)) {
z_table <- sapply(x_vals, my_function, y = y_vals, alpha = alphas[i])
x <- rep(x_vals, each = 100)
y <- rep(y_vals, 100)
z <- unlist(flatten(list(z_table)))
z_rel <- z / min(z)
d <- rbind(d, cbind(x, y, z_rel))}
d = as.data.frame(d)
然后在等高线内建立对数刻度:
ggplot(data = d, aes(x = x, y = y, z = z_rel)) +
geom_contour_filled(breaks=round(exp(seq(log(1), log(1400), length = 14)),1)) +
facet_wrap(~alpha)
输出:
太棒了!稍加编辑以使中断更清晰:breaks=2^(seq(log2(1),log2(2048),length=12))
d$alpha = factor(paste("alpha =", alphas[rep(1:3, each=nrow(d)/length(alphas))]),
levels = paste("alpha =", alphas[1:3]))
ggplot(data = d, aes(x = x, y = y, z = z_rel)) +
geom_contour_filled(breaks=round(exp(seq(log(1), log(1400), length = 14)),1)) +
facet_wrap(~alpha)