GGPLOT2二级轴tidyeval

问题描述 投票:0回答:1

i想知道是否可以在具有可变参考的GGPLOT2中指定次级轴转换。 特别是我有以下伪代码:

df %>% group_by(var0) %>% summarise(var1 = ..., var2 = ...) %>% ggplot() + geom_bar(aes(x = var0, y = var1), stat = "identity") + geom_line(aes(x = var0, y = var2, group = 1))
在此代码中,我们在第一个轴上绘制了所有内容,因此我们可以做:

df %>% group_by(var0) %>% summarise(var1 = ..., var2 = ...) %>% ggplot() + geom_bar(aes(x = var0, y = var1), stat = "identity") + geom_line(aes(x = var0, y = var2 * max(var1) / max(var2), group = 1)) + scale_y_continuous(sec.axis = sec_axis(transform = ~ ./ (max(var1) / max(var2)), name="sec_axis"))
该代码不起作用,因为

var1

var2
没有在此管道操作之外定义,因此我必须这样做:

df1 <- df %>% group_by(var0) %>% summarise(var1 = ..., var2 = ...) df1 %>% ggplot() + geom_bar(aes(x = var0, y = var1), stat = "identity") + geom_line(aes(x = var0, y = var2 * max(var1) / max(var2), group = 1)) + scale_y_continuous(sec.axis = sec_axis(transform = ~ ./ (max(df1$var1) / max(df1$var2)), name="sec_axis"))
this this working,但是我必须创建一个附加变量,
df1

在GGPLOT链式操作之外。有没有办法获得第一种工作方法?

谢谢你
    

一个选项是包裹
r ggplot2 pipe magrittr
1个回答
1
投票
呼叫括号中,当您使用时,

magrittr

管道允许将数据集传递到多个位置。
基于
mtcars

使用最小可重现的示例

library(dplyr, warn = FALSE) library(ggplot2) mtcars %>% group_by(cyl) %>% summarise( var2 = mean(mpg) ) %>% { ggplot(., aes(cyl, var2)) + geom_col() + scale_y_continuous( "Miles/gallon", sec.axis = sec_axis(function(x) x + max(.$var2)) ) }

enter image description here

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.