我有一個簡單的代碼,可以創建帶有兩個軸的組合條形圖和線圖。我想讓這段代碼動態化,這樣我就可以將要繪制的列作為函式的引數傳遞。這是函式外的代碼,它作業正常:
data <- data.frame(group = LETTERS[1:5], # Create example data
sample = c(1000, 800, 1200, 900, 800),
responses1 = c(0.6, 0.9, 0.9, 0.5, 0.8),
responses2 = c(0.2, 0.4, 0.7, 0.1, 0.3)
)
ggp1 <- ggplot(data)
geom_bar(aes(group, sample), stat = "identity")
geom_line(aes(group, responses * max(sample), group = 1),
col = "#1b98e0", lwd = 3)
scale_y_continuous(sec.axis = sec_axis(~ . / max(data$sample)))
ggp1
現在,當嘗試將其放入函式中時,這對我來說有點挑戰:
plot_func <- function(var1, var2) {
ggp1 <- ggplot(data)
geom_bar(aes(group, var1), stat = "identity")
geom_line(aes(group, var2 * max(var1), group = 1),
col = "#1b98e0", lwd = 3)
scale_y_continuous(sec.axis = sec_axis(~ . / max(data[[var1]])))
ggp1
}
uj5u.com熱心網友回復:
如果你傳遞 var1 和 var1 未參考,你可以嘗試這樣的事情:
plot_func <- function(df, var1, var2) {
ggp1 <- ggplot(df)
geom_bar(aes(group, {{var1}}), stat = "identity")
geom_line(aes(group, {{var2}} * max({{var1}}), group = 1), col = "#1b98e0", lwd = 3)
scale_y_continuous(sec.axis = sec_axis(~ . / max(df %>% pull({{var1}}))))
ggp1
}
然后嘗試:
plot_func(data,sample, responses1)
另一方面,如果 var1 和 var2 分別像這樣的“sample”和“responses1”,你可以這樣定義函式:
plot_func2 <- function(df, var1, var2) {
var1_max = max(data[[var1]])
data$line_y = data[[var2]]*var1_max
ggp1 <- ggplot(df)
geom_bar(aes_string("group", var1), stat = "identity")
geom_line(aes_string("group", "line_y", "group" = 1), col = "#1b98e0", lwd = 3)
scale_y_continuous(sec.axis = sec_axis(~ . / var1_max))
ggp1
}
然后像這樣使用它:
var1="sample"
var2="responses1"
plot_func2(data,var1,var2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/432008.html
