Wie soll ich die Größe von Symbolen in Legenden ändern? Ich überprüfte das Dokument von theme
, fand aber keine Antwort.
Hier ist ein Beispiel:
library(ggplot2);library(grid)
set.seed(1000)
x <- 1:6
mu <- sin(x)
observed <- mu + rnorm(length(x), 0, 0.5*sd(mu))
data <- data.frame(
t=rep(x, 2),
value=c(mu, observed) - min(mu, observed) + 0.5,
class = rep(c("mu", "observed"), each=length(x)))
mu <- data$value[1:length(x)]
observed <- data$value[1:length(x) + length(x)]
mu.min <- mu - 3 * 0.5 * sd(mu)
mu.max <- mu + 3 * 0.5 * sd(mu)
g <- ggplot(data=data)
g <- g + geom_point(aes(x=value, y=t, shape=class, size=24)) + scale_size(guide="none")
g <- g + scale_shape(name="", labels=expression(paste(S[u](t), ", the observation at time ", t), paste(mu[u](t), ", the mean of ", tilde(S)[u](t), " ")))
stat_function.color <- gray(0.5)
g <- g + geom_segment(aes(y=1:6, yend=1:6, x=mu.min, xend=mu.max, linetype="2", alpha = 1), color=stat_function.color) + scale_alpha(guide="none") + scale_linetype(name= "", labels=expression(paste("probability density function (pdf) of ", tilde(S)[u], " at time ", t)))
for(i in 1:length(x)) {
g <- g + stat_function(fun=function(x, i) {
ifelse( x <= mu.max[i] & x >= mu.min[i], dnorm(x, mu[i], sd(mu)) + i, NA)
}, color=stat_function.color, args=list(i=i))
}
background.color <- gray(0.75)
g <- g + theme(
axis.text=element_blank(),
title=element_text(size=rel(1.5)),
legend.text=element_text(size=rel(1.5)),
legend.position="top",
legend.direction="vertical",
# legend.key.size = unit(2, "cm"),
panel.background=element_rect(fill=background.color),
panel.grid.major=element_line(color=background.color),
panel.grid.minor=element_line(color=background.color)
) + coord_flip()
plot(g)
Antworten:
Sie können diese Art von Änderungen manuell vornehmen, indem Sie das folgende
override.aes
Argument verwendenguide_legend()
:g <- g + guides(shape = guide_legend(override.aes = list(size = 5))) print(g)
quelle
Du solltest benutzen:
theme(legend.key.size = unit(3,"line"))
quelle
theme
was in der Frage erwähnt wurde.unit(0.1, "line")
Marius 'Antwort hat bei mir ab R Version 3.2.2 nicht funktioniert. Sie können weiterhin
guide_legend()
mit demselbenoverride.eas
Argument aufrufen, müssen dies jedochcolor
anstelleshape
der Wrapper-Funktion angeben .Wenn Sie also eine spätere Version von R ausführen, versuchen Sie stattdessen Folgendes:
g + guides(color = guide_legend(override.aes = list(size=5)))
BEARBEITEN
Wie von @Ibo im Kommentar hervorgehoben, kann dies an der Farbskala im
ggplot
Objekt liegen. Wenn dasggplot
Objekt eine Farbskala enthält,size=5
muss stattdessen die Zuordnung von size ( ) auf die Farbe festgelegt werden.quelle
Wenn Sie die Größe von 2 Komponenten einer Legende unabhängig voneinander ändern möchten, wird dies schwieriger. Sie können dies jedoch tun, indem Sie die einzelnen Komponenten des Diagramms mithilfe des
grid
Pakets manuell bearbeiten .Beispiel basierend auf dieser SO-Antwort :
set.seed(1) dat <- data.frame(x = runif(n = 100), x2 = factor(rep(c('first', 'second'), each = 50))) set.seed(1) dat$y = 5 + 1.8 * as.numeric(dat$x2) + .3 * dat$x + rnorm(100) # basic plot g <- ggplot(data = dat, aes(x = x, y = y, color = x2))+ theme_bw()+ geom_point()+ geom_smooth(method = 'lm')
# make the size of the points & lines in the legend larger g + guides(color = guide_legend(override.aes = list(size = 2)))
# Make JUST the legend points larger without changing the size of the legend lines: # To get a list of the names of all the grobs in the ggplot g grid::grid.ls(grid::grid.force()) # Set the size of the point in the legend to 2 mm grid::grid.gedit("key-[-0-9]-1-1", size = unit(4, "mm")) # save the modified plot to an object g2 <- grid::grid.grab() ggsave(g2, filename = 'g2.png')
quelle