2015-01-31 3 views
3

я следующее резюме кадра данных, созданное с dplyrVariable положения этикетки в ggplot линии диаграмме

structure(list(maxrep = c(7L, 7L, 8L, 8L, 9L, 9L, 10L, 10L, 11L, 
11L, 12L, 12L, 13L, 13L, 14L, 14L, 15L, 15L, 16L, 16L, 17L, 17L, 
18L, 18L, 19L, 19L, 20L, 20L, 21L, 21L, 22L, 22L, 23L, 23L, 24L, 
24L, 26L, 26L), div = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("Premier Division", 
"Second Division"), class = "factor"), freq = c(1L, 10L, 4L, 
39L, 26L, 89L, 73L, 146L, 107L, 162L, 117L, 133L, 121L, 125L, 
116L, 91L, 110L, 65L, 95L, 43L, 75L, 38L, 43L, 24L, 38L, 16L, 
36L, 5L, 15L, 2L, 9L, 7L, 9L, 1L, 3L, 3L, 2L, 1L)), .Names = c("maxrep", 
"div", "freq"), class = c("grouped_df", "tbl_df", "tbl", "data.frame" 
), row.names = c(NA, -38L)) 

Моего намерением заключается в использовании ggplot2 для построения линейных графиков 2-х линий с разным цветом с помощью текстовых меток для каждого значения.

Что я сделал

ggplot(df, aes(x=maxrep, y=freq, colour=div)) + 
geom_line() + 
geom_text(aes(label=freq), vjust=-.5) 

Результат был

enter image description here

Теперь мой вопрос: Все метки на диаграмме выше точек в соответствующих строках. Я хочу, чтобы метки для разных цветов находились в разных относительных положениях, например. метки для голубого над линией и метки для красного цвета ниже линии (то есть переменная vjust). Есть ли способ сделать это?

Кроме того, есть ли способ прочитать письмо a в цветовой легенде справа?

+0

У вас хоть на черчения каждую строку во время изменяющих hjust и vjust для каждого? – daniel

+1

Не совсем; не может по-настоящему разобраться, разделив «geom_text» на два, по одному для каждой строки? – Ricky

+0

Ну, я что-то @RStudent просто реализовал идею предложения. – daniel

ответ

3

Создать новую переменную в data.frame удерживая параметр vjust регулировки:

df$pos <- c(2, -2)[(df$div == "Premier Division")+1] 

И вы могли бы назвать vjust внутри aes с новый pos vector:

ggplot(df, aes(x=maxrep, y=freq, colour=div)) + 
    geom_line() + 
    geom_text(aes(label=freq, vjust=pos)) 

pic

+0

Спасибо, это здорово, мне удалось принять его для еще большего количества условий. Я действительно пробовал это, прежде чем задал вопрос, но я не понимал, что часть 'vjust' должна находиться внутри' aes'. – Ricky

3

Как насчет прокладки линий отдельно различающихся значений vjust? Вы можете избавиться от a в настройках легенды show_guide = FALSE.

ggplot(df, aes(x=maxrep, y=freq, colour=div, label = freq)) + 
    geom_line() + 
    geom_text(data = df[df$div == "Second Division",], vjust=2, show_guide = FALSE) + geom_text(data = df[df$div == "Premier Division",], vjust=-2, show_guide = FALSE) 

Который возвращает:

enter image description here

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