2013-02-25 42 views
23

Làm cách nào để thay đổi kích thước biểu tượng trong truyền thuyết? Tôi đã kiểm tra tài liệu của theme nhưng không tìm thấy câu trả lời.ggplot2: Điều chỉnh kích thước ký hiệu trong chú thích

Dưới đây là một ví dụ:

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

thấy http://stackoverflow.com/questions/16356052/control-ggplot2-legend-look-without-affecting -một âm mưu – PatrickT

Trả lời

37

Bạn có thể làm cho các loại thay đổi bằng tay bằng cách sử dụng override.aes lập luận để guide_legend():

g <- g + guides(shape = guide_legend(override.aes = list(size = 5))) 
print(g) 
17

Bạn nên sử dụng:

theme(legend.key.size = unit(3,"line")) 
+3

IMHO là câu trả lời phù hợp hơn vì nó sử dụng 'chủ đề' được đề cập trong câu hỏi. –

+1

Mã này tăng diện tích xung quanh biểu tượng, không phải biểu tượng. Mã hướng dẫn thích hợp hơn. – LindsayLucas

4

Marius của câu trả lời không hoạt động đối với tôi kể từ phiên bản R 3.2.2. Bạn vẫn có thể gọi guide_legend() với cùng một đối số override.eas nhưng bạn cần phải chỉ định color thay vì shape trong hàm bao bọc.

Vì vậy, nếu bạn đang chạy một phiên bản mới hơn của R, hãy thử này để thay thế:

g + guides(color = guide_legend(override.aes = list(size=5))) 
Các vấn đề liên quan