2015-06-05 20 views
8

Posso usare il markup in un'annotazione ggplot?formato ggplot annotazione corsivo

Diciamo, ho questo grafico:

p <- function(i) 8*i 
a <- function(i) 1+4*i*(i-1) 

library(ggplot2) 
library(reshape2) 

i <- 1:(8*365/7) 
d <- data.frame(i=i,p=p(i),a=sapply(i,a)) 
d <- melt(d, id.vars='i') 
p <- ggplot(d, aes(i, value, linetype=variable)) + 
    geom_hline(yintercept=700^2) + 
    geom_line() + 
    scale_linetype_manual(values=c(2,1)) + 
    #geom_point() + 
    scale_x_continuous(breaks=(0:20)*365/7, labels=0:20) + 
    #scale_y_continuous(breaks=c(0,700^2), labels=c(0,expression(L^2))) 
    scale_y_sqrt() + 
    #scale_y_log10() + 
    annotate('text', 8*365/7, 1e3, label="P(i)=8i", hjust=1, size=3) + 
    annotate('text', 8*365/7, 2.5e5, label="A(i)=1+4i(i-1)", hjust=1, size=3) 
print(p + theme_classic()) 

output

So che posso usare fontface = 3 e mettere tutto in corsivo. Ma non voglio i numeri in corsivo, solo la variabile i. Preferibilmente, P e A sarebbe non essere in corsivo pure.

Qualche idea?

risposta

12

Utilizzare parse=TRUE e fornire una stringa formattata in base a ?plotmath.

p <- ggplot(d, aes(i, value, linetype=variable)) + 
    geom_hline(yintercept=700^2) + 
    geom_line() + 
    scale_linetype_manual(values=c(2,1)) + 
    scale_x_continuous(breaks=(0:20)*365/7, labels=0:20) + 
    scale_y_sqrt() + 
    annotate('text', 8*365/7, 1e3, 
      label="P(italic(i))==8~italic(i)", parse=TRUE, 
      hjust=1, size=3) + 
    annotate('text', 8*365/7, 2.5e5, 
      label="A(italic(i))==1+4~italic(i)(italic(i)-1)", parse=TRUE, 
      hjust=1, size=3) 

enter image description here

9

In questo momento questa pagina è il risultato di ricerca in alto su Google per ggplot Annota corsivo. Per il beneficio di coloro che vogliono semplicemente scrivere in corsivo un'intera annotazione, sto scrivendo questo post. Utilizzare l'opzione fontface di annotate. Esempio:

risposta
seq(0,3.14,0.01) 
qplot(x, sin(x)) + # works the same for qplot or ggplot 
annotate(geom = 'text', 
     x = 1.5, 
     y = 0.5, 
     hjust = 0.5, 
     label = 'Hello, World', 
     fontface = 'italic') 

enter image description here

+0

Oh sì. Questa risposta è chiaramente la migliore. – Seanosapien

+1

FYI, l'argomento fontface funziona anche con 'geom_text' – pbnelson

4

Miglior va bene, ma in uno scenario più complesso, con interruzioni di linea non ha funzionato per me, così ho semplicemente usato Unicode caratteri corsivo invece. Per il tuo esempio:

library(Unicode) 

italic_i <- u_char_inspect(u_char_from_name("MATHEMATICAL ITALIC SMALL I"))["Char"] 
label1 <- paste("P(", italic_i, ")=8", italic_i, sep="") 
label2 <- paste("A(", italic_i, ")=1+4", italic_i, "(", italic_i, "-1)", sep="") 

i <- 1:(8*365/7) 
d <- data.frame(i=i,p=p(i),a=sapply(i,a)) 
d <- melt(d, id.vars='i') 
p <- ggplot(d, aes(i, value, linetype=variable)) + 
    geom_hline(yintercept=700^2) + 
    geom_line() + 
    scale_linetype_manual(values=c(2,1)) + 
    #geom_point() + 
    scale_x_continuous(breaks=(0:20)*365/7, labels=0:20) + 
    #scale_y_continuous(breaks=c(0,700^2), labels=c(0,expression(L^2))) 
    scale_y_sqrt() + 
    #scale_y_log10() + 
    annotate('text', 8*365/7, 1e3, label=label1, hjust=1, size=3) + 
    annotate('text', 8*365/7, 2.5e5, label=label2, hjust=1, size=3) 
print(p + theme_classic()) 

Italic annotation ggplot2

Edit: Ho appena notato che il salvataggio di un pdf con pdf() doest non rendere unicode correttamente, ma si può semplicemente utilizzare cairo_pdf(), invece, che funziona bene (vedi: Unicode Characters in ggplot2 PDF Output)