2013-01-02 16 views
11

Tôi đang vẽ hai băng bán trong suốt với nhau. Sử dụng mã bên dưới, không có phần scale_fill_manual, tôi nhận được về cơ bản những gì tôi muốn, với truyền thuyết được gọi là "red" và nhãn bluered. Thêm phần scale_fill_manual cho phép tôi đặt tên cho chú thích và mục nhập của nó theo ý tôi, nhưng tôi mất tính minh bạch của các hình chữ nhật màu trong chú giải.chú thích ggplot hiển thị độ trong suốt và màu tô đầy

x=1:10 
y1=1:10 
y2=2:11 
y3=10:1 
y4=9:0 
dt=data.frame(x,y1,y2,y3,y4) 
library(ggplot2)  
ggplot(dt)+ 
    geom_ribbon(aes(x=x,ymin=y1,ymax=y2,fill='red'), 
       alpha=0.4,)+ 
    geom_ribbon(aes(x=x,ymin=y3,ymax=y4,fill='blue'), 
       alpha=0.5)+ 
    scale_fill_manual(name='legendname', 
        values=c('red','blue'), 
        labels=c('one','two')) 

sản lượng sessionInfo()

R version 2.15.2 (2012-10-26) 
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit) 

locale: 
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] scales_0.2.3 ggplot2_0.9.3 plyr_1.8  reshape2_1.2.2 

loaded via a namespace (and not attached): 
[1] colorspace_1.2-0 dichromat_1.2-4 digest_0.6.0  grid_2.15.2  gtable_0.1.2  labeling_0.1  
[7] MASS_7.3-22  munsell_0.4  proto_0.3-10  RColorBrewer_1.0-5 rstudio_0.97.248 stringr_0.6.2  
[13] tools_2.15.2 

Có rất nhiều giải pháp cho vấn đề tương tự (Customize legend in ggplot, https://stats.stackexchange.com/questions/5007/how-can-i-change-the-title-of-a-legend-in-ggplot2, vv), nhưng tôi không thể tìm thấy bất cứ điều gì mà các địa chỉ này đặc biệt.

Cảm ơn trước

Trả lời

14

Bạn có thể ghi đè lên các thẩm mỹ trong truyền thuyết bằng cách thêm:

+ guides(fill = guide_legend(override.aes= list(alpha = 0.4))) 

lời kêu gọi ggplot của bạn.

Nhưng như với hầu hết mọi thứ trong ggplot, nó có lẽ là đơn giản hơn để sắp xếp dữ liệu của bạn trong một cách mà làm cho nhiều geom_ribbon gọi không cần thiết:

dt1 <- data.frame(x = c(x,x), 
        ymin = c(y1,y3), 
        ymax = c(y2,y4), 
        grp = rep(c('red','blue'),each = 10)) 
ggplot(data = dt1,aes(x = x,ymin = ymin, ymax = ymax,fill = grp)) + 
    geom_ribbon(alpha = 0.4) + 
    scale_fill_manual(name = "legendname", 
         values = c('red','blue'), 
         labels = c('one','two')) 

enter image description here

+1

Giải pháp này làm việc cho tôi, như tôi chỉ yêu cầu 1 mức độ trong suốt [0.4]. Bạn có thể nhận xét về giải pháp sẽ thay đổi như thế nào nếu mỗi dải băng có độ trong suốt độc đáo? – RyanStochastic

+0

@RyanStochastic 'alpha' là một tính thẩm mỹ mà bản thân nó có thể được ánh xạ tới một biến giống như bất kỳ biến số nào khác. Vì vậy, bạn sẽ ánh xạ 'alpha = grp' và có thể thêm thành phần' scale_alpha_manual'. – joran

+0

Cảm ơn tất cả sự giúp đỡ của bạn. – RyanStochastic