2012-03-02 2 views
1

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

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

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

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

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

ответ

3

Вы должны сначала построить строку, содержащую тест, который вы хотите, с 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) 
)) 
+0

Это прекрасно работает. Большое спасибо за ваш быстрый ответ! Получение 'paste' в передней части всей строки было чем-то, что я не пробовал. – Ben

Смежные вопросы