首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ggproto扩展log刻度的ggplot2

用ggproto扩展log刻度的ggplot2
EN

Stack Overflow用户
提问于 2022-06-08 03:12:25
回答 2查看 68关注 0票数 0

是否可以做一个ggplot2扩展(例如。( geom_smooth)将现有的xy轴自动转换为log10刻度的?

例如,这里有一个reprex

代码语言:javascript
复制
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行的操作。

EN

回答 2

Stack Overflow用户

发布于 2022-06-08 03:33:42

您还可以将这三行放入列表中:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2022-06-08 03:26:20

您可以以下列方式实现您自己的功能:

代码语言:javascript
复制
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,并概述了这个过程这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72539617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档