2014-09-22 2 views
4

Вот тест ДФ:Выравнивание текста аннотации в ggplot2

a <- 5:8 
b <- c("A", "B", "C", "D") 
df <- data.frame(a,b) 

Я хотел бы создать бар сюжет и добавить текст над каждой строке, на некотором расстоянии под верхней, таким образом, я использую y=Inf, vjust=2, однако буквы теперь выровнены по их вершинам, а не по нижней части буквы (т. е. они не сидят на одной горизонтальной линии). Есть ли способ изменить это (без необходимости возиться со значениями примерно как vjust=2.45 или так для «более коротких»)?

ggplot(df, aes(x=b, y=a)) + geom_bar(stat="identity") + 
    scale_y_continuous(limits = c(0,9)) + 
    annotate('text', x=1, y=Inf, vjust=2, label = "a", parse=TRUE) + 
    annotate('text', x=2, y=Inf, vjust=2, label = "a", parse=TRUE) + 
    annotate('text', x=3, y=Inf, vjust=2, label = "b", parse=TRUE) + 
    annotate('text', x=4, y=Inf, vjust=2, label = "b", parse=TRUE) 

enter image description here

ответ

5

Ответ достаточно прост: Используйте команду сингл «аннотировать» вместо нескольких из них. Редактировать: Если аргумент parse установлен в TRUE (как в вашем фрагменте), этот метод выходит из строя. :) Удачи.

library(ggplot2) 

a <- 5:8 
b <- c("A", "B", "C", "D") 
df <- data.frame(a,b) 

ggplot(df, aes(x=b, y=a)) + geom_bar(stat="identity") + 
scale_y_continuous(limits = c(0,10)) + 
# This is the difference to yor code: 
annotate("text", x = 1:4, y = Inf, vjust=2, label = c("a", "a", "b", "b")) 

enter image description here

Это фактически включен в R документации annotate: (последняя линия ?annotate)

p + annotate("text", x = 2:3, y = 20:21, label = c("my label", "label 2")) 
+0

Это является удивительным, не было известно, что это возможно. Благодаря! – beetroot