I'm looking for a way to connect my individual datapoints in my ggplot, so show that the data is a repeated measure of the same individual over time. Until now, I've managed to create a barplot with the individual geom_point (datapoint per subject) on top. I would however like to connect the dots matching to the same participant between the three timepoints. Any pointers?
## 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
You can try
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("")
According to your comment I recommend to switch completely to stat_summary
pd <- position_dodge(.9)
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)
Used ggplot2_3.1.0
I'm trying to do a similar plot but struggling! I have two repeated measures factors rather than a repeated measures and independent groups. So on my x-axis I have a before and after drug measure, with two boxplots for before (where colour is different for resting vs action) and two boxplot for after (resting vs action in different colours). I want to be able to show the trend per subject, where there is a data point for each of the 4 four plots.
The below gives me box plots with jitter-ed points per box plot, but I want a line connecting the points for individual subjects.
p <- ggplot(df, aes(x=Group, y=PLV, fill=Move)) +
geom_boxplot(outlier.size = -1) +
geom_point(df,mapping=aes(x=Group, y=PLV, fill=Move), position = position_jitterdodge 0.2)
df:
1 Before Rest 0.22238
2 Before Rest 0.21670
3 Before Rest 0.21443
4 Before Rest 0.22624
5 Before Move 0.22796
6 Before Move 0.22217
7 Before Move 0.21418
8 Before Move 0.21679
9 After Rest 0.36057
10 After Rest 0.26613
11 After Rest 0.27747
12 After Rest 0.32213
13 After Move 0.35226
14 After Move 0.27122
15 After Move 0.26650
16 After Move 0.28785
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.