Как построить линию, соединяющую geom_points для повторных измерений в R? - PullRequest
0 голосов
/ 13 ноября 2018

Я ищу способ соединить мои отдельные точки данных в моем ggplot, так что покажите, что данные являются повторяющимся показателем того же самого человека с течением времени.До сих пор мне удавалось создать барплот с отдельной точкой geom_point (точка данных на тему).Однако я хотел бы соединить точки, соответствующие одному и тому же участнику, между тремя временными точками.Есть указатели?

  ## Example data, data from two groups: patients and controls
    data_ex <- data.frame( pnum = c(1,2,3,4,5,6,7,8,9,10),
                               group = c("patient", "patient","patient","patient","patient","control","control","control", "control", "control"),
                               age = c(24,35,43,34,55,24,36,43,34,54),
                               panas_1.1 = c(-26, -15, -17, -15, -20, -21, -18, -19, -16, -20),
                               panas_1.2 = c(-25, -19, -14, -18, -20, -22, -17, -19, -18, -19),
                               panas_1.3 = c(-22, -21, -18, -14, -21, -21, -14, -17, -16, -18))

    ## Reshape the data
        data_ex_long <- data_ex %>% gather(key = time, value = PANAS_score, panas_1.1, panas_1.2, panas_1.3)

    ## plot the data
        ggplot(data=data_ex_long,aes(x = time, y = PANAS_score, fill = group)) +  
            geom_bar(stat = "summary",fun.y = 'mean', colour="black", size=1.8, position = position_dodge(width = 1)) +
          geom_point(aes(time, fill = group), colour="black", size = 3, shape = 21, position = 
                       position_jitterdodge(jitter.width = 0.2, jitter.height=0.4, 
                                            dodge.width=0.9), alpha = 0.8) +
          geom_errorbar(aes(size=2),stat = 'summary', position = 'dodge', color = "black", width = 1, size = 1, fatten = 2) +
          theme(text = element_text(size = 18),
                legend.position = "none",
                axis.text.x  = element_text(size=15, color="#000000"),     
                axis.text.y  = element_text(size=20, color="#000000"),       
                axis.title.x = element_blank(),  
                axis.title.y = element_text(size=18, color="#000000"),
                axis.line.x  = element_line(colour = "black", size = 1.3), 
                axis.line.y  = element_line(colour = "black", size = 1.3),
                panel.border = element_blank(),
                panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
                panel.grid.minor.x = element_blank(), panel.grid.major.x = element_blank(),
                panel.background = element_blank(),
                axis.ticks.length = unit(.25, "cm"),
                axis.line = element_line()) +
          ylab(" PANAS score ") + 
          NULL

enter image description here

1 Ответ

0 голосов
/ 13 ноября 2018

Вы можете попробовать

pd <- position_dodge(0.8)
ggplot(data=data_ex_long,aes(x = time, y = PANAS_score, fill = factor(group, levels = c("patient", "control")))) +  
  geom_bar(stat = "summary",fun.y = 'mean', color=1, position = "dodge") +
  geom_point(aes(group=pnum),position = pd, shape =21) +
  geom_line(aes(group=pnum),position = pd) + 
  geom_errorbar(stat = 'summary', position = "dodge") +
  scale_fill_discrete("")

enter image description here

В соответствии с вашим комментарием я рекомендую полностью перейти на stat_summary

pd<- position_dodge (.9) </p>

data_ex_long$group <- factor(data_ex_long$group, levels = c("patient", "control"))
ggplot(data=data_ex_long,aes(x = time, y = PANAS_score, fill = group)) +  
  stat_summary(fun.y = "mean", geom = "bar",position = pd) + 
  stat_summary(aes(group = group), 
               fun.y = "mean", geom = "line",position = pd, size= 1.5 ) + 
  stat_summary(fun.data = mean_se, geom = "errorbar",position = pd, width = 0.3) + 
  geom_point(aes(group=pnum),position = pd, shape =21)

enter image description here

Используется ggplot2_3.1.0

...