0

I am wondering how i can put after decimal zero in the faceted ggplot plot. Following picture make it more clear. I would like to write r-squared =0.61 and 0.30 in two facets of ggplot using geom_text. It writes 0.61 properly but writes only 0.3 and not 0.30 in second plot. see the figure. My working data and codes are below.

 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")

Code:

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

enter image description here

Cirrus
  • 638
  • 3
  • 13
  • 26
  • 1
    When you generate the variable tp are you formatting it - ie `formatC(0.3, format='f', digits=2)` keeps the trailing zero – user20650 Aug 03 '14 at 19:19
  • @user20650 I generated tp with sprintf function as sprintf("%3.2f", r2val[1,1]) where r2val is the data frame of results of r sqr. – Cirrus Aug 03 '14 at 19:22
  • 1
    hmm, I would of thought that would have worked - can you share more of your code or a small worked example, thanks – user20650 Aug 03 '14 at 19:26
  • Re: your _added code_, where is `r2val` and `sea.data` defined? – Eric Fail Aug 03 '14 at 19:51
  • ok, i think you are passing the complete R2 value as a string right [data like this `eq <- data.frame(fac = 0:1, r2 = c("R^2== 0.61" , "R^2== 0.30"))`. This is running into problems when getting parsed – user20650 Aug 03 '14 at 20:17
  • Have a look at [this question](http://stackoverflow.com/questions/19699858/ggplot-adding-regression-line-equation-and-r2-with-facet) for another way to add your R2 so they will be parsed correctly – user20650 Aug 03 '14 at 20:30
  • @EricFail after changing parse=TRUE position still there is a problem. the R square is not in mathematical expression. its R^2 but we need only R square ( R2). how to fix that ? – Cirrus Aug 03 '14 at 21:44

1 Answers1

2

You are having problems due to how the r2 strings.you are passing are getting parsed.

EDIT

Using methods from earlier post (below) on your data:

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)

First post

# 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)

Only the second is parsed correctly. When you just pass the string the training zero is removed.

So using JT85 answer here gives an alternate way to generate the r2 strings.

# 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)
Community
  • 1
  • 1
user20650
  • 24,654
  • 5
  • 56
  • 91