2016-09-04 3 views
1

Я абсолютно не знаком для directlabel + ggplot2 package. Поэтому я буду признателен за любую помощь. Я хочу правильно выровнять свои ярлыки для линейного графика - я потратил часы, пытаясь узнать directlabel, и я думаю, что с помощью SO я смогу сделать эту работу.Правильное совмещение directlabels с ggplot2

Вот мой данные:

structure(list(Rio.Olympics.Sports.Participating.Team = structure(c(2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("American Gymnastics", 
"American Swimmers", "Boxing", "European Gymnastics", "Running" 
), class = "factor"), Calendar.Quarter = structure(c(16071, 16161, 
16252, 16344, 16436, 16526, 16617, 16709, 16801, 16892, 16983, 
17075, 16071, 16161, 16252, 16344, 16436, 16526, 16617, 16709, 
16801, 16892, 16983, 17075, 16071, 16161, 16252, 16344, 16436, 
16526, 16617, 16709, 16801, 16892, 16983, 17075, 16071, 16161, 
16252, 16344, 16436, 16526, 16617, 16709, 16801, 16892, 16983, 
17075, 16071, 16161, 16252, 16344, 16436, 16526, 16617, 16709, 
16801, 16892, 16983, 17075), class = "Date"), Randomized.Viewers = c(49, 
45, 51, 55, 47, 48, 54, 57, 53, 50, 52, 58, 32, 29, 33, 40, 34, 
36, 31, 39, 37, 30, 35, 41, 5, 1, 25, 46, 38, 4, 56, 27, 21, 
43, 42, 44, 2, 59, 3, 10, 60, 7, 14, 24, 13, 16, 17, 28, 15, 
6, 19, 23, 11, 12, 20, 22, 9, 8, 18, 26)), .Names = c("Rio.Olympics.Sports.Participating.Team", 
"Calendar.Quarter", "Randomized.Viewers"), row.names = c(NA, 
-60L), class = "data.frame") 

Теперь, я написал следующий код для построения простого рёберного графа:

d<-ggplot(data = p, aes(x=Calendar.Quarter,y=Randomized.Viewers)) + 
     geom_line(aes(color = Rio.Olympics.Sports.Participating.Team)) + 
     scale_color_manual(name = "Sports Type",values = c("blue", "gray51","gray51","gray51","gray51"),guide = FALSE) 
direct.label(d, list('last.qp', cex=.75,dl.trans(x=x-3))) 

я использовал следующее справочное руководство для maxvar.qphttp://directlabels.r-forge.r-project.org/docs/

Выхода этого графика: enter image description here

Как мы видим, все точки перемещены влево. В то время как верхние 3 линии, похоже, в порядке, но «Бег» и «Бокс» переместились много.

У меня есть два вопроса:

а) Есть ли в любом случае я могу поставить метки на верхней части linegraphs и к концу рёберный граф, особенно для «Запуск» и «Бокс»? Я прочитал эту тему Labelling points with ggplot2 and directlabels, но я был не совсем уверен, что происходит. Я начинаю с R, начал использовать R только около 2-3 недель. Моя гипотеза заключается в том, что плакат использует для циклов, но у меня слишком много строк в моих фактических данных, и я хочу держаться подальше от цикла. Я ищу векторную операцию, если это возможно.

b) Из этой темы How to use custom names for labels with ggplot2 + directlabels, кажется, что пакет DirectLabels принимает значения из имен столбцов таблицы. Есть ли способ изменить имена ярлыков? ggplot2 предоставляет API для этого. Тем не менее, я не уверен, имеет ли такой API directlabels. Если нет, я бы использовал colnames для перезаписи имен столбцов перед вызовом функции directlabel. Я был бы признателен за любые мысли по этому поводу.

PS: Я задаю два вопроса, потому что я твердо верю, что они связаны с одними и теми же данными и проблемами. Раньше меня критиковали за создание нескольких вопросов в одном наборе данных. Итак, я использую свое лучшее суждение здесь.

+0

Имена берутся из уровней факторов, которые вы сопоставляете с цветом. Функция 'levels()' может изменять имена для вас. –

+0

@ RomanLuštrik Спасибо за помощь. У меня есть два вопроса: а) Является ли 'levels()' предоставлено 'directlabel'? б) Можете ли вы, пожалуйста, помочь мне с первым вопросом, если это возможно? – watchtower

+1

'levels' - базовая функция. –

ответ

2

а) Есть ли в любом случае я могу поместить этикетки на верхнюю из linegraphs и в стороне конца в рёберном графе [...]?

Например,

direct.label(d, list('last.qp', cex=.75, hjust = 1, vjust = 0)) 

дает

enter image description here

б) [...] Есть в любом случае я могу изменить имена меток?

Например

d + geom_dl(
    aes(label = letters[1:5][p[,1]]), 
    method = list('last.qp', cex=.75, hjust = 1, vjust = 0) 
) 

дает

enter image description here

отображение является

cbind(levels(p[,1]), letters[1:5]) 
#  [,1]     [,2] 
# [1,] "American Gymnastics" "a" 
# [2,] "American Swimmers" "b" 
# [3,] "Boxing"    "c" 
# [4,] "European Gymnastics" "d" 
# [5,] "Running"    "e" 

Вы можете настроить его, как вы хотите.