Нарисуйте несколько переменных на оси Y, используя ggplot - PullRequest
2 голосов
/ 24 марта 2011

Я новичок в R и у меня проблема, и мне нужна ваша помощь, пожалуйста.

У меня есть текстовый файл, содержащий такие данные:

   A             C             G    class     phylum       order
-0.000187   -0.219166   1.693306 Chordata   Monotremata   Mammalia  
0.015664    -0.264506   1.482692 Chordata   Batidoidimorpha   Chondrichthyes    
-0.404323   0.219374    2.230190 Platyhelminthes   Cyclophyllidea   Cestoda 

но, конечно, в нем много строк. Я хочу построить эти данные таким образом, чтобы все классы были нанесены на ось X, у каждого из них есть значения A, C и G, нанесенные как geom_point, и чтобы эти точки были связаны с помощью линии с определенным цвет в зависимости от A, C или G. Мне удалось сделать это с помощью функций plot и par, но теперь я хочу сделать это с помощью библиотеки ggplot.

Заранее спасибо.

Ответы [ 2 ]

10 голосов
/ 24 марта 2011

Специфика вашего вопроса немного неясна, но общий подход к построению нескольких переменных на одном графике с графикой ggplot заключается в melt() data.frame() сначала.Я не следил за тем, как точки и линии должны вписываться в ваш график, но вот подход, использующий параметр colour для построения столбцов A, C и G на class наось х:

library(ggplot2)
library(reshape2)

df <- data.frame(a = rnorm(10), c = rnorm(10), g = rnorm(10), class = sample(letters[20:23], 10, TRUE))
df.m <- melt(df)
ggplot(df.m, aes(class, value, colour = variable)) +
  geom_point()
0 голосов
/ 04 августа 2018

У меня была похожая проблема, которую я хотел построить.

Ответ таков: вам нужен столбец NEW , который можно установить как групповое взаимодействие.Здесь я создал столбец с именем V1, в котором указывается, к какой букве относится каждая буква, а затем используйте aes(group=interaction(variable.factor, new.factor).В этом примере столбец 'V1' является произвольным.

  class variable       value V1
1      u        a  0.77041380  a
2      v        a  0.09461429  a
3      t        a  0.22704242  a
4      w        a -0.21501380  a
5      w        a -0.48246983  a
6      v        a  1.69609897  a
7      w        a -0.38847860  a
8      t        a  2.45669883  a
9      t        a  0.24774451  a
10     u        a  0.04195110  a
11     u        c  0.57444553  c
12     v        c  0.73172047  c
13     t        c -1.59409421  c
14     w        c -0.12679464  c
15     w        c  0.19424856  c
16     v        c -1.28742724  c
17     w        c -1.12103626  c
18     t        c -0.57090558  c
19     t        c  0.53798077  c
20     u        c -0.47777022  c
21     u        g -0.91249913  g
22     v        g -1.49256508  g
23     t        g -1.77449710  g
24     w        g  0.71426647  g
25     w        g  0.79678361  g
26     v        g -1.28814106  g
27     w        g -1.04701972  g
28     t        g  0.07309817  g
29     t        g  2.03606615  g
30     u        g  1.76030312  g

слегка модифицирует приведенный выше код ggplot:

ggplot(df.m, aes(class, value, colour = variable, group = interaction(V1, variable))) +
  geom_point()+
  geom_line()

В результате получается строка, которая соединяет каждую букву через каждуюкласс (из приведенного выше ответа).(извините, низкий представитель, перейдите по ссылке)

буквы, соединенные линией

Если вы хотите разделить строки, используйте position=position_dodge()

ggplot(df.m, aes(class, value, colour = variable, group = interaction(V1, variable))) +
  geom_point(position = position_dodge(width = 0.2))+
  geom_line(position = position_dodge(width = 0.2))

буквы, соединенные линией с джиттером

Вывод здесь означает, что вам нужен коэффициент для group=interaction(), который отделен от вашей оси x и охватывает ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...