Создать легенду для ярлыков geom_text - PullRequest
0 голосов
/ 30 апреля 2020

Я хотел бы создать точечный график, где каждая точка изображается в виде числа, а не круга. Мне нужна легенда, которая отображает числовую метку на графике рассеяния на имя образца.

Моя текущая попытка использует этот код:

plot<-ggplot(df_mds,aes(x=x,y=y,group=interaction(Group,Sample)))+geom_text(aes(label=Label,color=Group,group=Sample),show.legend =T)
plot<-plot+guide()
plot<-plot+labs(x="Leading logFC dimension 1", y="Leading logFC dimension 2")

Используя эти данные:

With the data in this dataframe

И создает это график:

And produces this graph

График выше - это почти то, что я хочу, за исключением того, что мне нужна легенда, отображающая значения в столбце «Метка» в значения в столбец «Образец».

Я видел этот пост , но я не знаю, как объединить различные формы для создания новых чисел.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 30 апреля 2020

Что вам нужно, так это возможность создать легенду, основанную на label= эстете c. К сожалению, ответ заключается в том, что вы не можете - по крайней мере, нелегко использовать ggplot. Я бы предложил использовать альтернативные подходы. Здесь я представляю два варианта, используя следующий пример набора данных:

scatter.plot <- data.frame(
    sampleName=paste0('Sample_',1:18),
    x=sample(1:10, 18, replace=TRUE),
    y=sample(1:10, 18, replace=TRUE),
    id=1:18,
    grp=c(rep('Group A', 6), rep('Group B', 6), rep('Group C',6))
)

Используйте метки на своих точках и пакет ggrepel, чтобы избежать наложения меток.

Ваши названия образцов достаточно короткие, где они имеет смысл, что вы можете добавить свои ярлыки на сам сюжет. Он может быть немного перегружен, поэтому я бы порекомендовал использовать функции geom_text_repel и geom_label_repel в пакете ggrepel, чтобы помочь с переполнением. Эстетику и различные параметры можно настроить по своему вкусу:

ggplot(scatter.plot, aes(x,y)) +
    geom_point(aes(color=grp), size=2.5) +
    geom_text_repel(
        aes(label=sampleName), color='gray45',
        min.segment.length = 0, size=3,
        force=10, direction='y') +
    theme_bw()

enter image description here

Использовать цвет и форму

Не уверен, если это будет работать для вас, но если вы отрегулируете форму для своей группы и форму для образца, вы можете получить легенду для каждого образца из коробки, используя ggplot довольно легко. Конечно, для правильного распознавания необходим цвет:

ggplot(scatter.plot, aes(x,y)) +
    geom_point(aes(shape=grp, color=sampleName), size=2)

enter image description here

...