#r #ggplot2 #legend
#r #ggplot2 #легенда
Вопрос:
Предположим, у вас есть данные:
df = data.frame(A = rep(1:10,each=10),B = rep(1:10,times=10),C = runif(100,0,1))
Я написал функцию, которая принимает имя столбца в качестве аргумента:
plotFill<-function(dataframe,variable){
if(!(variable %in% names(dataframe))) stop("Variable not in data.frame")
plot = ggplot(data=dataframe,aes(x=A,y=B,z=get(variable)))
geom_tile(aes(fill=get(variable)))
return(plot)
}
Поэтому вы можете выполнить это выполнение: plotFill(df,"C")
Я пытаюсь обозначить легенду именем переданной переменной, но добавление labs(colour=variable)
не работает, что, я думаю, и должно быть, поскольку переменная является строкой…
Ответ №1:
Если речь идет только о названии метки, вы могли бы использовать plot$labels$fill:
plotFill<-function(dataframe,variable){
if(!(variable %in% names(dataframe))) stop("Variable not in data.frame")
plot = ggplot(data=dataframe,aes(x=A,y=B,z=get(variable)))
geom_tile(aes(fill=get(variable)))
plot$labels$fill <- variable
return(plot)
}
Ответ №2:
Вы не должны использовать get
здесь. Вместо этого используйте aes_string
.
plotFill<-function(dataframe,variable){
if(!(variable %in% names(dataframe))) stop("Variable not in data.frame")
plot = ggplot(data=dataframe,aes_string(x="A",y="B",z=variable))
geom_tile(aes_string(fill=variable))
return(plot)
}
plotFill(df,"C")