Я знаходжу комбіновану легенду щодо форми та лінійного типу важко розшифрувати. Зокрема, форму важко помітити, оскільки вона знаходиться за лінією, і вона занадто мала.
library(ggplot2)
ggplot(mtcars)+
geom_point(aes(x=hp,y=mpg,shape=as.factor(cyl)))+
geom_smooth(aes(x=hp,y=mpg,linetype=as.factor(cyl)),method="lm")+
theme_bw(base_size=18)
Як я можу збільшити розмір фігур в легенді, не збільшуючи розмір рядка?
ця спроба нижче збільшує розмір обох (не те, що я хочу). порядок guide_legend
також не впливає на порядок символів у клавішах легенди. Зміна порядку geom_point та geom_smooth дасть бажаний результат в легенді, але не в сюжеті.
+guides(linetype=guide_legend("Cylinders"),shape=guide_legend("Cylinders",override.aes=list(size=3)))
Я також сподівався theme(legend.key.size=grid::unit(2,"cm"))
може збільшити розмір об'єктів у клавіші легенди, але, схоже, це не робити.
пропозиції? також відкриті для інших ідей, як зробити графік більш розбірливим.
Відповіді:
2 для відповіді № 1Легенда створює лінії та точки в тому порядку, в якому вони побудовані, тому для того, щоб отримати точки перед лінією, ви могли це зробити:
ggplot(mtcars)+
geom_smooth(aes(x=hp,y=mpg,linetype=as.factor(cyl)),method="lm")+
geom_point(aes(x=hp,y=mpg,shape=as.factor(cyl)))+
theme_bw(base_size=18)
Зміна розміру точки в легенді трохи більше засмучує. Можливо, ви хочете спробувати хак, який дозволяє зняти легенду з одного сюжету і перекласти його на інший:
library(gtable)
library(gridExtra)
# Has the legend you want
p1 <- ggplot(mtcars)+
geom_smooth(aes(x=hp,y=mpg,linetype=as.factor(cyl)),method="lm")+
geom_point(aes(x=hp,y=mpg,shape=as.factor(cyl)),size=3)+
theme_bw(base_size=18)+labs(shape="Cylinders",linetype="Cylinders")
# Has the plot you want
p2 <- ggplot(mtcars)+
geom_smooth(aes(x=hp,y=mpg,linetype=as.factor(cyl)),method="lm")+
geom_point(aes(x=hp,y=mpg,shape=as.factor(cyl)))+
theme_bw(base_size=18)+theme(legend.position="none")
# Take the legend from p1
fill.legend <- gtable_filter(ggplot_gtable(ggplot_build(p1)), "guide-box")
legGrob <- grobTree(fill.legend)
# Put the legend from p1 onto p2
grid.arrange(p2, legGrob, ncol=2, widths = c(6,1))