As you can see with my code and data below, I am trying to reorder the coefficients by demographic group, so the order is (from top to bottom): Black, Hispanic, White, Female, Male.
What I'm trying to do within scale_fill_manual
seems to rearrange the coefficients correctly in the legend only--the colors/coefficients in the actual plot do not seem to follow. What am I missing here?
Code:
dtest %>%
ggplot(aes(x = coef, y = as.factor(model),
xmin = ci_lower, xmax = ci_upper,
color = category)) +
facet_wrap(~outcome,
nrow = 3,
scales = "free") +
geom_errorbar(width = 0,
size = 1.1,
alpha = 0.6,
position = position_dodge(width = 0.5)) +
geom_errorbar(aes(x = -coef, xmin = -ci_lower, xmax = -ci_upper),
width = 0,
size = 1.1,
alpha = 0,
position = position_dodge(width = 0.5)) +
geom_point(shape = 22,
aes(fill = category),
size = 2.5,
color = 'white',
position = position_dodge(width = 0.5)) +
geom_vline(xintercept = 0,
linetype = "dashed",
color = "blue",
linewidth = .3) +
scale_y_discrete(labels = outcome_labels) +
scale_fill_manual(limits = c("Black", "Hispanic", "White", "Female", "Male"),
values = c("Black" = "indianred2",
"Hispanic" = "tan2",
"White" = "lightgoldenrod1",
"Female" = "gray10",
"Male" = "gray70")) +
scale_color_manual(limits = c("Black", "Hispanic", "White", "Female", "Male"),
values = c("Black" = "indianred2",
"Hispanic" = "tan2",
"White" = "lightgoldenrod1",
"Female" = "gray10",
"Male" = "gray70")) +
theme_bw(base_size = 14) +
theme(legend.title = element_blank())
Data:
dtest <- structure(list(model = c(7, 6, 5, 7, 6, 5, 4, 3, 4, 3, 2, 1,
2, 1, 7, 6, 5, 7, 6, 5, 7, 6, 5, 4, 3, 4, 3, 4, 3, 2, 1, 2, 1,
2, 1), category = c("Female", "Female", "Female", "Male", "Male",
"Male", "Female", "Female", "Male", "Male", "Female", "Female",
"Male", "Male", "Hispanic", "Hispanic", "Hispanic", "Black",
"Black", "Black", "White", "White", "White", "Hispanic", "Hispanic",
"Black", "Black", "White", "White", "Hispanic", "Hispanic", "Black",
"Black", "White", "White"), outcome = c("ysr", "ysr", "ysr",
"ysr", "ysr", "ysr", "ss", "ss", "ss", "ss", "poverty", "poverty",
"poverty", "poverty", "ysr", "ysr", "ysr", "ysr", "ysr", "ysr",
"ysr", "ysr", "ysr", "ss", "ss", "ss", "ss", "ss", "ss", "poverty",
"poverty", "poverty", "poverty", "poverty", "poverty"), coef = c(0.0224673769230769,
0.124678274725275, -0.0157007538461538, 0.328996120879121, 0.334152318681319,
0.286053692307692, -0.252022263736264, -0.195319505494505, -0.304987736263736,
-0.233133758241758, 0.298986065934066, 0.23503343956044, 0.391878274725275,
0.0414132626373626, 0.167719824175824, 0.246736065934066, 0.0900949098901099,
0.197205582417582, 0.238663087912088, 0.19849110989011, -0.235474142857143,
-0.220236802197802, -0.265119164835165, -0.223690175824176, -0.198643747252747,
-0.221460516483516, -0.123310659340659, -0.704752681318681, -0.139090043956044,
0.451706428571429, 0.24867232967033, 0.248139373626374, 0.0291924879120879,
-0.149548362637363, 0.762050692307692), ci_lower = c(-0.214028681318681,
-0.103655473626374, -0.273158362637363, 0.159887417582418, 0.153449428571429,
0.0967789153846154, -0.583139351648352, -0.421394230769231, -0.602876417582418,
-0.450184747252747, -0.0486217065934066, -0.0487711857142857,
-0.00532261956043956, -0.278972626373626, -0.0353962637362637,
0.0344971626373626, -0.150122417582418, -0.051963521978022, -0.0029050167032967,
-0.0624020428571429, -0.594504516483516, -0.591095197802198,
-0.684788, -0.625167901098901, -0.433024010989011, -0.61050443956044,
-0.36732256043956, -1.18117032967033, -0.840628142857143, -0.0308338549450549,
0.00663712505494506, -0.132468450549451, -0.337184494505494,
-0.355178835164835, -0.345514043956044), ci_upper = c(0.258963450549451,
0.353012010989011, 0.241756846153846, 0.498104846153846, 0.514855230769231,
0.475328472527473, 0.0790948637362637, 0.0307552087912088, -0.00709903648351648,
-0.0160827648351648, 0.646593868131868, 0.518838065934066, 0.789079164835165,
0.361799142857143, 0.370835901098901, 0.458974956043956, 0.330312241758242,
0.446374703296703, 0.480231186813187, 0.459384263736264, 0.123556252747253,
0.15062156043956, 0.154549703296703, 0.177787527472527, 0.0357365087912088,
0.167583406593407, 0.120701252747253, -0.228335010989011, 0.562448098901099,
0.934246736263736, 0.490707516483517, 0.628747197802198, 0.395569472527473,
0.0560821087912088, 1.86961538461538)), row.names = c(NA, -35L
), class = c("tbl_df", "tbl", "data.frame"))
The issue is that via limits
you set the order of the legend entries but the order in the plot still follows the order of your category
ies, which if not set are ordered alphabetically. To fix that, convert category
to a factor with your desired order.
library(ggplot2)
dtest$category <- factor(
dtest$category,
rev(c("Black", "Hispanic", "White", "Female", "Male"))
)
ggplot(dtest, aes(
x = coef, y = as.factor(model),
xmin = ci_lower, xmax = ci_upper,
color = category
)) +
facet_wrap(~outcome,
nrow = 3,
scales = "free"
) +
geom_errorbar(
width = 0,
size = 1.1,
alpha = 0.6,
position = position_dodge(width = 0.5)
) +
geom_errorbar(aes(x = -coef, xmin = -ci_lower, xmax = -ci_upper),
width = 0,
size = 1.1,
alpha = 0,
position = position_dodge(width = 0.5)
) +
geom_point(
shape = 22,
aes(fill = category),
size = 2.5,
color = "white",
position = position_dodge(width = 0.5)
) +
geom_vline(
xintercept = 0,
linetype = "dashed",
color = "blue",
linewidth = .3
) +
# scale_y_discrete(labels = outcome_labels) +
scale_fill_manual(
limits = rev,
values = c(
"Black" = "indianred2",
"Hispanic" = "tan2",
"White" = "lightgoldenrod1",
"Female" = "gray10",
"Male" = "gray70"
),
aesthetics = c("fill", "color")
) +
theme_bw(base_size = 14) +
theme(legend.title = element_blank())