'R ggplot: how to change background per group of data points?
UPD: I ended up using faceting data as @GordonShumway suggested and could reproduce the desired effect.
======================
I am trying to ggplot my data in a forest plot-like fashion, and I would like to add a background for groups of datapoints like here:
I know that for ggforest or survminer there are functions for this, but is there something like this in ggplot? If not background color, are there any ways to separate the categories of data?
Here is the code that reproduces my plot:
label <- c("C-terminal", "Inactivation gate", "N-terminus", "S1-S3", "S3-S4 linker", "S4", "S4-S5 linker", "S5",
"S5-S6 linker", "S6", "Unconserved linker",
"C-terminal", "Inactivation gate", "N-terminus", "S1-S3", "S3-S4 linker", "S4", "S4-S5 linker", "S5",
"S5-S6 linker", "S6", "Unconserved linker",
"C-terminal", "Inactivation gate", "N-terminus", "S1-S3", "S3-S4 linker", "S4", "S4-S5 linker", "S5",
"S5-S6 linker", "S6", "Unconserved linker",
"C-terminal", "Inactivation gate", "N-terminus", "S1-S3", "S3-S4 linker", "S4", "S4-S5 linker", "S5",
"S5-S6 linker", "S6", "Unconserved linker"
)
phenotype <- c("DS", "DS", "DS", "DS", "DS", "DS", "DS", "DS",
"DS", "DS", "DS",
"eDEE", "eDEE", "eDEE", "eDEE", "eDEE", "eDEE", "eDEE", "eDEE",
"eDEE", "eDEE", "eDEE",
"GEFSp", "GEFSp", "GEFSp", "GEFSp", "GEFSp", "GEFSp", "GEFSp", "GEFSp",
"GEFSp", "GEFSp", "GEFSp",
"HM", "HM", "HM", "HM", "HM", "HM", "HM", "HM",
"HM", "HM", "HM")
odds <- as.numeric(c("0.3847331", "1.1218567", "0.7011586", "1.2048013", "0.4799130", "2.1794015", "1.6336479", "1.6019002",
"3.1062446", "4.8326506", "0.2029079", "0.0000000",
"2.3899286", "0.0000000", "0.3641355", "0.0000000", "3.9357402", "0.0000000", "5.1269997",
"2.4349689", "0.0000000", "0.9392773", "0.6059535", "1.3119187",
"0.9347497", "1.1454902", "0.5393331", "1.8247280", "2.1722995", "2.1775909", "2.3831240",
"5.0178285", "0.1593788", "0.0000000", "14.6582596", "0.0000000",
"0.4421253", "0.0000000", "4.8406276", "8.1111606", "3.9470930", "0.0000000", "7.4429864", "0.1343254"))
lCI <- as.numeric(c("0.277568005", "0.621926336", "0.480384784", "0.938653693", "0.164801310", "1.391938191", "1.009118187",
"1.040073330", "2.480388200", "2.951950890", "0.157151171",
"0.000000000", "0.055082172", "0.000000000", "0.008651769", "0.000000000", "0.421730054", "0.000000000",
"0.914263782", "0.669334924", "0.000000000", "0.286774804",
"0.296884611", "0.326472332", "0.401513840", "0.651927445", "0.012710448", "0.665154352", "0.842968797",
"0.944153869", "1.506389805", "2.190553413", "0.073570664",
"0.000000000", "3.186118715", "0.000000000", "0.010382868", "0.000000000", "0.509813871", "1.399372224",
"0.418500986", "0.000000000", "0.768730012", "0.003168735"))
uCI <- as.numeric(c("0.5282010", "2.0308771", "1.0172689", "1.5474852", "1.2568157", "3.4731289", "2.6793281", "2.4911898",
"3.9037593", "8.2489699", "0.2601633", "1.3495566",
"16.4933450", "2.8762348", "2.3591293", "17.4014715", "17.9075121", "7.8283892", "19.2225415", "7.4175071",
"11.9679019", "2.7311742", "1.1344294", "3.8882872",
"1.9320901", "1.9289863", "3.5630593", "4.3289498", "4.9732189", "4.5882830", "3.7098054", "11.0053383",
"0.3085142", "1.6536415", "54.0260666", "3.5234297",
"2.9482601", "21.2689112", "22.8034852", "32.1967578", "18.3833219", "1.7913029", "36.2843119", "0.8897025"))
df <- data.frame(label,phenotype,odds)
df %>%
mutate(label = factor(label, levels = unique(label))) %>%
ggplot(aes(x = odds, y = label)) +
geom_vline(xintercept = 1, linetype = "dotted", color = "grey", size = 1.4) +
geom_point(aes(color = phenotype), size = 3,
position = position_dodge(width = 0.9))+
geom_text(aes(label=round(odds, 2), group = phenotype),
size=3, position = position_dodge(0.9), vjust = -0.2) +
theme_bw(base_size = 20) +
scale_color_manual(values = c("#AAE9E5","#87C7F1","#FEB7D3","#FFEDA9",
"#EACFFF","#A4DEAD"), name = "Phenotypes") +
scale_x_continuous(trans = "log10", breaks = c(0.01,0.1,1,10,100)) +
geom_errorbar(aes(xmin = lCI, xmax = uCI),
position = position_dodge2(0.7), width = 0.9) +
theme(legend.position = "bottom",
legend.text=element_text(size=8),
legend.title=element_text(size=8),
panel.border = element_blank(),
axis.text = element_text(color = "#303030", size = 8),
axis.ticks.x = element_line(color = "#303030", size = 1),
axis.ticks.y = element_blank(),
axis.title = element_text(color = "#303030", size = 10),
plot.title = element_text(color = "#303030", hjust = 0.5,
size = 14, face="bold"),
plot.subtitle = element_text(color="#2b5859",hjust = 0.5, size=10))+
labs(x = expression("Odds ratio (log"[10]*")"),
y = "Protein domain",
title = "Odds ratios",
colour="Legend"
)+
coord_cartesian(xlim = c(0.008,150))
Thank you for your help!
Solution 1:[1]
If you put np.random.seed(rs) before the shuffle line inside the loop, you will get the same results for every iteration. Because you put it before the iterations your program will always produce the same different sequences every time you start the program. The reason why you get different results per iteration is because every time you call the shuffle function, the seed changes, thus you have different randoms per iteration!
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | swaffelay |

