微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在多个 ggplot2 等高线图中设置对数刻度?

如何解决如何在多个 ggplot2 等高线图中设置对数刻度?

我正在尝试创建三个等高线图,每个图都说明了应用于两个输入向量和一个固定 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))
}

对于向量 alpha 中的每个 alpha,我正在创建 z 值的等高线图 - 相对于最小 z 值 - 在 x 和 y 轴上。

我使用以下代码(可能不是最佳实践;我仍在学习 R 的基础知识):

plots <- list()

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 <- data.frame(cbind(x,z_rel))
  
  plots[[i]] <- ggplot(data = d,aes(x = x,y = y,z = z_rel)) + 
    geom_contour_filled()
}

当 alpha = 1 时:

alpha = 1

当 alpha = 25 时:

alpha = 25

我想使用 ggarrange() 在一个分组中显示这些图,使用一个对数色标(因为相对 z 因图而异)。有没有办法做到这一点?

解决方法

您可以构建一个包含所有 alpha 的所有数据的数据框,并用一列指示 alpha,这样您就可以对图形进行分面:

我基本上删除了 plot[[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)

然后我们创建 alphas 列:

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)

输出:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?