起初這聽起來像是一個非常微不足道的問題,但到目前為止沒有人設法幫助我,因此我向大家伸出援手。
我想做以下事情:
我正在撰寫一個簡單的函式,它允許我將兩個變數相互繪制,第三個變數為觀察點著色(取決于顏色變數的相應值)。代碼如下所示:
scatterplot <- function(data_used, x.variable, y.variable, color.variable) {
ggplot(data_used, aes(x=x.variable, y = y.variable))
geom_point(aes_string(color = color.variable))
}
scatterplot(data_used = example_data, x.variable = example_data$education,
y.variable = example_data$wages,
color.variable = example_data$sex)
我現在希望 R 做的是用我決定繪制的相應變數的名稱來標記 x 軸和 y 軸(分別)。在此示例中,x 軸將是“教育”,y 軸將是“工資”。
我試圖簡單地說 labs (x = x.variable, y = y.variable),但它不起作用(這樣做時,R 用變數值標記軸!)。默認情況下,R 僅將軸命名為“x.variable”和“y.variable”。
有人可以幫助我實作我想要做的事情嗎?
此致,
西弗里克斯
uj5u.com熱心網友回復:
jpenzer 的回答很好。這里沒有準參考的東西。
scatterplot <- function(data_used, x.variable, y.variable, color.variable) {
ggplot(data_used, aes_string(x=x.variable, y = y.variable))
geom_point(aes_string(color = color.variable))
labs(x=x.variable, y=y.variable, colour=color.variable)
}
mtcars %>%
mutate(am = as.factor(am)) %>%
scatterplot(., x.variable = "hp",
y.variable = "mpg",
color.variable = "am")

uj5u.com熱心網友回復:
事后看來,我不確定準參考的東西是否 100% 必要,但這是我用于類似需求的模式:
my_scatterplot <- function(data, x, y){
.x = rlang::enquo(x)
.y = rlang::enquo(y)
data %>%
ggplot(aes(x = x, y = y))
geom_point()
labs(x = .x,
y = .y)
}
如果它對您不起作用,請告訴我,但它應該適用。編輯:應該在 DaveArmstrong 的回答之后添加,該函式將在不帶引號的 x / y 變數的情況下呼叫,例如
diamonds %>% my_scatterplot(price, table)
uj5u.com熱心網友回復:
要在函式中傳遞列名,您可以{{...}}在函式體中所需的列名周圍使用雙花??括號 :
library(dplyr)
library(ggplot2)
scatterplot <- function(data_used, x.variable, y.variable, color.variable) {
ggplot(data_used, aes_string({{x.variable}}, {{y.variable}}))
geom_point(aes_string(color = {{color.variable}}))
labs(x=x.variable, y=y.variable, colour=color.variable)
}
scatterplot(mtcars %>% mutate(am = as.factor(am)), x.variable = "mpg",
y.variable = "hp",
color.variable = "am")

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/376596.html
上一篇:使用ggplot生成自定義圖例
下一篇:對齊圖例水平ggplot2
