I want to create a scatterplot that combines both days (in color) as observer (shape) in a scatterplot. However, with my current code the points will not only dodge on day (which I want), but also on observer (which i dont want). Here is my dataframe
structure(list(sample = 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, 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, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48), treatment = c("a", "a", "a", "a", "a", "a",
"b", "b", "b", "b", "b", "b", "c", "c", "c", "c", "c", "c", "d",
"d", "d", "d", "d", "d", "a", "a", "a", "a", "a", "a", "b", "b",
"b", "b", "b", "b", "c", "c", "c", "c", "c", "c", "d", "d", "d",
"d", "d", "d", "a", "a", "a", "a", "a", "a", "b", "b", "b", "b",
"b", "b", "c", "c", "c", "c", "c", "c", "d", "d", "d", "d", "d",
"d", "a", "a", "a", "a", "a", "a", "b", "b", "b", "b", "b", "b",
"c", "c", "c", "c", "c", "c", "d", "d", "d", "d", "d", "d"),
day = 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, 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), levels = c("2",
"6"), class = "factor"), observer = c("OBS1", "OBS1", "OBS1",
"OBS1", "OBS1", "OBS1", "OBS1", "OBS1", "OBS1", "OBS1", "OBS1",
"OBS1", "OBS1", "OBS1", "OBS1", "OBS1", "OBS1", "OBS1", "OBS1",
"OBS1", "OBS1", "OBS1", "OBS1", "OBS1", "OBS2", "OBS2", "OBS2",
"OBS2", "OBS2", "OBS2", "OBS2", "OBS2", "OBS2", "OBS2", "OBS2",
"OBS2", "OBS2", "OBS2", "OBS2", "OBS2", "OBS2", "OBS2", "OBS2",
"OBS2", "OBS2", "OBS2", "OBS2", "OBS2", "OBS1", "OBS1", "OBS1",
"OBS1", "OBS1", "OBS1", "OBS1", "OBS1", "OBS1", "OBS1", "OBS1",
"OBS1", "OBS1", "OBS1", "OBS1", "OBS1", "OBS1", "OBS1", "OBS1",
"OBS1", "OBS1", "OBS1", "OBS1", "OBS1", "OBS2", "OBS2", "OBS2",
"OBS2", "OBS2", "OBS2", "OBS2", "OBS2", "OBS2", "OBS2", "OBS2",
"OBS2", "OBS2", "OBS2", "OBS2", "OBS2", "OBS2", "OBS2", "OBS2",
"OBS2", "OBS2", "OBS2", "OBS2", "OBS2"), count = c(1.94000836127381,
2.07418521661429, 0.812685661255674, 0.199532997122114, 0.720956738045624,
2.25080298569014, 1.1066027850052, 4.1487948134003, 5.06163333946851,
8.45581635201957, 1.39519183814535, 5.22744057847467, 77.578763434025,
81.5688787451947, 57.7998831807876, 72.5246292216229, 53.7941684202605,
18.1902377363129, 7.2040245328528, 18.7399963681316, 12.0408266827075,
16.9381875648501, 4.94300230430152, 7.7656112238281, 0.426353706529969,
1.58200029160696, 0.546681932009987, 0.100208840148698, 0.444814277410285,
1.61429066532657, 0.927880542016121, 0.0246114786607196,
2.28109051907718, 4.06940300139814, 1.36067523536742, 2.75085205976752,
27.7361069969966, 45.1989664871625, 32.2395897650876, 69.6007356941801,
4.34439825647985, 2.21082387173822, 2.40563040116718, 6.19711117695116,
0.190884751182731, 4.99307548525574, 2.27313622832564, 6.45085822279649,
3.62337602915357, 9.29131381820146, 17.3474341955159, 0.654156425021601,
18.2284156894217, 8.1096329723588, 2.59461805212543, 11.635214608248,
10.338591963394, 17.096512619713, 2.29518753169706, 13.6312931040208,
2.40586814654832, 18.2260582559852, 0.813121453291961, 86.1680580200406,
86.1245441941217, 75.7365169486812, 51.2171310942499, 62.4301976210013,
38.1836807429795, 31.2339903053221, 7.92988025761869, 8.27444313173916,
3.52366209108204, 2.79169044391839, 3.868126588607, 0.563527045569289,
15.1194456070968, 4.28505182586694, 0.825225268886448, 8.24445472788982,
2.5334457992282, 3.73731910584408, 1.48367595357901, 1.40416105449322,
1.2076803985627, 12.5666113109268, 0.523344806332173, 36.4416339714133,
16.9721558868451, 43.7864681289392, 39.3637375577211, 4.59273514657034,
33.3793562892502, 27.6940745715846, 3.93496345638513, 2.57838139836976
), length = c(556, 304, 878, 457, 271, 176, 814, 362, 353,
411, 132, 305, 502, 187, 915, 132, 430, 879, 673, 361, 447,
956, 920, 327, 591, 502, 659, 781, 624, 833, 484, 387, 486,
853, 114, 739, 618, 228, 677, 925, 460, 645, 353, 987, 315,
113, 333, 449, 808, 356, 590, 753, 361, 868, 878, 995, 644,
149, 651, 719, 911, 550, 882, 879, 784, 490, 573, 889, 992,
459, 849, 541, 680, 291, 699, 506, 678, 327, 194, 198, 506,
926, 472, 124, 916, 447, 385, 685, 677, 397, 953, 579, 458,
107, 142, 207), yield = c(3, 10, 9, 9, 9, 2, 5, 5, 4, 10,
3, 2, 4, 7, 6, 4, 6, 8, 7, 9, 6, 8, 4, 10, 6, 8, 5, 8, 2,
4, 8, 8, 8, 6, 3, 5, 9, 5, 2, 9, 7, 5, 8, 2, 4, 3, 2, 2,
3, 10, 5, 8, 4, 4, 8, 8, 10, 3, 5, 4, 10, 3, 7, 7, 10, 10,
9, 2, 6, 5, 10, 10, 8, 2, 2, 4, 4, 2, 6, 2, 5, 7, 10, 8,
8, 3, 6, 3, 9, 9, 9, 4, 5, 5, 3, 8)), row.names = c(NA, -96L
), class = c("tbl_df", "tbl", "data.frame"))
I can create a scatterplot as followed
final_data$day <- as.factor(final_data$day)
p <- ggplot(data = final_data)+
aes(x = treatment, y = count, color = day)+
geom_point(size = 2, position = position_jitterdodge(dodge.width = 0.5, jitter.width = 0.1))
plot(p)
But now I only want to change the shape of my points (per observer), but I don't want the extra dodge for these points. This is what happens when I change my code.
final_data$day <- as.factor(final_data$day)
p <- ggplot(data = final_data)+
aes(x = treatment, y = count, color = day)+
geom_point(aes(shape = observer), size = 2, position = position_jitterdodge(dodge.width = 0.5, jitter.width = 0.1))
plot(p)
How can I keep the layout from Layout 1, but with the different shape for the "observer". In other words, only dodge for days, not for observers.
I tried several codes, but nothing works for this. Hope you can help.
Thanks M
You have to explicitly set the group
aes, i.e. use group=day
to dodge the points by day
only:
library(ggplot2)
ggplot(data = final_data) +
aes(x = treatment, y = count, color = day, group = day) +
geom_point(aes(shape = observer),
size = 2,
position = position_jitterdodge(dodge.width = 0.5, jitter.width = 0.1)
)