问题
I am using facet-wrap to show two variables (a
and b
) for four cities. I could group the plots based on the cities but can not show the legend for the variables (i.e., a
and b
) using scale_color_discrete.
ggplot() +
geom_line(data=df, aes(x=year, y = a, group=city), colour="red",linetype = "longdash",show_guide = TRUE) +
geom_line(data=df, aes(x=year, y = b, group=city), colour="blue", show_guide = TRUE) +
scale_color_discrete(name="Scenarios",labels=c("a" ,"b")) +
guides(color=guide_legend(ncol=2)) +
theme(legend.position="bottom") +
facet_wrap( ~ city, ncol=2)
Here is a subset of my data:
structure(list(year = c(2015, 2016, 2016, 2016, 2016, 2016, 2016,
2016, 2016, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2018,
2018, 2018),
city = c("Calgary", "Calgary", "Calgary", "Halifax",
"Halifax", "Ottawa", "Ottawa", "Yellowknife", "Yellowknife",
"Calgary", "Calgary", "Halifax", "Halifax", "Ottawa", "Ottawa",
"Yellowknife", "Yellowknife", "Calgary", "Calgary", "Halifax"),
a = c(25988.04, 37842.33, 37842.33, 11595.46, 11595.46, 49458.24,
49458.24, 185.31, 185.31, 36718.9, 36718.9, 11176.82, 11176.82,
47606.45, 47606.45, 176.5, 176.5, 36303.91, 36303.91, 10976.56),
b = c(25988.04, 37842.33, 37842.33, 11595.46, 11595.46, 49458.24,
49458.24, 185.31, 185.31, 36718.9, 36718.9, 11176.82, 11176.82,
47606.45, 47606.45, 176.5, 176.5, 36303.91, 36303.91, 10976.56
)), row.names = c(NA, -20L),
class = c("grouped_df", "tbl_df",
"tbl", "data.frame"), vars = c("year", "city"), drop = TRUE, indices = list(
0L, 1:2, 3:4, 5:6, 7:8, 9:10, 11:12, 13:14, 15:16, 17:18,
19L),
group_sizes = c(1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 1L),
biggest_group_size = 2L, labels = structure(list(year = c(2015,
2016, 2016, 2016, 2016, 2017, 2017, 2017, 2017, 2018, 2018),
city = c("Calgary", "Calgary", "Halifax", "Ottawa", "Yellowknife",
"Calgary", "Halifax", "Ottawa", "Yellowknife", "Calgary",
"Halifax")), row.names = c(NA, -11L), class = "data.frame", vars = c("year",
"city"), drop = TRUE))
回答1:
You can assign colors to variables and then use scale_colour_manual
to do it, as follows:
vars <- c("a"="red", "b"="blue")
ggplot() +
geom_line(data=df, aes(x=year, y = a, colour="a"), linetype = "longdash") +
geom_line(data=df, aes(x=year, y = b, colour="b")) +
scale_colour_manual(name="Scenarios:", values=vars) +
theme(legend.position="bottom") +
facet_wrap( ~ city, ncol=2)
Hope it helps.
来源:https://stackoverflow.com/questions/53901253/adding-a-legend-to-a-ggplot-with-facet-wrap