Использование ggplot для построения нескольких линий вдоль оси x, окрашенных их группой, но остающихся отдельными

#r #ggplot2 #plot

#r #ggplot2 #построение

Вопрос:

Я хочу использовать ggplot для создания линейного графика, в котором значения каждой «Молекулы» представлены отдельной строкой. Я хочу использовать «Семейство» для раскрашивания каждой строки. У меня возникли проблемы с этим, и, похоже, я не могу представлять отдельные значения в виде отдельных строк или окрашивать их в зависимости от их семейства.

 df.long = melt(df, id.vars = c("Molecule", "Family"), measure.vars = c(3:7))
ggplot(df.long, aes(variable, value))   geom_line(aes(colour = Molecule)
 

В итоге я строю что-то вроде этого:

введите описание изображения здесь

Если бы кто-нибудь мог помочь мне разобраться с этим, я был бы признателен.

Вот как организованы мои данные в широком формате:

Молекула Семья Pos1 Pos2 Pos3 Pos4 Pos5
A i 2.178 1.289 0.656 0.956 0.711
B ii 1.478 0.889 0.578 0.689 0.444
C ii 1.389 1.078 1.189 0.944 1.844

Ответ №1:

Чтобы получить отдельные строки для каждой Molecule , вы должны отобразить Molecule на group aes:

 library(ggplot2)
library(reshape2)

df <- read.table(text = "Molecule   Family  Pos1    Pos2    Pos3    Pos4    Pos5
A   i   2.178   1.289   0.656   0.956   0.711
B   ii  1.478   0.889   0.578   0.689   0.444
C   ii  1.389   1.078   1.189   0.944   1.844", header = TRUE)

df.long = melt(df, id.vars = c("Molecule", "Family"), measure.vars = c(3:7))
ggplot(df.long, aes(variable, value))   geom_line(aes(colour = Family, group = Molecule))
 

Комментарии:

1. Святая корова! Большое вам спасибо. Какое отличное исправление! Редактировать: решена проблема

2. (: Кстати: причина, по которой нам нужен group aes, заключается в том, что ваш x variable сам по себе является категориальной переменной. В этом случае ggplot2 по умолчанию использует переменную, отображенную x для группировки, поэтому вы получаете вертикальные линии.

3. Это имеет большой смысл. Так много методов для изучения! Очень признателен