R get linear regression equation for boxplots - r

I didn´t found a sufficient answer in this forum yet, so I decided to raise my own question.
I want to get the linear regression equation of a linear fit from a boxplot. I have this data:
library(ggplot2)
data <- structure(list(x = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L
), .Label = c("1", "2", "3", "4", "5", "6"), class = "factor"),
y = c(169, 79.5, 78.5, 75, 99.5, 68, 14, 30.5, 107.5, 51,
43, 33, 21.5, 35, 11, 1, 38, 54.5, 26.5, 143, 158, 171, 31.5,
67.5, 1, 57.5, 12, 36.5, 1, 23.5, 22.5, 71, 141, 218, 7.5,
1, 129, 144.5, 76, 46.5, 75.5, 45, 12, 24, 67, 65.5, 44.5,
37.5, 25.5, 19, 15, 1, 17.5, 50, 22.5, 90, 226, 220, 32,
69.5, 1, 79.5, 7, 44, 1, 15.5, 22, 75.5, 178, 153, 4.5, 1,
159, 89, 57, 71, 98.5, 47.5, 18.5, 30, 119, 57.5, 41, 33.5,
30, 31, 10, 1, 12, 43.5, 20.5, 98, 146.5, 145, 34, 64.5,
1, 40.5, 17, 41, 1, 14.5, 16.5, 71, 181, 168, 2, 1, 159,
103, 69, 65.5, 97.5, 37.5, 21, 15.5, 120.5, 46, 27, 29.5,
16.5, 20, 7.5, 1, 15.5, 42.5, 21.5, 111, 102.5, 124, 20.5,
51.5, 1, 22.5, 15, 42, 1, 13, 13.5, 64.5, 138, 155, 4.9,
1, 190, 89.5, 74.5, 79, 78, 59.5, 19.5, 21, 88.5, 44, 18,
19, 10, 13, 4, 1, 9.5, 44, 17, 140.5, 98, 112.5, 29.5, 62.56,
1, 31, 11.5, 49.5, 1, 10, 8.5, 40.5, 121, 141, 2.5, 1, 170,
87.5, 92, 77, 65, 34, 8, 26, 98, 51.5, 26, 19, 9, 8.5, 7.5,
1, 4.5, 0, 15.5, 80, 69, 59, 28, 44.5, 1, 38.5, 10, 51.5,
1, 3, 5, 65, 107, 152, 5, 1)), row.names = c(NA, -216L), class = "data.frame")
p <- ggplot(data = data) +
aes(x = x,
y = y) +
geom_boxplot(outlier.shape = NA) + geom_jitter(shape = 1, position = position_jitter(0.1)) +
ylim(0, NA) +
theme_light() +
geom_smooth(method = "lm",se = TRUE, formula = y ~ x, aes(group = 1))
print(p)
fit <- lm(y ~ x, data = data)
fit
which results in this output:
How can I extract the regression equation for this dataset? The function fit <- lm(y ~ x, data = data) just gives me one intercept and 5 coefficients, which is not my desired output. I want a simple regression equation in the form of y = a + bx.
How can I put this equation into the diagramm? I´ve already looked into ggpmisc::stat_poly_eq(), but this doesn´t seem to work with boxplot linear regression.
Can you guys help me out?

Related

putting segments on a plot with multiple plots and y variables

Is there a way to put arrows on a plot with multiple plots with different y axes? I would like to put arrows across the time series on the same x axis locations but different y locations. I cant just use "annotate("segment", x = 37, xend = 84, y = 0.0, yend = 0.0,colour = "black", size = 1, arrow = arrow(ends='both'))" because then it puts them at 0 on the y axis for all variables when I actually want to just put the arrows at the bottom of the y axis which is different for every variable.
Current code:
fin_plot <- ggplot(melted_data, aes(x = `Distance`, y = value, group = variable)) + geom_line() + theme_bw() + labs(y="", x= "") + theme_classic() + theme(text=element_text(size=16, family="serif", face = "bold", color = "black")) +
facet_wrap(variable~., scales = "free_y",ncol=2) +
scale_x_continuous(limits = c(0, 250),labels = scales::number_format(accuracy = 1)) + theme(axis.line = element_line(colour = 'black', size = 1)) +
theme(axis.ticks = element_line(colour = "black", size = 1)) + scale_y_continuous(labels = scales::number_format(accuracy = 0.1))+ theme(axis.ticks.length = unit(.3, "cm")) + coord_capped_cart(bottom='right', left='none', gap = 0.15) + geom_vline(xintercept=c(58, 132, 204, 250, 309), linetype='dashed', col = 'black')
Current output
desired output
data:
melted_data <- structure(list(Distance = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
145, 146, 147, 148, 149, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
146, 147, 148, 149, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
147, 148, 149, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
148, 149, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
148, 149), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L), .Label = c("Mg", "Mn", "Zn", "Ba", "All"), class = "factor"),
value = c(0.903247645, 0.912560748, 0.896003508, 0.909572697,
0.883631829, 0.905722594, 0.892465355, 0.909271173, 0.880506202,
0.889278401, 0.878534542, 0.959209459, 0.913303825, 0.929893977,
0.97778374, 0.9885554, 0.929716333, 1.028422583, 1.025638955,
1.011352651, 1.041343955, 1.092562951, 1.129761801, 1.088857171,
1.107257284, 1.116728405, 1.103053734, 1.041662037, 1.134182243,
1.104550315, 1.086952767, 1.106004784, 1.057688595, 1.034347579,
1.04641385, 1.139270945, 1.048446018, 1.033827731, 1.075554754,
1.029893202, 1.074749532, 1.001626205, 0.977053541, 0.987467665,
0.999540478, 0.945184816, 0.959677178, 0.962807712, 0.967023936,
1.024286493, 0.881264816, 0.967181342, 1.000316876, 0.956168258,
1.003214572, 1.00047837, 0.940103474, 0.929875987, 0.928227112,
0.982410241, 0.983035162, 0.976666772, 1.019755049, 1.075189042,
0.975380543, 0.981316782, 0.986876269, 1.026690916, 1.052379934,
1.001547298, 0.979888683, 1.008209647, 0.976098272, 0.944479556,
0.996767684, 1.018077758, 1.028862706, 1.08510417, 1.08963868,
1.048481179, 1.139954126, 1.107066353, 1.122920581, 1.23904326,
1.19449336, 1.179971969, 1.165865352, 1.068804094, 1.099436469,
1.073307737, 1.07045113, 1.101007051, 1.011962649, 1.11202545,
1.097883672, 1.05361424, 0.993283703, 1.046635444, 1.04951188,
1.055736151, 1.063705172, 0.977095039, 1.015650848, 1.029367222,
1.003814349, 0.973376993, 1.021665177, 0.925511352, 1.014703757,
0.933654542, 1.027336075, 0.961163947, 1.022921765, 0.910164297,
0.937410814, 0.935246588, 0.925900983, 0.934477753, 0.927973832,
0.946372309, 0.950554394, 0.9386026, 1.000712639, 0.947846812,
0.953585987, 0.967735737, 0.927914753, 0.943303715, 0.935435884,
0.987648375, 0.902379461, 0.939086878, 1.018529942, 0.973874968,
0.974093087, 0.984149676, 0.948669001, 0.934863295, 1.011232041,
0.942884239, 0.978044788, 1.023700208, 1.011714275, 0.999153709,
1.06822476, 0.967735328, 1.131133479, 1.011068503, 1.034903609,
0.086720869, 0.113119382, 0.088197332, 0.081547788, 0.079373211,
0.07888827, 0.072865285, 0.079637996, 0.066314774, 0.097585729,
0.185034982, 0.214466904, 0.294317625, 0.481389256, 0.531196058,
0.715842439, 0.865098887, 0.987242052, 1.081028291, 1.240920518,
1.313524957, 1.543771699, 1.78495042, 1.746572555, 2.048760527,
2.101438775, 1.967474033, 2.000286925, 2.014020838, 1.924470659,
1.75696549, 1.786681246, 1.633290961, 1.455799758, 1.315346538,
1.435348984, 1.27887702, 1.152818928, 1.095127218, 0.987502349,
1.062278922, 0.898540082, 0.83617998, 0.889057689, 0.825563648,
0.788347646, 0.790973555, 0.775541228, 0.815063004, 0.848723108,
0.66783059, 0.672629631, 0.747809615, 0.72338158, 0.666220438,
0.664051795, 0.597260657, 0.689282162, 0.663808452, 0.678551141,
0.672917354, 0.686199986, 0.724202364, 0.746195474, 0.686135659,
0.654148537, 0.713488795, 0.72446665, 0.699529989, 0.630120423,
0.661767463, 0.663290351, 0.705879842, 0.709399338, 0.76228353,
0.714368918, 0.720561695, 0.837036666, 0.923882149, 1.014163852,
1.221410703, 1.315825246, 1.368054705, 1.641746627, 1.630198312,
1.698589629, 1.562956393, 1.427322658, 1.53964983, 1.574583495,
1.527101216, 1.380123116, 1.28649445, 1.29251968, 1.330565441,
1.317758525, 1.19292313, 1.217953538, 1.218591815, 1.163372928,
1.091026791, 0.878691182, 0.903966928, 0.917620557, 0.838430901,
0.825709255, 0.839298558, 0.76309434, 0.97617394, 0.739885015,
0.822159341, 0.785335779, 0.771926988, 0.766619321, 0.832448556,
0.733734124, 0.787221188, 0.685452005, 0.740552711, 0.707414697,
0.781271754, 0.72652958, 0.729470139, 0.71649368, 0.681176551,
0.683977986, 0.711079301, 0.681092777, 0.747615639, 0.700953146,
0.692246657, 0.673560118, 0.820384633, 0.740567172, 0.72070082,
0.795192662, 0.773897168, 0.74552279, 0.735710787, 0.768825863,
0.746016457, 0.736542042, 0.744507532, 0.784312542, 0.758393534,
0.7600356, 0.797384742, 0.773626898, 0.744557896, 0.746612627,
0.818368055, 0.696689824, 0.748702805, 0.717457681, 0.766243608,
0.805305259, 0.855909762, 0.803357905, 0.889646097, 0.854456208,
1.067795473, 1.051422575, 1.17061972, 1.138440648, 1.052796919,
1.040998633, 1.161739158, 1.025956799, 0.971567748, 1.072911493,
0.952121155, 1.040392714, 1.069745522, 1.068549198, 1.090194087,
1.214584829, 1.157485471, 1.245813376, 1.336359991, 1.204038397,
1.126255292, 1.131057736, 0.922042386, 1.037566449, 1.100852394,
1.121842367, 0.998657748, 1.006938923, 1.002800377, 0.897387497,
0.93902937, 0.889327622, 0.802133735, 0.855245047, 0.860702407,
0.704324249, 0.905827093, 0.760155095, 0.760247698, 0.655991619,
0.677006743, 0.668001976, 0.623410532, 0.569302474, 0.523713794,
0.690042836, 0.539115342, 0.528696218, 0.57851915, 0.60294784,
0.581392042, 0.65277069, 0.65620614, 0.625397246, 0.697647782,
0.6180657, 0.632326126, 0.684659215, 0.606197513, 0.630134281,
0.637151517, 0.574538208, 0.605993607, 0.533522181, 0.544522236,
0.577535469, 0.573427383, 0.672984155, 0.735286828, 0.7532343,
0.881292245, 0.801132661, 1.122761046, 1.137397845, 1.173190388,
1.138033979, 1.126494557, 1.144871399, 1.087042815, 0.981750792,
0.992888445, 0.955352455, 1.074357698, 1.027127808, 1.083248059,
1.010304962, 1.037776316, 1.052809984, 0.959161909, 0.939369893,
0.932304641, 0.912110856, 1.035278327, 0.825391661, 0.883818816,
0.880397247, 0.775385156, 0.860535004, 0.75878312, 0.764243502,
0.788209749, 0.736029937, 0.746966542, 0.762295984, 0.804665042,
0.797845669, 0.744225613, 0.846139103, 0.806957411, 0.789078125,
0.912631032, 0.926629248, 0.807376002, 0.795165332, 0.776764645,
0.811532921, 0.740169463, 0.707007363, 0.764252403, 0.754265833,
0.656183602, 0.78602999, 0.734580057, 0.756587437, 0.750509131,
0.727536118, 0.676232276, 0.714439923, 0.720668076, 0.763533465,
0.60234143, 0.651920197, 0.744086872, 0.633919728, 0.615213712,
0.705944962, 0.667362984, 0.742636421, 0.742734852, 0.839492568,
0.743899849, 0.817080816, 0.773569657, 0.735728339, 0.715168283,
0.78077814, 0.694280484, 0.773303425, 0.768041196, 0.883401699,
0.818274274, 0.715927964, 0.696938222, 0.832246446, 0.73089346,
0.790965216, 0.799717389, 0.865896893, 0.946771069, 0.954212275,
1.023740345, 1.027036123, 1.086336263, 1.064542815, 0.9463809,
0.924081609, 0.999832641, 0.911277648, 0.922871168, 0.953134033,
0.786732115, 0.802026729, 0.832863371, 0.863952475, 0.817833153,
0.748586924, 0.72095701, 0.738213943, 0.672736744, 0.704947698,
0.531743532, 0.634123809, 0.683548549, 0.733277161, 0.608993729,
0.752162246, 0.568705823, 0.643172511, 0.597251486, 0.655514695,
0.583437677, 0.557676441, 0.646713866, 0.527005047, 0.578023512,
0.576281064, 0.600923204, 0.578475648, 0.551957027, 0.585007991,
0.623858699, 0.630936819, 0.636198589, 0.565476603, 0.658861425,
0.577557604, 0.629178306, 0.646092809, 0.566079299, 0.60953767,
0.680135261, 0.500802233, 0.704656678, 0.61109605, 0.645344144,
0.667139888, 0.734969576, 0.780062983, 0.783090234, 0.83005691,
0.905356723, 0.933746319, 0.947613375, 0.923115827, 0.873482691,
0.746883952, 0.850273618, 0.795256154, 0.800825928, 0.772630039,
0.749567395, 0.7823457, 0.772609842, 0.736269985, 0.699705666,
0.716860238, 0.65909369, 0.806743181, 0.604632102, 0.629103485,
0.669824708, 0.545219042, 0.605081484, 0.545598194, 0.612458887,
0.640840679, 0.568115521, 0.578270006, 0.642784637, 0.486235168,
0.608704086, 0.449107996, 0.603056279, 0.573624703, 0.527880861,
0.479058818, 0.608581986, 0.497792884, 0.736359035, 0.560758315,
0.59150912, 0.491623628, 0.646548159, 0.559243084, 0.554057512,
0.542344646, 0.583808567, 0.623315676, 0.521008383, 0.511710892,
0.633820855, 0.529775704, 0.590383598, 0.500021436, 0.602344336,
0.499887402, 0.534870849, 0.583225149, 0.623554367, 0.62596102,
0.585378422, 0.648988779, 0.577416685, 0.632021029, 0.644454559,
0.684966009, 0.595845502, 2.479315993, 2.683540753, 2.424790513,
2.556904106, 2.454032378, 2.486582811, 2.485804182, 2.625597071,
2.444459365, 2.649813652, 2.686066928, 3.124873535, 3.077318299,
3.297830917, 3.344358668, 3.589441204, 3.566707313, 3.968369009,
3.932341434, 4.08973781, 4.374551474, 4.54266808, 4.97884528,
4.932211371, 5.310903272, 5.372904082, 5.231493496, 5.123516042,
5.393849098, 5.276658613, 4.970827822, 4.972075355, 4.608769407,
4.214216452, 4.232190208, 4.539424798, 4.266998558, 3.933891331,
3.898577905, 3.758409871, 3.707152695, 3.544143355, 3.234304675,
3.312782898, 3.363897722, 3.32751203, 3.063968711, 3.396338279,
3.110947858, 3.27642981, 2.802338511, 2.972332411, 2.999566144,
2.860636811, 2.88545135, 2.715249006, 2.805430479, 2.734554555,
2.721654986, 2.81795618, 2.810857383, 2.829266791, 3.020586802,
3.108527475, 2.923112037, 2.898589704, 2.977292189, 2.961041296,
3.065747444, 2.883958043, 2.837869726, 2.918189185, 2.936651583,
2.760674734, 2.997230073, 2.888064962, 2.972304014, 3.162708107,
3.42147456, 3.577994842, 3.897689363, 4.134240754, 4.19746467,
4.937297252, 4.909702892, 4.974867813, 4.740338415, 4.369505261,
4.634231316, 4.530190201, 4.380129066, 4.246648651, 4.003376949,
4.261248528, 4.228186763, 4.190890809, 3.896217461, 4.019225536,
3.980007369, 3.985014169, 3.698733958, 3.417194347, 3.50155334,
3.527485148, 3.272718395, 3.228503258, 3.353819869, 3.104831527,
3.419528222, 3.010592683, 3.256523555, 3.020944643, 3.139582776,
2.872858156, 3.135211633, 3.047270457, 3.038848701, 2.843214189,
3.123247632, 2.958537301, 3.257263308, 3.138521527, 3.248321146,
2.963340122, 3.076476029, 2.987721452, 3.004584487, 2.906910601,
2.973867453, 3.0761696, 2.869900334, 2.78054149, 3.25876542,
2.978797901, 3.041764942, 3.029872905, 3.052446623, 2.856505763,
2.9962536, 3.015603327, 3.111149077, 2.9885447, 2.993520426,
3.176541902, 3.037954707, 2.975005669, 3.278917742, 3.137024394,
3.117943428)), row.names = c(NA, -745L), class = "data.frame")
Use geom_segment - this allows you to make use of the faceting variable. You will then want to pass a data frame with the respective x/xend/y/yend.
library(dplyr)
## create a data frame first for the segments
## it makes sense to use the mininimum of your y for each facet
annot_df <- melted_data %>%
group_by(variable) %>%
summarise(y = min(value), yend = min(value), x = 25, xend = 75)
ggplot(melted_data, aes(x = Distance, y = value, group = variable)) +
geom_line() +
## now use the new data frame for geom_segment
geom_segment(data = annot_df, aes(x = x, xend = xend, y = y, yend = yend),
arrow = arrow(ends = "both", length = unit(5, "pt"))) +
facet_wrap(variable~., scales = "free_y",ncol=2)
Created on 2022-07-14 by the reprex package (v2.0.1)

Plotting multiple variables in time series with greyscale and shapes [duplicate]

This question already has answers here:
Changing the line type in the ggplot legend
(2 answers)
ggplot2 for grayscale printouts
(3 answers)
Closed 7 months ago.
I am trying to make a time-series graph with multiple y values. I would like to change the shape of the different variables so some are solid, some are dashed etc. I would also like all the colors to be on greyscale.
Does anyone know how I can accomplish this?
I know how to melt my data so that I can plot them all together by the value of the variables but right now I cannot get the shapes to change or the greyscale. Thank you in advance.
ggplot(melted_data, aes(x = Distance, y = value, color = variable)) + geom_line()
data <- structure(list(Distance = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
92, 93, 94, 95, 96, 97, 98, 99, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
91, 92, 93, 94, 95, 96, 97, 98, 99, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99), variable = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("Mg",
"Mn", "Zn", "Ba"), class = "factor"), value = c(0.903247645,
0.912560748, 0.896003508, 0.909572697, 0.883631829, 0.905722594,
0.892465355, 0.909271173, 0.880506202, 0.889278401, 0.878534542,
0.959209459, 0.913303825, 0.929893977, 0.97778374, 0.9885554,
0.929716333, 1.028422583, 1.025638955, 1.011352651, 1.041343955,
1.092562951, 1.129761801, 1.088857171, 1.107257284, 1.116728405,
1.103053734, 1.041662037, 1.134182243, 1.104550315, 1.086952767,
1.106004784, 1.057688595, 1.034347579, 1.04641385, 1.139270945,
1.048446018, 1.033827731, 1.075554754, 1.029893202, 1.074749532,
1.001626205, 0.977053541, 0.987467665, 0.999540478, 0.945184816,
0.959677178, 0.962807712, 0.967023936, 1.024286493, 0.881264816,
0.967181342, 1.000316876, 0.956168258, 1.003214572, 1.00047837,
0.940103474, 0.929875987, 0.928227112, 0.982410241, 0.983035162,
0.976666772, 1.019755049, 1.075189042, 0.975380543, 0.981316782,
0.986876269, 1.026690916, 1.052379934, 1.001547298, 0.979888683,
1.008209647, 0.976098272, 0.944479556, 0.996767684, 1.018077758,
1.028862706, 1.08510417, 1.08963868, 1.048481179, 1.139954126,
1.107066353, 1.122920581, 1.23904326, 1.19449336, 1.179971969,
1.165865352, 1.068804094, 1.099436469, 1.073307737, 1.07045113,
1.101007051, 1.011962649, 1.11202545, 1.097883672, 1.05361424,
0.993283703, 1.046635444, 1.04951188, 0.086720869, 0.113119382,
0.088197332, 0.081547788, 0.079373211, 0.07888827, 0.072865285,
0.079637996, 0.066314774, 0.097585729, 0.185034982, 0.214466904,
0.294317625, 0.481389256, 0.531196058, 0.715842439, 0.865098887,
0.987242052, 1.081028291, 1.240920518, 1.313524957, 1.543771699,
1.78495042, 1.746572555, 2.048760527, 2.101438775, 1.967474033,
2.000286925, 2.014020838, 1.924470659, 1.75696549, 1.786681246,
1.633290961, 1.455799758, 1.315346538, 1.435348984, 1.27887702,
1.152818928, 1.095127218, 0.987502349, 1.062278922, 0.898540082,
0.83617998, 0.889057689, 0.825563648, 0.788347646, 0.790973555,
0.775541228, 0.815063004, 0.848723108, 0.66783059, 0.672629631,
0.747809615, 0.72338158, 0.666220438, 0.664051795, 0.597260657,
0.689282162, 0.663808452, 0.678551141, 0.672917354, 0.686199986,
0.724202364, 0.746195474, 0.686135659, 0.654148537, 0.713488795,
0.72446665, 0.699529989, 0.630120423, 0.661767463, 0.663290351,
0.705879842, 0.709399338, 0.76228353, 0.714368918, 0.720561695,
0.837036666, 0.923882149, 1.014163852, 1.221410703, 1.315825246,
1.368054705, 1.641746627, 1.630198312, 1.698589629, 1.562956393,
1.427322658, 1.53964983, 1.574583495, 1.527101216, 1.380123116,
1.28649445, 1.29251968, 1.330565441, 1.317758525, 1.19292313,
1.217953538, 1.218591815, 0.746612627, 0.818368055, 0.696689824,
0.748702805, 0.717457681, 0.766243608, 0.805305259, 0.855909762,
0.803357905, 0.889646097, 0.854456208, 1.067795473, 1.051422575,
1.17061972, 1.138440648, 1.052796919, 1.040998633, 1.161739158,
1.025956799, 0.971567748, 1.072911493, 0.952121155, 1.040392714,
1.069745522, 1.068549198, 1.090194087, 1.214584829, 1.157485471,
1.245813376, 1.336359991, 1.204038397, 1.126255292, 1.131057736,
0.922042386, 1.037566449, 1.100852394, 1.121842367, 0.998657748,
1.006938923, 1.002800377, 0.897387497, 0.93902937, 0.889327622,
0.802133735, 0.855245047, 0.860702407, 0.704324249, 0.905827093,
0.760155095, 0.760247698, 0.655991619, 0.677006743, 0.668001976,
0.623410532, 0.569302474, 0.523713794, 0.690042836, 0.539115342,
0.528696218, 0.57851915, 0.60294784, 0.581392042, 0.65277069,
0.65620614, 0.625397246, 0.697647782, 0.6180657, 0.632326126,
0.684659215, 0.606197513, 0.630134281, 0.637151517, 0.574538208,
0.605993607, 0.533522181, 0.544522236, 0.577535469, 0.573427383,
0.672984155, 0.735286828, 0.7532343, 0.881292245, 0.801132661,
1.122761046, 1.137397845, 1.173190388, 1.138033979, 1.126494557,
1.144871399, 1.087042815, 0.981750792, 0.992888445, 0.955352455,
1.074357698, 1.027127808, 1.083248059, 1.010304962, 1.037776316,
1.052809984, 0.742734852, 0.839492568, 0.743899849, 0.817080816,
0.773569657, 0.735728339, 0.715168283, 0.78077814, 0.694280484,
0.773303425, 0.768041196, 0.883401699, 0.818274274, 0.715927964,
0.696938222, 0.832246446, 0.73089346, 0.790965216, 0.799717389,
0.865896893, 0.946771069, 0.954212275, 1.023740345, 1.027036123,
1.086336263, 1.064542815, 0.9463809, 0.924081609, 0.999832641,
0.911277648, 0.922871168, 0.953134033, 0.786732115, 0.802026729,
0.832863371, 0.863952475, 0.817833153, 0.748586924, 0.72095701,
0.738213943, 0.672736744, 0.704947698, 0.531743532, 0.634123809,
0.683548549, 0.733277161, 0.608993729, 0.752162246, 0.568705823,
0.643172511, 0.597251486, 0.655514695, 0.583437677, 0.557676441,
0.646713866, 0.527005047, 0.578023512, 0.576281064, 0.600923204,
0.578475648, 0.551957027, 0.585007991, 0.623858699, 0.630936819,
0.636198589, 0.565476603, 0.658861425, 0.577557604, 0.629178306,
0.646092809, 0.566079299, 0.60953767, 0.680135261, 0.500802233,
0.704656678, 0.61109605, 0.645344144, 0.667139888, 0.734969576,
0.780062983, 0.783090234, 0.83005691, 0.905356723, 0.933746319,
0.947613375, 0.923115827, 0.873482691, 0.746883952, 0.850273618,
0.795256154, 0.800825928, 0.772630039, 0.749567395, 0.7823457,
0.772609842, 0.736269985, 0.699705666, 0.716860238, 0.65909369
)), row.names = c(NA, -396L), class = "data.frame")
You can use the linetype parameter with the aestethics :
ggplot(data) +
geom_line(aes(x = Distance, y = value, color = variable, linetype = variable))

ggplot2 - Survival Swimmer Plot Not Displaying Sorted Values

Using this question I've been assembling a customized Swimmer Plot, but despite my having sorted the patients by Therapy.Length, when I try to plot it the second half of the bars often come out much longer than they should be - putting the graph out of order.
I've checked and the symbols are in the correct place even when the bar is too long, so somehow the bar lengths are getting extended. By commenting out scale_y_continuous chunk, I'm able to get the proper length on the bars, but then all of the symbol placement is compressed.
ggplot(dat,
aes(Patient.ID, Therapy.Length)) +
geom_bar(stat="identity", aes(fill=factor(Disease.Stage)), width=0.7) +
geom_point(data=dat, aes(Patient.ID, value, colour=variable, shape=variable), size=4) +
geom_segment(data=dat %>% filter(Continued == 1),
aes(x=Patient.ID, xend=Patient.ID, y=Therapy.Length + 0.1, yend=Therapy.Length + 20),
arrow=arrow(type="closed", length=unit(0.13,"in"))) +
coord_flip() +
scale_fill_manual(values=hcl(seq(15,375,length.out=5)[1:4],100,70)) +
scale_colour_manual(values=c(hcl(seq(15,375,length.out=3)[1:2],100,40),c("black","darkgreen"))) +
scale_y_continuous(limits=c(-1,max(dat$Therapy.Length)), breaks=seq(0,max(dat$Therapy.Length),30)) +
labs(fill="Disease Stage", colour="", shape="", x="Subject Received Study Drug")
+ theme_bw() +
theme(panel.grid.minor=element_blank(),panel.grid.major=element_blank(),
axis.text.y=element_blank(),axis.ticks.y=element_blank())
Here's the rest of the code: [x]
ANSWER:
dat had originally been melted – changed dat to be unmelted (and created dat.m to be the melted version), and supplied dat.mto geom_point and geom_segment for adding points to bars.
data:
structure(list(Patient.ID = structure(c(1L, 2L, 3L, 4L, 5L, 6L,
7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 1L, 2L, 3L, 4L, 5L,
6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 1L, 2L, 3L, 4L,
5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 1L, 2L, 3L,
4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L), .Label = c("13",
"5", "14", "11", "6", "2", "7", "12", "3", "8", "1", "10", "4",
"15", "9"), class = "factor"), Disease.Stage = c(1L, 2L, 4L,
1L, 2L, 3L, 1L, 1L, 3L, 2L, 1L, 1L, 3L, 2L, 3L, 1L, 2L, 4L, 1L,
2L, 3L, 1L, 1L, 3L, 2L, 1L, 1L, 3L, 2L, 3L, 1L, 2L, 4L, 1L, 2L,
3L, 1L, 1L, 3L, 2L, 1L, 1L, 3L, 2L, 3L, 1L, 2L, 4L, 1L, 2L, 3L,
1L, 1L, 3L, 2L, 1L, 1L, 3L, 2L, 3L), Response.Start = c(15, 40,
51, 26, 36, 26, 32, 43, 67, 80, 93, 105, 160, 34, 94, 15, 40,
51, 26, 36, 26, 32, 43, 67, 80, 93, 105, 160, 34, 94, 15, 40,
51, 26, 36, 26, 32, 43, 67, 80, 93, 105, 160, 34, 94, 15, 40,
51, 26, 36, 26, 32, 43, 67, 80, 93, 105, 160, 34, 94), Therapy.Length = c(74,
84, 84, 108, 128, 185, 194, 198, 257, 274, 293, 311, 325, 336,
357, 74, 84, 84, 108, 128, 185, 194, 198, 257, 274, 293, 311,
325, 336, 357, 74, 84, 84, 108, 128, 185, 194, 198, 257, 274,
293, 311, 325, 336, 357, 74, 84, 84, 108, 128, 185, 194, 198,
257, 274, 293, 311, 325, 336, 357), Continued = c(1, 1, 1, NA,
1, NA, 1, NA, 1, NA, 1, NA, 1, NA, 1, 1, 1, 1, NA, 1, NA, 1,
NA, 1, NA, 1, NA, 1, NA, 1, 1, 1, 1, NA, 1, NA, 1, NA, 1, NA,
1, NA, 1, NA, 1, 1, 1, 1, NA, 1, NA, 1, NA, 1, NA, 1, NA, 1,
NA, 1), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L), .Label = c("Response.End", "Durable", "Complete",
"Partial"), class = "factor"), value = c(40, 78, 78, 106, 89,
177, 108, 101, 138, 209, 279, 244, 311, 167, 271, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, -1, NA, NA, NA, NA, NA, 40, NA, NA,
NA, NA, 32, 43, NA, NA, 93, NA, 160, NA, 94, 15, NA, 51, 26,
36, 26, NA, NA, 67, 80, NA, 105, NA, 34, NA)), row.names = c(NA,
-60L), .Names = c("Patient.ID", "Disease.Stage", "Response.Start",
"Therapy.Length", "Continued", "variable", "value"), class = "data.frame")

How can I write a function to shift regression line for each Facet?

fit<-lm(log(all$fd) ~ log(all$area))
fintercept<-fit$coefficients[[1]] #intercept
fslope<-fit$coefficients[[2]] #slope
interceptmax<-max(log(all$fd)-fslope*log(all$area))
ggplot(all, aes(x=log(area), y=log(fd))) +
geom_point()+
geom_abline(aes(intercept=interceptmax,slope=fslope))+ #shifted regression line
#facet_wrap(~id)+
theme_bw()+
theme(panel.grid.major = element_line(colour = "#808080"))+
ggsave('test.png',width=6, height=4,dpi=300)
This ggplot2 gives me an envelope curve (a shifted regression line). If I remove facet_wrap(~id), it works as intended. But I want the lines to be computed for every facet separately. Any suggestions how I can do this for every facet? (Similar to how using 'lm' inside ggplot2 works)
Here subset of 'all' is:
structure(list(fd = c(11, 7.75, 55.25, 45.25, 9.5, 89, 14.5,
8, 84.25, 5.25, 79.5, 7.75, 71, 38.5, 242.25, 33, 32, 19, 58.5,
249.25, 19, 72.5, 6.25, 27.0333333333333, 26.5, 81, 30, 29, 39.75,
18.5, 64.25, 91, 4.5, 30.5, 74, 256.75, 9, 81, 27, 7.5, 107,
26.75, 47.25, 16, 57, 37, 48.25, 48, 36, 147.25, 23.5, 42, 1.08333333333333,
21.5, 6.51666666666667, 198, 47.5, 8.75, 16, 43.5, 34.75, 30.25,
132.25, 2.25, 12.5, 225, 37, 17.25, 63.5, 48, 19.75, 12, 62.5,
64, 27, 11, 72.25, 246, 27.75, 15.5, 178, 93.75, 3.75, 3, 46.25,
4, 6.25, 5.25, 20, 44, 44.5, 1, 33, 18.25, 14.5, 29.25, 9, 33,
133, 67), area = c(20168.2374, 432.528, 5780.8535, 1411.5435,
543.8975, 660.447, 24995.9752, 543.8975, 2659.9178, 277.1287,
147.8883, 153.0683, 2217.0298, 1188.8045, 4237.2205, 489.5078,
1051.5352, 1362.3337, 1401.1836, 169.3852, 1333.8439, 1051.5352,
29.5259, 1429.6734, 668.2169, 17068.0216, 660.447, 16860.8226,
116.5495, 3820.2325, 784.7664, 841.7461, 1696.4422, 85.9876,
2066.8105, 2090.1204, 121.7294, 9999.9441, 127.4274, 1152.5447,
934.9857, 1424.4935, 1774.1419, 543.8975, 784.7664, 237.5019,
3486.124, 1080.025, 6164.1717, 3348.8546, 236.2069, 510.2277,
31.5979, 916.8558, 1994.2908, 3501.6639, 1152.5447, 486.9178,
533.5376, 271.9488, 336.6985, 1103.3349, 9764.2552, 36.7778,
2375.0191, 512.8176, 422.1681, 859.8761, 1118.8749, 237.5019,
133.6434, 453.2479, 1787.0918, 6063.1622, 237.5019, 1383.0537,
668.2169, 1424.4935, 621.5971, 1486.6532, 7355.5662, 984.1955,
68.8937, 154.6223, 116.5495, 1665.3624, 43.5118, 450.6579, 510.2277,
1494.4231, 404.0381, 598.2873, 339.2884, 12406.043, 274.5387,
151.2553, 753.6865, 29059.6666, 3470.5841, 1885.5113), id = structure(c(3L,
2L, 2L, 4L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 4L, 3L, 3L, 3L,
4L, 3L, 1L, 3L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 4L, 4L, 3L, 4L, 4L,
3L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 4L, 2L, 4L, 3L, 4L, 4L, 3L, 4L,
3L, 4L, 4L, 4L, 3L, 4L, 3L, 3L, 4L, 3L, 4L, 4L, 3L, 4L, 4L, 4L,
4L, 4L, 2L, 3L, 4L, 2L, 3L, 4L, 4L, 4L, 4L, 4L, 3L, 4L, 3L, 2L,
1L, 4L, 2L, 4L, 2L, 4L, 2L, 4L, 4L, 4L, 4L, 3L, 4L, 4L, 3L, 4L,
2L, 2L, 4L), .Label = c("Csb", "Dfb(E)", "Dfa", "Cfa"), class = "factor")), .Names = c("fd",
"area", "id"), row.names = c("65775", "61848", "11286", "22467",
"34601", "53841", "14661", "8941", "88607", "47681", "7898",
"9598", "40615", "35550", "70985", "64634", "43864", "88065",
"37520", "100794", "74916", "76759", "48928", "17575", "7424",
"30848", "53970", "65662", "27392", "82248", "48004", "93560",
"51147", "42321", "30070", "22096", "25575", "49067", "23702",
"65877", "53617", "90727", "59449", "34568", "48155", "96101",
"31358", "40150", "75458", "71566", "1687", "86603", "77451",
"68075", "14478", "69151", "66028", "77394", "68580", "16328",
"26945", "73615", "24179", "19497", "82448", "25098", "23565",
"8113", "66312", "96062", "60313", "34767", "97877", "48598",
"96135", "36877", "7309", "71065", "49622", "65051", "55340",
"105109", "26480", "4550", "18935", "61714", "31667", "55035",
"27563", "17332", "35694", "20092", "44334", "21344", "22303",
"64816", "12814", "12391", "52770", "84979"), class = "data.frame")
Follow up to: How can I shift the regression line?
In order to have a different line per facet, you can calculate the slope and desired intercept separately for each id. It's often easiest to simply make a new dataset of the desired values and use it in geom_abline. This new dataset needs to contain an id column as well as the values to plot so you can get separate info per facet.
There are lots of ways that you could go about creating this dataset, including fitting the regressions one by one and collecting the values "by hand". I'll use functions from package dplyr to calculate the regression per id, save the slope, and calculate the new intercept using your formula.
library(dplyr)
all2 = all %>%
group_by(id) %>%
do({model = lm(log(fd) ~ log(area), data = .)
data.frame(fslope = coef(model)[2], interceptmax = max(log(.$fd) - coef(model)[2]*log(.$area)))
})
all2
Source: local data frame [4 x 3]
Groups: id [4]
id fslope interceptmax
(fctr) (dbl) (dbl)
1 Csb -0.5556930 8.3703705
2 Dfb(E) 0.5378457 0.5057893
3 Dfa 0.1227013 4.6143276
4 Cfa 0.3247770 3.3895178
Now use the new dataset in geom_abline.
ggplot(all, aes(x=log(area), y=log(fd))) +
geom_point() +
geom_abline(data = all2, aes(intercept=interceptmax, slope=fslope)) + #shifted regression line
facet_wrap(~id) +
theme_bw() +
theme(panel.grid.major = element_line(colour = "#808080"))
The resulting plot has different lines for each facet.

How can I shift the regression line?

pfacet<-function(data,x,y){
ggplot(data, aes_string(x=x, y=y)) +
stat_density2d(aes(fill=..level..,contour=TRUE), geom="density2d",color="black") +
geom_smooth(method=lm, se=FALSE,color="black") +
facet_wrap(~id)+
theme_bw()+
theme(panel.grid.major = element_line(colour = "#808080"))+
guides(fill=FALSE)
}
Plotting
pfacet(data=df,x='log(area)',y='log(fd)')+
ggsave('test.png',width=6, height=4,dpi=300)
This gives me this figure.
BUT, I want to shift these regression lines to the highest value of each facet. i.e. make it an envelope curve. Eg. http://specialpapers.gsapubs.org/content/401/63/F11.large.jpg
Ordinarily, I would simply make a regression line and shift it, but I don't know how to do this inside a facet. Could you please give some pointers?
DATA
dput(droplevels(head(df, 100)))
structure(list(fd = c(11, 7.75, 55.25, 45.25, 9.5, 89, 14.5,
8, 84.25, 5.25, 79.5, 7.75, 71, 38.5, 242.25, 33, 32, 19, 58.5,
249.25, 19, 72.5, 6.25, 27.0333333333333, 26.5, 81, 30, 29, 39.75,
18.5, 64.25, 91, 4.5, 30.5, 74, 256.75, 9, 81, 27, 7.5, 107,
26.75, 47.25, 16, 57, 37, 48.25, 48, 36, 147.25), area = c(20168.2374,
432.528, 5780.8535, 1411.5435, 543.8975, 660.447, 24995.9752,
543.8975, 2659.9178, 277.1287, 147.8883, 153.0683, 2217.0298,
1188.8045, 4237.2205, 489.5078, 1051.5352, 1362.3337, 1401.1836,
169.3852, 1333.8439, 1051.5352, 29.5259, 1429.6734, 668.2169,
17068.0216, 660.447, 16860.8226, 116.5495, 3820.2325, 784.7664,
841.7461, 1696.4422, 85.9876, 2066.8105, 2090.1204, 121.7294,
9999.9441, 127.4274, 1152.5447, 934.9857, 1424.4935, 1774.1419,
543.8975, 784.7664, 237.5019, 3486.124, 1080.025, 6164.1717,
3348.8546), id = structure(c(3L, 2L, 2L, 4L, 4L, 3L, 4L, 4L,
4L, 4L, 4L, 4L, 3L, 4L, 3L, 3L, 3L, 4L, 3L, 1L, 3L, 4L, 4L, 4L,
4L, 4L, 3L, 3L, 4L, 4L, 3L, 4L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 3L,
3L, 4L, 2L, 4L, 3L, 4L, 4L, 3L, 4L, 3L), .Label = c("Csb", "Dfb(E)",
"Dfa", "Cfa"), class = "factor")), .Names = c("fd", "area", "id"
), row.names = c("65775", "61848", "11286", "22467", "34601",
"53841", "14661", "8941", "88607", "47681", "7898", "9598", "40615",
"35550", "70985", "64634", "43864", "88065", "37520", "100794",
"74916", "76759", "48928", "17575", "7424", "30848", "53970",
"65662", "27392", "82248", "48004", "93560", "51147", "42321",
"30070", "22096", "25575", "49067", "23702", "65877", "53617",
"90727", "59449", "34568", "48155", "96101", "31358", "40150",
"75458", "71566"), class = "data.frame")
> dput(droplevels(head(ddf2, 100)))
structure(list(fd = c(11, 7.75, 55.25, 45.25, 9.5, 89, 14.5,
8, 84.25, 5.25, 79.5, 7.75, 71, 38.5, 242.25, 33, 32, 19, 58.5,
249.25, 19, 72.5, 6.25, 27.0333333333333, 26.5, 81, 30, 29, 39.75,
18.5, 64.25, 91, 4.5, 30.5, 74, 256.75, 9, 81, 27, 7.5, 107,
26.75, 47.25, 16, 57, 37, 48.25, 48, 36, 147.25, 23.5, 42, 1.08333333333333,
21.5, 6.51666666666667, 198, 47.5, 8.75, 16, 43.5, 34.75, 30.25,
132.25, 2.25, 12.5, 225, 37, 17.25, 63.5, 48, 19.75, 12, 62.5,
64, 27, 11, 72.25, 246, 27.75, 15.5, 178, 93.75, 3.75, 3, 46.25,
4, 6.25, 5.25, 20, 44, 44.5, 1, 33, 18.25, 14.5, 29.25, 9, 33,
133, 67), area = c(20168.2374, 432.528, 5780.8535, 1411.5435,
543.8975, 660.447, 24995.9752, 543.8975, 2659.9178, 277.1287,
147.8883, 153.0683, 2217.0298, 1188.8045, 4237.2205, 489.5078,
1051.5352, 1362.3337, 1401.1836, 169.3852, 1333.8439, 1051.5352,
29.5259, 1429.6734, 668.2169, 17068.0216, 660.447, 16860.8226,
116.5495, 3820.2325, 784.7664, 841.7461, 1696.4422, 85.9876,
2066.8105, 2090.1204, 121.7294, 9999.9441, 127.4274, 1152.5447,
934.9857, 1424.4935, 1774.1419, 543.8975, 784.7664, 237.5019,
3486.124, 1080.025, 6164.1717, 3348.8546, 236.2069, 510.2277,
31.5979, 916.8558, 1994.2908, 3501.6639, 1152.5447, 486.9178,
533.5376, 271.9488, 336.6985, 1103.3349, 9764.2552, 36.7778,
2375.0191, 512.8176, 422.1681, 859.8761, 1118.8749, 237.5019,
133.6434, 453.2479, 1787.0918, 6063.1622, 237.5019, 1383.0537,
668.2169, 1424.4935, 621.5971, 1486.6532, 7355.5662, 984.1955,
68.8937, 154.6223, 116.5495, 1665.3624, 43.5118, 450.6579, 510.2277,
1494.4231, 404.0381, 598.2873, 339.2884, 12406.043, 274.5387,
151.2553, 753.6865, 29059.6666, 3470.5841, 1885.5113), id = structure(c(3L,
2L, 2L, 4L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 4L, 3L, 3L, 3L,
4L, 3L, 1L, 3L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 4L, 4L, 3L, 4L, 4L,
3L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 4L, 2L, 4L, 3L, 4L, 4L, 3L, 4L,
3L, 4L, 4L, 4L, 3L, 4L, 3L, 3L, 4L, 3L, 4L, 4L, 3L, 4L, 4L, 4L,
4L, 4L, 2L, 3L, 4L, 2L, 3L, 4L, 4L, 4L, 4L, 4L, 3L, 4L, 3L, 2L,
1L, 4L, 2L, 4L, 2L, 4L, 2L, 4L, 4L, 4L, 4L, 3L, 4L, 4L, 3L, 4L,
2L, 2L, 4L), .Label = c("Csb", "Dfb(E)", "Dfa", "Cfa"), class = "factor")), .Names = c("fd",
"area", "id"), row.names = c("65775", "61848", "11286", "22467",
"34601", "53841", "14661", "8941", "88607", "47681", "7898",
"9598", "40615", "35550", "70985", "64634", "43864", "88065",
"37520", "100794", "74916", "76759", "48928", "17575", "7424",
"30848", "53970", "65662", "27392", "82248", "48004", "93560",
"51147", "42321", "30070", "22096", "25575", "49067", "23702",
"65877", "53617", "90727", "59449", "34568", "48155", "96101",
"31358", "40150", "75458", "71566", "1687", "86603", "77451",
"68075", "14478", "69151", "66028", "77394", "68580", "16328",
"26945", "73615", "24179", "19497", "82448", "25098", "23565",
"8113", "66312", "96062", "60313", "34767", "97877", "48598",
"96135", "36877", "7309", "71065", "49622", "65051", "55340",
"105109", "26480", "4550", "18935", "61714", "31667", "55035",
"27563", "17332", "35694", "20092", "44334", "21344", "22303",
"64816", "12814", "12391", "52770", "84979"), class = "data.frame")

Resources