是否可以做一个ggplot2扩展(例如。( geom_smooth)将现有的xy轴自动转换为log10刻度的?
例如,这里有一个reprex
set.seed(11) # generate random data
method1 = c(rnorm(19,0,1),2.5)
method2 = c(rnorm(19,0,1),2.5)
Subject <- rep(paste0('S',seq(1:20)), 2)
Data <- data.frame(Value = matrix(c(method1,method2),ncol=1))
Method <- rep(c('Method 1', 'Method 2'), each = length(method1))
df_corr <- data.frame(first = method1, second = method2) # used for correlation
ggplot(data = df_corr, mapping = aes(x = first, y = second)) +
geom_smooth() + # line 2
scale_x_continuous(trans = 'log10') + # line 3
scale_y_continuous(trans = 'log10') # line4相反,我想创建一个ggplot2扩展函数(它接收ggplot2()定义的所有美学),它同时使用ggproto执行第2-4行的操作。
发布于 2022-06-08 03:33:42
您还可以将这三行放入列表中:
geom_smooth_log <- list(
geom_smooth(), # line 2
scale_x_continuous(trans = 'log10'), # line 3
scale_y_continuous(trans = 'log10') # line4
)
ggplot(data = df_corr, mapping = aes(x = first, y = second)) +
geom_smooth_log发布于 2022-06-08 03:26:20
您可以以下列方式实现您自己的功能:
library(tidyverse)
set.seed(11) # generate random data
method1 = c(rnorm(19,0,1),2.5)
method2 = c(rnorm(19,0,1),2.5)
Subject <- rep(paste0('S',seq(1:20)), 2)
Data <- data.frame(Value = matrix(c(method1,method2),ncol=1))
Method <- rep(c('Method 1', 'Method 2'), each = length(method1))
df_corr <- data.frame(first = method1, second = method2) # used for correlation
my_log_plot <- function(data, x, y) {
ggplot(data, aes({{x}}, {{y}})) +
geom_smooth() +
scale_x_log10() +
scale_y_log10()
}
my_log_plot(df_corr, first, second)

要创建您自己的ggplot函数,您需要使用ggproto,并概述了这个过程这里。
https://stackoverflow.com/questions/72539617
复制相似问题