#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, заключается в том, что ваш xvariable
сам по себе является категориальной переменной. В этом случае ggplot2 по умолчанию использует переменную, отображеннуюx
для группировки, поэтому вы получаете вертикальные линии.3. Это имеет большой смысл. Так много методов для изучения! Очень признателен