2015-02-12 13 views
5

Chciałbym, aby etykiety z czcionkami geom_text() przyjmowały rodzinę czcionek zgodnie ze zmienną. Jak na przykład na ggplot2 docs (przewiń do dołu), zrobiłem to (tak samo jak w przykładzie docs ggplot):Legenda dla geom_text ze zmienną rodziną czcionek

library(ggplot2) 
p <- ggplot(mtcars, aes(x=wt, y=mpg, label=rownames(mtcars))) 
p + geom_text(aes(family=c("serif", "mono")[am+1])) 

Uzyskano

enter image description here

To wszystko w porządku i dandy - ale jak mogę uzyskać rodzinę czcionek w legendzie?

+0

uh to jest dziwne, ktoś miał * * odpowiedział już to kilka dni z powrotem, a ja po prostu o do przyjęcia i wdrożenia, ale teraz jest już odpowiedź ... Co z tym? – maxheld

Odpowiedz

2

To nie jest piękne: Możesz zmienić rodzinę etykiet z legend na poziomie grob (nie znam innego sposobu, ale spodziewam się, że jest).

Najpierw dodaj colour do estetyki, aby legenda została automatycznie utworzona, a następnie ustaw kolory ręcznie, przy czym scale_colour_manual zachowa je tak jak poprzednio. Następnie dostosuj szczegóły legendy, aby zmienić etykiety i czcionki w kluczu.

library(ggplot2) 
library(grid) 



p <- ggplot(mtcars, aes(x=wt, y=mpg, colour=factor(am), label=rownames(mtcars))) + 
     geom_text(aes(family=c("serif", "mono")[am+1])) + 
     scale_colour_manual(values=c('0'= "#000000FF", '1'="#000000FF"), 
          name="am") + 
     theme(legend.text=element_text(size=16), 
       legend.key.width=unit(2, "cm")) 

g <- ggplotGrob(p) 

# change labels and fonts 
g$grobs[[8]]$grobs[[1]]$grobs[[4]]$label <- "mono" 
g$grobs[[8]]$grobs[[1]]$grobs[[4]]$gp$fontfamily <- "mono" 
g$grobs[[8]]$grobs[[1]]$grobs[[6]]$label <- "serif" 
g$grobs[[8]]$grobs[[1]]$grobs[[6]]$gp$fontfamily <- "serif" 

grid.newpage() 
grid.draw(g) 

enter image description here