Управление легендой с двумя фреймами данных различных x-масштабов и различных Геом в ggplot2
Не мог бы кто-нибудь объяснить мне, как получить полный контроль над легендами в ggplot2 с двумя фреймами данных с разными масштабами x, представленными в двух разных геомах. 'Name1' и 'name2' - это функции, созданные с помощью других функций фильтрации.
1. Почему форма geom_point появляется в легенде для "группы 1"? Я ожидаю, что легенда будет показывать только цвет в группе 1 и форму для Группы 2.
Можно ли также переставить легенды? то есть появляется группа 2 первый в ряду.
df1 <- data.frame(g1 = c("a", "b", "c", "e"),
y1 = c(12, 8, 3, 20))
df2 <- data.frame(g1 = letters[1:5],
y1 = 20:24)
name1 <- "Group 1"
name2 <- "Group 2"
require(ggplot2)
ggplot(NULL, aes(x=g1, y=y1)) +
geom_bar(data = df1, stat = "identity",
aes(fill=factor(name1))) +
geom_point(data = df2, stat = "identity",
size = 5, shape = 2, aes(fill=factor(name2))) +
theme(plot.margin = unit(c(2,1,1,1), "lines"),
plot.title = element_text(hjust = 0, size=18),
axis.title = element_text(face = "bold", size = 12),
legend.position = 'top',
legend.text = element_text(size = 12),
legend.title = element_blank())
1 ответ:
Ключ состоит в том, чтобы определить
fill
иshape
в обоихaes()
. Затем вы можете определитьshape
иfill
КакNA
для того, который вам не нужен.ggplot(NULL, aes(x=g1, y=y1)) + geom_bar(data = df1, stat = "identity", aes(fill=name2, shape=name2)) + geom_point(data = df2, size = 5, aes(shape=name1, fill=name1)) + theme(plot.margin = unit(c(2,1,1,1), "lines"), plot.title = element_text(hjust = 0, size=18), axis.title = element_text(face = "bold", size = 12), legend.position = 'top', legend.text = element_text(size = 12), legend.title = element_blank()) + scale_shape_manual(values=c(2, NA)) + scale_fill_manual(values=c(NA, "red")) + guides(fill = guide_legend(reverse = TRUE), shape = guide_legend(reverse = TRUE))