2016-09-20 2 views
0

Я столкнулся с проблемой размещения индекса в графике Text. Сначала я сделал простую линейную нормальную регрессию из 2 непрерывных переменных и построил ее с использованием ggplot.индекс в тексте ggplot

Olm=lm(LPBEO ~ SNTO, LPBESNTR) 
Ointercept=signif(coef(Olm)[1], digits=3) 
Oslope=signif(coef(Olm)[2], digits=3) 
Otext= paste("O-LPBE[50]","=",Ointercept,"+ (", Oslope, "x O-SN[50])") 
Opred<- predict(Olm, interval="prediction") 
Odataframe=data.frame(cbind(LPBESNTR$SNTO,LPBESNTR$LPBEO,Opred)) 
colnames(Odataframe)=c("SNTO", "LPBEO", "fit", "lwr", "upr") 
O=ggplot(Odataframe, aes(x=SNTO, y=LPBEO))+ 
    geom_point(shape=20,colour = "red", size = 3)+ 
    geom_line(aes(y=lwr), color = "red", linetype = 2, size=1)+ 
    geom_line(aes(y=upr), color = "red", linetype = 2, size=1)+ 
    geom_smooth(method=lm, fill = "orange",colour="red", size = 1)+ 
    ggtitle("SNT O vs LPBE O") + 
    theme(plot.title = element_text(face="bold",size=20)) + 
    xlab(bquote(~"Log"[10]~ "SN"[50]))+ 
    theme(axis.title.x = element_text(face='bold', size=20),axis.text.x = element_text(face='bold', size=20)) + 
    ylab(bquote(~"Log"[10]~"LPBE"[50]))+ 
    theme(axis.title.y = element_text(face='bold', size=20),axis.text.y = element_text(face='bold', size=20)) + 
    annotate("text", x = 1.5, y = 4.5, label = Otext, color="black", fontface="bold", size = 5, parse=FALSE) 
O 

Я хочу добавить индекс в текст для отображения уравнения регрессии. Для этого я создал объект Otext с помощью команды paste, которую я использовал для аннотации сюжета. команда создает объект, но не может отображать индексы в текстах. Я не могу указать, где проблема в коде.
мне нужно 50 выступать в качестве индекса в текстовой аннотации к сюжету,

Otext= paste("O-LPBE[50]","=",Ointercept,"+ (", Oslope, "x O-SN[50])") 

однако он показывает, как, например, в скобках не в качестве индексов.

Я прошу кого-то уточнить, как это сделать. Спасибо

+0

Возможный дубликат [ggplot2 - аннотировать вне сюжета] (http://stackoverflow.com/questions/12409960/ggplot2-annotate-outside-of-plot) – cuttlefish44

ответ

0

Вы можете использовать выражение() для индексов, но потому, что вы хотите, чтобы ссылаться на переменную, а нам нужно использовать bquote():.

Otext=bquote(paste("O-LPBE"[50],"=",.(Ointercept),"+ (", .(Oslope), " x O-SN"[50],")")) 

Здесь мы используем (переменная) для ссылки ваши переменные и [нижний индекс] для индексов (^ для верхних индексов).

+0

Я попытался, как упоминалось выше, но я получаю ошибку " Ошибка: Эстетика должна быть либо длиной 1, либо такой же, как данные (1): метка, цвет, размер, шрифт ». –

+0

Извините, я думал, что вы хотели бы это как ярлык оси или название, и в этом случае все должно быть хорошо. Чтобы использовать Otext как метку на графике, вам нужно будет использовать библиотеку (сетку), а затем my_grob = grobTree (textGrob (Otext, x = 0.5, y = 0.5)), а затем добавьте annotation_custom (my_grob) в свой ggplot – greghk

+0

с существующим кодом Я получаю текст в сюжете, но проблема в текстовой части, в которой я хочу писать 50 в индексе, я пытался использовать выражение (вставить) ',' bquote (expression) ', но оба показывают некоторые ошибки или не отображают текст в сюжете. –