R: График означает два отдельных столбца с коэффициентом - PullRequest
2 голосов
/ 22 января 2020

У меня есть набор данных, подобный следующему:

structure(list(group = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L), .Label = c("action", "observation"), class = "factor"), 
    mag1 = structure(c(0.33, 0.83, 0.75, 0.65, 0.75, 0.67, 0.31, 
    0.73, 0.65, 0.73), label = c(mag1 = "mean accuracy Q1 pre-test"), class = c("labelled", 
    "numeric")), mag2 = structure(c(0.75, 0.9, 0.88, 0.65, 0.69, 
    0.69, 0.54, 0.46, 0.46, 0.6), label = c(mag2 = "mean accuracy Q1 post-test"), class = c("labelled", 
    "numeric"))), row.names = c(NA, 10L), class = "data.frame")

И я хочу сделать линейный график с панелью ошибок, чтобы показать средние значения столбцов "mag1" и "mag2", чтобы y было их средние значения и x - это имя столбца, которое выглядит следующим образом:

enter image description here

Как я могу это сделать?

Я пробовал ggplot2 и qplot, но я получил график mag1 по оси x и mag2 по оси y. Я не хочу, чтобы мои данные переставлялись, чтобы получить столбец группы, столбец, указывающий mag1 & 2, а затем среднее. В результате можно ли построить график, подобный приведенному выше графику, без изменения порядка данных?

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Предполагая, что ваш фрейм данных называется df:

head(df)
        group mag1 mag2
1      action 0.33 0.75
2 observation 0.83 0.90
3      action 0.75 0.88
4 observation 0.65 0.65
5      action 0.75 0.69
6 observation 0.67 0.69

Вам необходимо создать вектор для группы x, trace (другая строка строки) и значения y. Я не знаю, считается ли это перестановкой вашей матрицы. Кроме того, вам нужно указать, что является полосой ошибок, ниже она показывает 95% -й CI среднего значения в каждой группе:

library(sciplot)
X = rep(c("mag1","mag2"),each=nrow(df))
Y =  c(df$mag1,df$mag2)
grp = rep(df$group,2)
lineplot.CI(x.factor=X,group = grp,response =Y,
ylab="mean accuracy Q1 pre-test",xlab="")

Или просто:

lineplot.CI(x.factor=rep(c("mag1","mag2"),each=nrow(df)),
group = rep(a$group,2),response = c(df$mag1,df$mag2),
ylab="mean accuracy Q1 pre-test",xlab="")

enter image description here

0 голосов
/ 22 января 2020

Используя tidyverse, который содержит ggplot, вы можете сделать:

dat %>% 
gather(mag, vals, -group) %>% 
group_by(group, mag) %>% 
summarise(mean_vals = mean(vals), sd_vals = sd(vals)) %>% 
ungroup() %>% 
ggplot(aes(x = mag, y = mean_vals, group = group, fill = group, color = group)) + geom_line(stat = "identity") + 
geom_point(stat = "identity")+
geom_errorbar(aes(ymin = mean_vals - sd_vals, ymax = mean_vals + sd_vals), width = 0.05)

В результате график будет выглядеть так:

enter image description here

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