Условно построить несколько переменных (сгруппированных данных) в l oop в R - PullRequest
0 голосов
/ 21 апреля 2020

Я видел несколько условных графиков, а также вопросы сгруппированных данных (например, здесь и здесь ), но моя проблема в другом. У меня есть следующие данные образца dat в моем R dataframe. Данные содержат пять столбцов, т.е. Grp (character), Var (integer) (неравные строки для каждой группы), Col1 (numeric), Col2 (numeric), Col3 (numeric).

Grp     Var    Col1  Col2    Col3
grp_1   8      46.8  50.0   50.6
grp_1   16     95.6  47.4   48.0
grp_1   24     45.1  45.6   46.4
grp_1   32     68.8  44.3   58.2
grp_1   40     44.6  52.2   44.3
grp_1   48     86.5  42.2   68.6
grp_2   40     63.2  95.6   63.0
grp_2   60     66.7  67.5   65.6
grp_2   80     69.6  70.7   67.9
grp_2   100    71.9  73.4   69.3
grp_2   120    73.8  75.7   48.0
grp_3   500    51.9  50.0   50.5
grp_3   1000   65.5  53.0   53.4
grp_3   5000   61.2  99.0   59.9
grp_3   10000  80.1  63.0   62.8
grp_3   30000  25.9  33.8   14.2

Для каждой группы я бы нравится строить столбцы Col1, Col2, Col3 (ось Y) относительно Var (ось X) и условно изменять заголовок оси X как «шаги», «номер1» и «номер2» для Var значений, соответствующих grp_1, grp_2 и grp_3. Я вижу соответствующий вопрос об условно изменяющихся метках для двух переменных здесь , но не могу найти для трех переменных. Мне нужно построить данные выше для нескольких групп (как на отдельных графиках, записанных на локальный диск, так и в сетке из 4 графиков), поэтому я ищу предложения по loop и / или function подходам. Кто-нибудь может подсказать, как этого можно достичь?

1 Ответ

1 голос
/ 21 апреля 2020

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

d <- read.table(text = 
  "Grp     Var    Col1  Col2    Col3
grp_1   8      46.8  50.0   50.6
grp_1   16     95.6  47.4   48.0
grp_1   24     45.1  45.6   46.4
grp_1   32     68.8  44.3   58.2
grp_1   40     44.6  52.2   44.3
grp_1   48     86.5  42.2   68.6
grp_2   40     63.2  95.6   63.0
grp_2   60     66.7  67.5   65.6
grp_2   80     69.6  70.7   67.9
grp_2   100    71.9  73.4   69.3
grp_2   120    73.8  75.7   48.0
grp_3   500    51.9  50.0   50.5
grp_3   1000   65.5  53.0   53.4
grp_3   5000   61.2  99.0   59.9
grp_3   10000  80.1  63.0   62.8
grp_3   30000  25.9  33.8   14.2
  ", header=T
)

library(ggplot2)
library(data.table)

d <- setDT(d)
dd <- melt(d, id.vars = c("Grp", "Var"), measure.vars = patterns(col="Col") )

ggplot(dd, aes(Var, value, color=variable)) + 
  geom_point() +
  facet_wrap(~Grp,
             scales = "free",
             labeller = as_labeller(c(grp_1 = "Step 1", grp_2 = "Step 2", grp_3 = "Step 3")  ),
             strip.position = "bottom") +
  xlab(NULL) +
  theme(strip.background = element_blank(),
        strip.placement = "outside")

enter image description here

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