2013-10-10 4 views
3

Я создал диаграмму фасетной диаграммы, в которой сравниваются 3 разных результата между 2 группами за период времени. Я хочу иметь возможность настраивать метки данных в одной из групп (т. Е. Надписи над метками надписи для одной группы, а над точкой данных - метки для второй группы).Настройка меток данных в ggplot

Вот мой код:

Year <- c("Y1", "Y2","Y3", "Y1", "Y2","Y3", "Y1", "Y2","Y3", "Y1", "Y2","Y3","Y1", "Y2","Y3", 
      "Y1","Y2","Y3") 
Group <- c("Group A", "Group A", "Group A", "Group A", "Group A", "Group A", "Group A", "Group A", "Group A", 
      "Group B", "Group B", "Group B", "Group B","Group B", "Group B", "Group B", "Group B", "Group B") 
Test <- c("Test 1", "Test 1", "Test 1", "Test 2", "Test 2", "Test 2", "Test 3", "Test 3", "Test 3", 
      "Test 1", "Test 1", "Test 1","Test 2", "Test 2", "Test 2","Test 3", "Test 3", "Test 3") 
Score <- c(68,70,73,61,62,65,61,62,65, 
      75,74,76,74,74,77,70,71,69) 
df <- data.frame (Year, Group, Test, Score) 

library(ggplot2) 

ggplot (df, aes (x=Year, y=Score, group=Group)) + geom_line(aes(group=Group), size=1.5) + facet_grid(.~ Test) 
ggplot(df, aes(x=Year, y=Score, colour=Group)) + geom_line(aes(group=Group), size=1.5) + 
    facet_grid(.~ Test) + 
    geom_point(size=4, shape=21) + 
    geom_text(aes(label = Score, vjust=-1))+ 
    scale_y_continuous(limits = c(0,100), breaks=seq(0,100,20)) + 
    ylab("Percentage of Students") + xlab ("Year") +    
    labs(title = "Chart Title") + 
    theme(strip.text.x = element_text(size = 15, colour="black", angle = 0), 
     strip.background = element_rect(colour="white", fill="white") 
     ) 

Любая помощь будет оценена.

ответ

3

Вы можете использовать функцию ifelse() внутри aes() из geom_text(), чтобы установить различные позиции у каждого Group - для одной группы 5 значений выше, а для других значений 5 ниже.

ggplot(df, aes(x=Year, y=Score,colour=Group)) + geom_line(aes(group=Group),size=1.5) + 
    facet_grid(.~ Test) + 
    geom_point(size=4, shape=21) + 
    geom_text(aes(y=ifelse(Group=="Group B",Score+5,Score-5),label = Score))+ 
    scale_y_continuous(limits = c(0,100), breaks=seq(0,100,20)) 

enter image description here

+0

Brilliant! Благодарю. – Greg

Смежные вопросы