2016-06-16 2 views
1

Прежде всего, я начинаю R-пользователь. Я хочу добавить R-квадрат и p-значение в свой график. Но в строке просто разделите запятую. Прикрепленный код, который я пытаюсь использовать.Я не могу отделить две аннотированные метки запятой

ggplot(data, aes(x,y))+ 
geom_point(shape=1,size=4)+ 
stat_smooth(method="lm",size=0.6,se=FALSE,colour="black")+ 
annotate("text",x=30,y=0.45,label=c("italic(r^{2}==0.151)","p==0.226"),parse=TRUE)+ 
theme_bw(base_size = 12) 

Однако, я получаю эту ошибку:

Error: Aesthetics must be either length 1 or the same as the data (1): label

Спасибо!

ответ

2

Если вы хотите разобрать несколько выражений как одно выражение, вы можете использовать paste, чтобы взять выражения и поместить их в одну строку. Как поясняется в другом ответе, прямо сейчас вы даете annotate два разных выражения, но только один набор координат x, y, и это вызывает ошибку.

Без запятой, единственное выражение может выглядеть

paste("italic(r^{2}) ==", 0.151, "~p==.226")

Это то, что вы положили бы в качестве метки в annotate. Дополнительная тильда создает пробел между первым и вторым выражениями.

Для того чтобы включить запятую, вам нужно list в plotmath. В plotmath list означает список, разделенный запятой (см. ?plotmath для всех доступных функций). По сути, это означает, что все ваше выражение заключено в list внутри paste.

paste("list(italic(r^{2}) ==", 0.151, ", p==.226)") 

И поэтому ваш код будет аннотировать

+ annotate("text", x=30, y=0.45, label=paste("list(italic(r^{2}) ==", 0.151, ", p==.226)"), parse=TRUE) 
+0

Ницца. Почему я не могу заставить это работать. ggplot молчал, когда я добавил запятую. –

+0

Ах, из-за списка вместо массива символов? Почему это имеет значение? Странный. –

+0

@MikeWise Да, 'list' в plotmath - это то, что позволяет списки, разделенные запятыми. Без этого вы либо получите ошибку, либо не получите запятую. – aosmith

0

Это работает, но это не дает вам запятой, потому что запятая сбивает парсер формулы.

library(ggplot2) 
set.seed(123) 
n <- 100 
data <- data.frame(x=(40+10*rnorm(n)),y=-0.2+0.5*rnorm(n)) 
ggplot(data)+ 
    geom_point(aes(x,y),shape=1,size=4)+ 
    stat_smooth(method="lm",size=0.6,se=FALSE,colour="black")+ 
    annotate("text",x=c(30,37),y=c(0.45,0.43),label=c("italic(r^{2}==0.151)","p==0.226"), 
                      parse=TRUE) + 
    theme_bw(base_size = 12) 

Вот график.

enter image description here

Примечание ваша ошибка приходит потому, что вы даете ему вектор длины 2 в вашей команде annotate, но x и y параметр имеет только длину 1. я настроил их, но это было бы лучше, как одна строка, я думаю.

Чтобы получить запятая вы можете разбить его на два annotate слоев как Тхи:

library(ggplot2) 
set.seed(123) 
n <- 100 
data <- data.frame(x=(40+10*rnorm(n)),y=-0.2+0.5*rnorm(n)) 
ggplot(data)+ 
    geom_point(aes(x,y),shape=1,size=4)+ 
    stat_smooth(method="lm",size=0.6,se=FALSE,colour="black")+ 
    annotate("text",x=30,y=0.45,label="italic(r^{2}==0.151)", parse=T) + 
    annotate("text",x=36,y=0.43,label=", p==0.226",parse=F) + 
    theme_bw(base_size = 12) 

Уступая это:

enter image description here

Но я лично считаю, что это слишком хлопотно. Идите без запятой. Хотя может быть способ получить его в формуле с escape-последовательностью или чем-то еще.

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