Как писать после десятичного нуля в ggplot (geom_text)

Мне интересно, как я могу поставить после десятичного нуля в граненый график ggplot. Следующее изображение делает его более ясным. Я хотел бы написать r-квадрат = 0,61 и 0,30 в двух facets из ggplot, используя geom_text. Он правильно пишет 0,61, но на втором графике пишет только 0,3, а не 0,30. см. рисунок. Мои рабочие данные и коды ниже.

 dput(ssdata)
 structure(list(Value = c(0.0776799352545487, 0.0249900650410425, 
 0.0530261633888124, 0.0567436050950435, 0.0120449632406235, 0.0148445528174501, 
 0.00322103330067226, 0.0841269995036878, 0.0667567417539399, 
 0.0353554071120496, 0.0168391247006024, 0.0187554325376238, 0.0862325738977503, 
 0.0353403282165527, 0.0459572764543387, 0.0153406669137266, 0.0390336212195695, 
 0.0620484352111816, 0.0489626884460449, 0.0221186299849756), 
 Ft = c(1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 
 1, 1, 1), RT = c(869, 722, 1790, 875, 1524, 1314, 1061, 919, 
 1525, 1127, 932, 1182, 1046, 1004, 1238, 1497, 1066, 1500, 
 1654, 903), Season = c("Winter", "Spring", "Spring", "Winter", 
 "Summer", "Fall", "Fall", "Winter", "Winter", "Spring", "Summer", 
 "Summer", "Winter", "Winter", "Spring", "Fall", "Spring", 
 "Winter", "Spring", "Spring"), fac = structure(c(1L, 2L, 
 2L, 1L, 3L, 4L, 4L, 1L, 1L, 2L, 3L, 3L, 1L, 1L, 2L, 4L, 2L, 
 1L, 2L, 2L), .Label = c("Winter", "Spring", "Summer", "Fall"
 ), class = "factor")), .Names = c("Value", "Ft", "RT", "Season", 
 "fac"), row.names = c(51L, 1320L, 1341L, 427L, 2384L, 3342L, 
  3111L, 16L, 330L, 1062L, 2501L, 2500L, 61L, 711L, 941L, 3171L, 
 973L, 610L, 1418L, 1524L), class = "data.frame")

 dput(data)
 structure(list(fac = structure(1:4, .Label = c("Winter", "Spring", 
 "Summer", "Fall"), class = "factor"), tp = c("R^2== 0.26", "R^2== 0.61", 
 "R^2== 0.30", "R^2== 0.22"), ttp = c("n== 844", "n== 844", "n== 844", 
  "n== 844"), family = c("serif", "serif", "serif", "serif"), fontface = c("italic", 
  "italic", "italic", "italic"), size = c(5, 5, 5, 5), x = c(0, 
  0, 0.8, 0.8), y = c(2000, 2000, 2000, 2000), yy = c(1800, 1800, 
  1800, 1800)), .Names = c("fac", "tp", "ttp", "family", "fontface", 
  "size", "x", "y", "yy"), row.names = c(NA, -4L), class = "data.frame")

Код:

plot.sea1<-ggplot(ssdata,aes(x=10*Value, y= RT))+
geom_point()+
#stat_smooth(method="loess", se=F,fullrange=TRUE, size=0.8)+
facet_grid(fac~.,scales="free_x")+
geom_text(data=data,aes(x=x,y=y,label=tp),parse=TRUE,inherit.aes=F,show_guide=  F,size=3)
plot.sea1

введите здесь описание изображения


person Cirrus    schedule 03.08.2014    source источник
comment
Когда вы создаете переменную tp, вы форматируете ее, т.е. formatC(0.3, format='f', digits=2) сохраняет конечный нуль   -  person user20650    schedule 03.08.2014
comment
@user20650 user20650 Я сгенерировал tp с помощью функции sprintf как sprintf(%3.2f, r2val[1,1]), где r2val — это кадр данных результатов r sqr.   -  person Cirrus    schedule 03.08.2014
comment
хм, я бы подумал, что это сработает - можете ли вы поделиться своим кодом или небольшим рабочим примером, спасибо   -  person user20650    schedule 03.08.2014
comment
Re: ваш добавленный код, где определены r2val и sea.data?   -  person Eric Fail    schedule 03.08.2014
comment
хорошо, я думаю, вы передаете полное значение R2 в виде строки правильно [данные вроде этого eq <- data.frame(fac = 0:1, r2 = c("R^2== 0.61" , "R^2== 0.30")). Это приводит к проблемам при анализе   -  person user20650    schedule 04.08.2014
comment
Взгляните на этот вопрос для другого способа добавьте свой R2, чтобы они были правильно проанализированы   -  person user20650    schedule 04.08.2014
comment
@EricFail после изменения позиции parse=TRUE все еще есть проблема. квадрат R не находится в математическом выражении. его R ^ 2, но нам нужен только квадрат R (R2). как это исправить?   -  person Cirrus    schedule 04.08.2014


Ответы (1)


У вас возникают проблемы из-за того, как анализируются передаваемые вами строки r2.

ИЗМЕНИТЬ

Используя методы из более раннего поста (ниже) для ваших данных:

lm_eqn <- function(ssdata){
           m = lm(RT ~ Value, ssdata)
           eq <- substitute(italic(r)^2~"="~r2, 
                   list(r2 = formatC(summary(m)$r.squared, digits = 2)))
           as.character(as.expression(eq))          
        }

eq1 <- ddply(ssdata,.(fac), lm_eqn)

plot.sea1 <- ggplot(ssdata,aes(x=10*Value, y= RT)) +
                 geom_point() +
                 stat_smooth(method="loess", se=F,fullrange=TRUE, size=0.8) +
                 facet_grid(fac~.,scales="free_x") + 
                 geom_text(data=eq1 ,aes(x = 0.6, y = 1200, label=V1), 
                                                               parse = TRUE)

Первый пост

# example using mtcars
data(mtcars)

# facetted plot similar to yours
p <- ggplot(mtcars, aes(mpg, wt)) + 
        geom_point(aes(color=factor(vs))) +
        stat_smooth(method="loess", se=F,fullrange=TRUE, size=0.8) + 
        facet_grid(am ~.)


eq <- data.frame(am = c(0,1), r2 =  c("italic(r)^2 == 0.30",
               as.character(as.expression(substitute(italic(r)^2~"="~r2, 
                       list(r2 = formatC(0.30, format = "f", digits = 2)))))))

eq
#  am                         r2
# 1  0        italic(r)^2 == 0.30
# 2  1 italic(r)^2 ~ "=" ~ "0.30"

# add the text
p + geom_text(data=eq ,aes(x = 25, y = 5, label=r2), parse=TRUE)

Только второй анализируется правильно. Когда вы просто передаете строку, обучающий ноль удаляется.

Таким образом, использование ответа JT85 здесь дает альтернативный способ генерировать строки r2.

# define a function to generate r2 string
lm_eqn <- function(mtcars) {
              m = lm(mpg ~ wt, mtcars)
              eq <- substitute(italic(r)^2~"="~r2, 
                          list(r2 = formatC(summary(m)$r.squared, digits = 2)))
                                               as.character(as.expression(eq))   
          }

library(plyr)
# generate r2 string
eq1 <- ddply(mtcars, .(am), lm_eqn)

# plot
p + geom_text(data=eq1 aes(x = 25, y = 5, label=V1), parse = TRUE)
person user20650    schedule 03.08.2014
comment
@ЭрикФейл; ура, но полностью взято из ответа @ JT85 по ссылке - person user20650; 04.08.2014