/ / зміни розміру / порядку одного напрямного в комбінованому посібнику ggplot - r, ggplot2

змінити розмір / порядок одного посібника в комбінованому посібнику ggplot - r, ggplot2

Я знаходжу комбіновану легенду щодо форми та лінійного типу важко розшифрувати. Зокрема, форму важко помітити, оскільки вона знаходиться за лінією, і вона занадто мала.

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))

введіть опис зображення тут