I have been trying to create a plot containing a comparison of "N1", "NON-N1" groups in a specific order. My data contains different groups called "A", "N1", "NON-N1", "Comb", and I am trying to show first the group with all called "A", then the groups "N1", "NON-N1" in a specific order, and finally the group called "Comb". I would like to show the "N1" versus (on top of) "NON-N1" in all comparisons but I have failed with everything I have tried. I was also hoping to separate these groups using facet_wrap but it seems that the function does not work with coord_flip(). But that is even secondary as I have not even been able to solve my first problem. I can reorder the data frame but the ggplot does not obey. Please help me understand how to solve this. Thank you!
library(ggplot2)
df = structure(list(CI1 = c(-3.2, -2, -2.1, -4.4, -2.0, -2.0, -4.4, -2.0, -4.6, -4.6, -0.5, 2.3, 2.0, -2.0, 1.2, 0.01, 2.0), OR = c(-2.2, 2, -2.1, -2.4, 0.04, 0.004, -2.4, 0.26, -2.6, -2.6, 0.24, 2.4, 2.5, 0.02, 1.5, 0.15, 2.4), CI2 = c(4.34247, 5.05772, 4.96875, 5.26578, 1.91331, 1.87162, 3.78027, 4.55967, 4.07937, 4.50965, 3.54538, 3.97742, 3.5491, 2.41067, 2.73239, 2.3767, 3.55664), Label = structure(1:17, .Label = c("N1_A", "NON-N1_A", "N1_B", "NON-N1_B", "N1_C", "NON-N1_C", "N1_D", "NON-N1_H", "N1_H", "NON-N1_D", "N1_E", "NON-N1_E", "N1_F", "NON-N1_F", "N1_G", "NON-N1_G", "Comb"), class = "factor"), group = c("N1", "NON-N1", "N1", "NON-N1", "N1", "NON-N1", "N1", "NON-N1", "N1", "NON-N1", "N1", "NON-N1", "N1", "NON-N1", "A", "A", "Comb")), .Names = c("CI1", "OR", "CI2", "Label", "group"), class = "data.frame", row.names = c(12L, 4L, 8L, 11L, 10L, 13L, 9L, 5L, 6L, 7L, 3L, 2L, 1L, 14L, 17L, 16L, 18L))
# order wanted using the column "Label":
ordered.names = c("N1_G", "NON-N1_G", "N1_C", "NON-N1_C", "N1_F", "NON-N1_F", "N1_A", "NON-N1_A","N1_B", "NON-N1_B","N1_H", "NON-N1_H","N1_D", "NON-N1_D","N1_E", "NON-N1_E", "Comb")
df$group = factor(df$group, levels =c("A", "N1", "NON-N1", "Comb"))
# df <- transform(df, category2 = factor(Label))
df$Label = factor(df$Label, levels=ordered.names)
# df = df[order(df$Label),]
# df$Label <- factor(rev(df$Label), levels=rev(levels(df$Label)))
ggplot(df, aes(x=Label, y=OR, ymin=CI1, ymax=CI2, group=group, color=group)) + geom_pointrange() + coord_flip()
# + facet_wrap(~group, scale="free_x")
Assuming your question is: How can you plot groups in a specific order (A, N1, NON-N1, Comb) from top to bottom.
First, helpful links:
The approach below uses both those links. First reorder your data according to group then Label (in descending order since you want Label displayed in reverse order (ie top to bottom after coord_flip()
). Second, new factor Label2 is ordered according to appearance in the data frame.
df2 <- df[with(df, rev(order(Label, factor(group, Label)))),] #Reverse reorder
df2$Label2 <- factor(df2$Label, as.character(df2$Label)) #Order of appearance
ggplot(df2, aes(x=Label2, y=OR, ymin=CI1, ymax=CI2, group=group, color=group)) +
geom_pointrange() + coord_flip()
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.