2

I would like to create a multiple dot plot + box plot + line plot with ggplot2. I'm able to crate a single one like this: enter image description here

But I would like to add dots and lines in this one: enter image description here

These are my data:

pz  val Time    var
1   5.62    Pre VC (L) - D **
2   5.86    Pre VC (L) - D **
3   3.14    Pre VC (L) - D **
4   2.27    Pre VC (L) - D **
5   0.94    Pre VC (L) - D **
8   2.91    Pre VC (L) - D **
9   1.01    Pre VC (L) - D **
10  2.98    Pre VC (L) - D **
1   5.69    Post    VC (L) - D **
2   6.22    Post    VC (L) - D **
3   3.29    Post    VC (L) - D **
4   2.21    Post    VC (L) - D **
5   0.85    Post    VC (L) - D **
8   3.28    Post    VC (L) - D **
9   1.28    Post    VC (L) - D **
10  3.13    Post    VC (L) - D **
1   4.44    Pre FEV1 (L) - D **
2   4.5 Pre FEV1 (L) - D **
3   2.51    Pre FEV1 (L) - D **
4   1.51    Pre FEV1 (L) - D **
5   0.84    Pre FEV1 (L) - D **
8   2.65    Pre FEV1 (L) - D **
9   0.85    Pre FEV1 (L) - D **
10  1.25    Pre FEV1 (L) - D **
1   4.55    Post    FEV1 (L) - D **
2   4.71    Post    FEV1 (L) - D **
3   2.56    Post    FEV1 (L) - D **
4   1.53    Post    FEV1 (L) - D **
5   0.76    Post    FEV1 (L) - D **
8   3.29    Post    FEV1 (L) - D **
9   0.99    Post    FEV1 (L) - D **
10  2.33    Post    FEV1 (L) - D **
1   0.85    Pre Creatinine (mg/dl) - E *
2   0.82    Pre Creatinine (mg/dl) - E *
3   0.59    Pre Creatinine (mg/dl) - E *
4   0.34    Pre Creatinine (mg/dl) - E *
5   0.46    Pre Creatinine (mg/dl) - E *
6   0.25    Pre Creatinine (mg/dl) - E *
7   0.5 Pre Creatinine (mg/dl) - E *
8   0.5 Pre Creatinine (mg/dl) - E *
9   0.4 Pre Creatinine (mg/dl) - E *
10  0.5 Pre Creatinine (mg/dl) - E *
11  0.6 Pre Creatinine (mg/dl) - E *
1   0.85    Post    Creatinine (mg/dl) - E *
2   0.88    Post    Creatinine (mg/dl) - E *
3   0.5 Post    Creatinine (mg/dl) - E *
4   0.33    Post    Creatinine (mg/dl) - E *
5   0.45    Post    Creatinine (mg/dl) - E *
6   0.27    Post    Creatinine (mg/dl) - E *
7   0.6 Post    Creatinine (mg/dl) - E *
8   0.5 Post    Creatinine (mg/dl) - E *
9   0.58    Post    Creatinine (mg/dl) - E *
10  0.64    Post    Creatinine (mg/dl) - E *
11  0.74    Post    Creatinine (mg/dl) - E *

This is the code for the first ploT.

d  <- read.csv("C:/Users/.../diet3.csv", sep=";")
d$group <- factor(d$group, levels=c("Pre", "Post"))
x <- ggplot(d, aes(y = val)) +
  geom_boxplot(aes(x = group, group = group), fill = 'grey') + 
  geom_point(aes(x = group), size = 5) +
  geom_line(aes(x = group), group = d$tie)+ 
  theme_bw() + 
  theme(panel.border = element_blank(), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        axis.line = element_line(colour = "black"))

x + scale_fill_grey(start=0.8, end=0.5) +
  labs(x="BMI", y="Values", fill="Time") + 
  theme_bw() + 
  theme(panel.border = element_blank(), 
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(), 
        axis.line = element_line(colour = "black"))

Here is the code for the second plot:

box10 <- read.csv("C:/Users/.../med1.csv", sep=";")
box10$Time <- factor(box10$Time, levels=c("Pre", "Post"))
box10$var <- factor(box10$var, 
                    levels=c("VC (L) - D **","FEV1 (L) - D **",
                             "Creatinine (mg/dl) - E *"))
p <- ggplot(box10, aes(x = box10$var, y = box10$val, fill = box10$Time)) +
  geom_boxplot() + 
  stat_boxplot(geom ='errorbar')

p + scale_fill_grey(start=0.8, end=0.5) +
  labs(x="Parameters", y="Values", fill="Time") + 
  theme_bw() + 
  theme(panel.border = element_blank(), 
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(), 
        axis.line = element_line(colour = "black"))

How can I fix this?

Thank you so much!

0

1 Answer 1

4

You can use facets to do this. Since the data in your code isn't easy to reproduce, I used the ChickWeight dataset included in R for this example. First, I edited the code you wrote for the single plot to facet the graph (here by Chick, in your data it would be var). Then, I made some theme edits to remove the appearance of facetting and make the figure look like a single plot (0 spacing, remove panel borders etc.).

require(ggplot2)
d <- ChickWeight #dataset included in R
d <- d[d$Time %in% c(10, 21),] #subset to get pre/post type data
d$group <- ifelse(d$Time == 10, "Pre", "Post")
d$group <- factor(d$group, levels = c("Pre", "Post"))

ggplot(d, aes(y = weight, x = group)) +
  geom_boxplot(aes(fill = group)) + 
  geom_point() +
  geom_line(aes(group = Chick))+ 
  theme_classic() +
  facet_grid(.~Diet) + #facet graph to get multiple groups of boxplots/lines/points
  #change theme elements so graph does not appear facetted
  theme(panel.border = element_blank(), #remove borders on facets
        panel.spacing = unit(0, "lines"), #remove spacing btween panels
        strip.background = element_rect(color = "white"))

enter image description here

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you so much, I modified a little the code and now it works great!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.