R ggplot2: Как получить функцию с текстом заголовка оси? - PullRequest
1 голос
/ 02 марта 2012

Я бы хотел, чтобы заголовок оси моего графика включал в текст функцию, которая выполняет вычисления для некоторых данных.

Например, вот некоторые данные

a<-data.frame(time="1000",x=rnorm(10,12,3))
b<-data.frame(time="2000",x=rnorm(50,13,4))
c<-data.frame(time="3500",x=rnorm(50,12,4))
d<-data.frame(time="5000",x=rnorm(7,14,5))
e<-data.frame(time="7000",x=rnorm(20,10,3))
f<-data.frame(time="7500",x=rnorm(15,11,3))
g<-data.frame(time="9000",x=rnorm(15,10,5))
h<-data.frame(time="9500",x=rnorm(35,30,2))
i<-data.frame(time="10000",x=rnorm(30,28,4))
a2i<-rbind(a,b,c,d,e,f,g,h,i) 

library(ggplot2)
a2i$time<-as.numeric(levels(a2i$time))[a2i$time] 
ggplot(a2i,aes(time,x))+stat_smooth()+geom_point()+
# now let's try to put on a label with a function
# mixed in with the text
#
xlab("Time (total number of observations = paste(length(a2i$x))))")
#
# but that's no good, the function is not executed, just printed
# How can I get a function to work in the axis title?

enter image description here

Я бы хотел сохранить «время» в заголовке как константу, но функция должна возвращать разные результаты при изменении данных.И добавьте туда скобки.

Я попробовал paste () и expression (), но мне не очень повезло.Любые советы будут с благодарностью.

1 Ответ

3 голосов
/ 02 марта 2012

Сначала вы должны построить строку, содержащую нужный тест, с помощью paste или sprintf, а затем передать ее в xlab.В частности, paste не должно быть внутри строки.

xlab( paste( 
  "Time (total number of observations = ", 
  length(a2i$x), 
  ")", 
  sep="" 
) )

# Equivalently
xlab( sprintf( 
  "Time (total number of observations = %s)", 
  length(a2i$x) 
) )
...