2015-06-05 17 views
8

Bir ggplot ek açıklamada işaretleme kullanabilir miyim?ggplot format italik bilgi notu

Bu grafiği var diyelim:

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

ben font yüzü = 3 kullanmak ve italik her şeyi koyabilirsiniz biliyorum. Ama italik sayıları istemiyorum, sadece i değişkenini. Tercihen P ve A'da da italik olacaktır.

Herhangi bir fikrin var mı?

cevap

12

parse=TRUE kullanın ve ?plotmath'a göre biçimlendirilmiş bir dize verin.

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

Şu anda bu sayfayı italik açıklama ggplot için google üst arama sonucudur. Tüm bir notu basitçe italik yapmak isteyenler için bu yazıyı yazıyorum. Annotate'ın fontface seçeneğini kullanın. Örnek:

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 evet. Bu cevap açıkça en iyisidir. – Seanosapien

+1

FYI, fontface argümanı 'geom_text' ile de çalışır – pbnelson

4

En çok oy cevap sadece iyi, ama satır aralıkları olan daha karmaşık bir senaryo Bende işe yaramadı, bu yüzden sadece yerine Unicode italik karakterler kullanılır. senin Örneğin:

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

Düzenleme: Ben sadece pdf ile bir pdf() tasarrufu gayet güzel çalışıyor, hangi yerine) (doğru unicode oluşturulmaz doest ama sadece cairo_pdf kullanabilirsiniz fark etmiş (bakınız: Unicode Characters in ggplot2 PDF Output)