2015-09-28 3 views
2

Я хотел бы использовать пакетные метки для маркировки моего участка. Однако я бы хотел, чтобы метка была идентификатором каждой точки. Не существует ли способа выбрать, какой фактор я бы назвал, или мне это не хватало?Выбор коэффициента для меток (ggplot2, directlabels)

library(ggplot2) 
library(directlabels) 
df <- structure(
    list(id = 1:10, 
     group = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), 
     .Label = c("A", "B"), 
     class = "factor"), 
     value1 = c(4, 1, 6, 2, 5, 7, 3, 2, 5, 8), 
     value2 = c(6, 2, 6, 2, 8, 9, 7, 5, 2, 6) 
     ), 
.Names = c("id", "group", "value1", "value2"), 
row.names = c(NA, -10L), 
class = "data.frame") 

p1 <- ggplot(df, aes(x=value1, y=value2)) + geom_point(aes(colour=group)) 
direct.label(p1) 

enter image description here

+2

Почему бы просто не использовать 'geom_text'? – Jaap

+2

'direct.label' используется как альтернатива легендам (т. Е. Используется для отображения групп на вашем графике) не как способ добавления меток в каждую точку. Для меток точек используйте 'geom_text', как упоминает Яап в своем комментарии. – LyzandeR

+0

@Jaap, потому что мой фактический участок состоит из около 200 точек и с 'geom_text' много ярлыков перекрываются – beetroot

ответ

5

Осмотр the code of direct.label.ggplot() показывает, что в конце концов вызывается geom_dl(). Эта функция ожидает эстетического отображения и метода позиционирования. Используемый метод позиционирования by default - это возвращаемое значение default.picker("ggplot"), которое использует проверку стека вызовов и в вашем случае эквивалентно вызову defaultpf.ggplot("point",,,). Следующие работы для меня:

p1 <- ggplot(df, aes(x=value1, y=value2)) + 
    geom_point(aes(colour=group)) + 
    geom_dl(aes(label = id), method = defaultpf.ggplot("point",,,)) 
p1 

Plot

(. Обратите внимание, что вам не нужно вызывать direct.label() больше)

Документация на directlabels пакета является действительно немного мало.

+0

фантастический, спасибо! У меня просто еще одна проблема. На моем фактическом сюжете есть много точек очень близко друг к другу, а некоторые из ярлыков находятся далеко от очков, есть ли способ ограничить расстояние между точкой и меткой? – beetroot

+0

Не могли бы вы разместить пример в отдельном вопросе? – krlmlr

+0

Из моего опыта работы с 'direct labels ', в целом, он работает достаточно хорошо, чтобы избежать перекрытия ярлыков; за исключением, конечно, в случае, когда у вас много много точек, которые находятся близко друг к другу. Есть несколько разных вариантов выбора, которые вы можете выбрать в 'direct labels', но я не нашел решение проблемы, которую вы создаете (т. Е. Метки всегда кажутся далеко от точек, если они не являются перекрывание). Это проблема использования обобщенной функции для конкретной проблемы. – rhozzy

1

Вы должны написать метод пользовательские позиции, например, так:

label_all <- list(dl.trans(x = x + 0.5, y = y + 0.5), # shift every point up and right 
        gapply.fun(d)) # include all points 
direct.label(p1, method = label_all) 

enter image description here

В качестве другого примера, см the documentation, в разделе «Определение метода позиционирования как список".

+0

С моей точки зрения, OP хочет воспользоваться методом позиционирования, предоставляемым' directlabels'. В вашем ответе просто используется метод позиционирования по умолчанию, который, на мой взгляд, также мог быть достигнут с помощью 'geom_text', как это было предложено в комментариях. – krlmlr

+0

Кажется, вы правы, и хороший ответ вы дали. Я тоже смогу воспользоваться этим днем. – ROLO

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