Reputation: 21400
I have large dataframes of which I can show here only a snippet:
df4 <- structure(list(AOI = c("*", "C", "*", "C", "C", "*", "*", "C",
"*", "C", "C", "C", "C", "*", "B", "*", "C", "*", "C", "C", "C",
"*", "B", "*", "*", "*", "B", "*", "B", "B", "*", "*", "B", "B",
"B", "*", "B", "*", "B", "B", "B", "*", "B", "*", "*", "*", "B",
"*", "*", "B", "*", "*", "B", "*", "B", "*", "B", "*", "B", "*",
"B", "*", "*", "B", "B", "*", "B", "B", "B", "*", "*", "*", "*",
"B", "B", "*", "B", "*", "B", "*", "B", "B", "*", "B", "*", "B",
"*", "B", "*", "B", "*", "B", "*", "C", "*", "B", "*", "B", "*",
"B", "*", "*", "B", "*", "B", "*", "*", "*", "B", "B", "*", "*",
"C", "*", "B", "*", "*", "*", "B", "B", "*", "B", "*", "B", "B",
"*", "B", "*", "*", "B", "*", "C", "*", "B", "*", "C", "*", "B",
"*", "C", "*", "C", "*", "B", "*", "B", "*", "C", "C", "C"),
AOI_col = c("lemonchiffon", "slateblue1", "lemonchiffon",
"slateblue1", "slateblue1", "lemonchiffon", "lemonchiffon",
"slateblue1", "lemonchiffon", "slateblue1", "slateblue1",
"slateblue1", "slateblue1", "lemonchiffon", "lawngreen",
"lemonchiffon", "slateblue1", "lemonchiffon", "slateblue1",
"slateblue1", "slateblue1", "lemonchiffon", "lawngreen",
"lemonchiffon", "lemonchiffon", "lemonchiffon", "lawngreen",
"lemonchiffon", "lawngreen", "lawngreen", "lemonchiffon",
"lemonchiffon", "lawngreen", "lawngreen", "lawngreen", "lemonchiffon",
"lawngreen", "lemonchiffon", "lawngreen", "lawngreen", "lawngreen",
"lemonchiffon", "lawngreen", "lemonchiffon", "lemonchiffon",
"lemonchiffon", "lawngreen", "lemonchiffon", "lemonchiffon",
"lawngreen", "lemonchiffon", "lemonchiffon", "lawngreen",
"lemonchiffon", "lawngreen", "lemonchiffon", "lawngreen",
"lemonchiffon", "lawngreen", "lemonchiffon", "lawngreen",
"lemonchiffon", "lemonchiffon", "lawngreen", "lawngreen",
"lemonchiffon", "lawngreen", "lawngreen", "lawngreen", "lemonchiffon",
"lemonchiffon", "lemonchiffon", "lemonchiffon", "lawngreen",
"lawngreen", "lemonchiffon", "lawngreen", "lemonchiffon",
"lawngreen", "lemonchiffon", "lawngreen", "lawngreen", "lemonchiffon",
"lawngreen", "lemonchiffon", "lawngreen", "lemonchiffon",
"lawngreen", "lemonchiffon", "lawngreen", "lemonchiffon",
"lawngreen", "lemonchiffon", "slateblue1", "lemonchiffon",
"lawngreen", "lemonchiffon", "lawngreen", "lemonchiffon",
"lawngreen", "lemonchiffon", "lemonchiffon", "lawngreen",
"lemonchiffon", "lawngreen", "lemonchiffon", "lemonchiffon",
"lemonchiffon", "lawngreen", "lawngreen", "lemonchiffon",
"lemonchiffon", "slateblue1", "lemonchiffon", "lawngreen",
"lemonchiffon", "lemonchiffon", "lemonchiffon", "lawngreen",
"lawngreen", "lemonchiffon", "lawngreen", "lemonchiffon",
"lawngreen", "lawngreen", "lemonchiffon", "lawngreen", "lemonchiffon",
"lemonchiffon", "lawngreen", "lemonchiffon", "slateblue1",
"lemonchiffon", "lawngreen", "lemonchiffon", "slateblue1",
"lemonchiffon", "lawngreen", "lemonchiffon", "slateblue1",
"lemonchiffon", "slateblue1", "lemonchiffon", "lawngreen",
"lemonchiffon", "lawngreen", "lemonchiffon", "slateblue1",
"slateblue1", "slateblue1"), minute = c(0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 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), start_pm = c(0,
49, 1981, 2147, 5127, 6115, 6830, 6847, 7048, 7180, 7685,
9889, 9990, 10080, 10236, 10385, 11249, 12000, 12402, 14051,
14253, 17033, 17618, 17768, 18051, 19503, 20067, 20246, 20414,
20647, 20952, 20994, 21169, 21427, 21905, 23752, 23969, 24335,
24803, 25032, 25318, 25319, 25569, 25719, 26610, 26970, 27403,
27552, 27759, 27936, 28085, 28123, 28469, 29369, 30236, 30419,
30569, 30985, 31303, 31485, 32269, 33452, 33603, 33803, 34188,
34652, 35065, 35297, 35599, 36814, 39042, 39290, 39558, 39565,
39575, 39715, 39865, 40481, 40732, 41148, 41365, 41395, 41481,
41698, 41964, 42098, 42281, 42465, 42948, 43447, 43681, 43998,
45314, 45582, 45980, 47065, 47214, 47598, 48181, 48398, 48581,
49010, 49067, 49250, 49434, 49917, 49996, 50022, 50418, 50496,
50567, 50674, 51901, 52117, 53284, 53467, 57019, 57434, 57533,
57584, 57682, 57833, 57982, 59333, 0, 82, 2366, 2515, 5257,
6871, 7037, 7137, 7538, 7722, 7872, 8104, 8355, 8422, 8605,
10004, 10405, 10872, 11337, 11456, 11688, 12122, 12272, 13337,
14057, 14597), end_pm = c(49, 1981, 2147, 5127, 6115, 6830,
6847, 7048, 7180, 7685, 9889, 9990, 10080, 10236, 10385,
11249, 12000, 12402, 14051, 14253, 17033, 17618, 17768, 18051,
19503, 20067, 20246, 20414, 20647, 20952, 20994, 21169, 21427,
21905, 23752, 23969, 24335, 24803, 25032, 25318, 25319, 25569,
25719, 26610, 26970, 27403, 27552, 27759, 27936, 28085, 28123,
28469, 29369, 30236, 30419, 30569, 30985, 31303, 31485, 32269,
33452, 33603, 33803, 34188, 34652, 35065, 35297, 35599, 36814,
39042, 39290, 39558, 39565, 39575, 39715, 39865, 40481, 40732,
41148, 41365, 41395, 41481, 41698, 41964, 42098, 42281, 42465,
42948, 43447, 43681, 43998, 45314, 45582, 45980, 47065, 47214,
47598, 48181, 48398, 48581, 49010, 49067, 49250, 49434, 49917,
49996, 50022, 50418, 50496, 50567, 50674, 51901, 52117, 53284,
53467, 57019, 57434, 57533, 57584, 57682, 57833, 57982, 59333,
60000, 82, 2366, 2515, 5257, 6871, 7037, 7137, 7538, 7722,
7872, 8104, 8355, 8422, 8605, 10004, 10405, 10872, 11337,
11456, 11688, 12122, 12272, 13337, 14057, 14597, 15245)), row.names = c(NA,
-150L), class = c("tbl_df", "tbl", "data.frame"))
What I want to do is plot the AOI
values using the colors in AOI_col
. The problem is that there is a mismatch between the plot colors and the legend colors: when AOI=="B"
the plot color is, correctly, lawngreen
but in the legend the color for B
is slateblue1
:
How can I fix this mismatch?
Here's the code for the plot:
library(ggplot2)
ggplot(df4,
aes(
x = start_pm,
xend = end_pm,
y = minute + scale(as.numeric(as.factor(AOI))) / 10,
yend = minute + scale(as.numeric(as.factor(AOI))) / 10,
color = AOI
)) +
geom_segment(size = 2) +
scale_y_reverse(breaks = 0:53,
labels = paste0(0:53, "min"),
name = NULL) +
theme(axis.title.x.bottom = element_blank()) +
scale_colour_manual(values = unique(df4$AOI_col))
Upvotes: 0
Views: 53
Reputation: 16988
Your
scale_colour_manual(values = unique(df4$AOI_col))
needs to be in the right order, so
scale_colour_manual(values = c("lemonchiffon", "lawngreen", "slateblue1"))
should solve your mismatch problem. Alternatively, you can create a named vector
vec_col <- unique(df4$AOI_col)
names(vec_col) <- unique(df4$AOI)
and match the colors
scale_colour_manual(values = vec_col[unique(df4$AOI)])
Upvotes: 0
Reputation: 2949
In scale_colour_manual(), assign the colours individually.
ggplot(df4,
aes(
x = start_pm,
xend = end_pm,
y = minute + scale(as.numeric(as.factor(AOI))) / 10,
yend = minute + scale(as.numeric(as.factor(AOI))) / 10,
color = AOI
)) +
geom_segment(size = 2) +
scale_y_reverse(breaks = 0:53,
labels = paste0(0:53, "min"),
name = NULL) +
theme(axis.title.x.bottom = element_blank()) +
scale_colour_manual(values = c("A" = unique(df4$AOI_col)[1],
"B" = unique(df4$AOI_col)[3],
"C" = unique(df4$AOI_col)[2]))
or you can reorder the colours by the index
ggplot(df4,
aes(
x = start_pm,
xend = end_pm,
y = minute + scale(as.numeric(as.factor(AOI))) / 10,
yend = minute + scale(as.numeric(as.factor(AOI))) / 10,
color = AOI
)) +
geom_segment(size = 2) +
scale_y_reverse(breaks = 0:53,
labels = paste0(0:53, "min"),
name = NULL) +
theme(axis.title.x.bottom = element_blank()) +
scale_colour_manual(values = unique(df4$AOI_col)[c(1, 3, 2)])
Upvotes: 1