2013-01-06 28 views
5

Giả sử tôi có dữ liệu và cốt truyện như sau:nhãn Facet liên quan đến một biểu tượng greek

mydata = data.frame(x=rnorm(4), y=runif(4), tau=c(0,0,1,1)) 
ggplot(mydata) + geom_point(aes(x=x, y=y)) + facet_wrap(~ tau) 

Tôi muốn các nhãn khía cạnh để đọc "tau = 0" và "tau = 1", tương ứng, với tau được định dạng làm biểu tượng Hy Lạp của nó. Tôi biết từ another question rằng việc sử dụng labeller label_parsed sẽ tự định dạng tau thư, nhưng dấu bằng có vẻ phức tạp. Một giải pháp lý tưởng sẽ không yêu cầu tôi thay đổi dữ liệu (ví dụ: tạo một yếu tố và đặt tên cho cấp độ của nó), nhưng tôi sẽ thực hiện bất kỳ công việc nào :)

Trả lời

8

đây là một giải pháp với các mức độ của nó.

mydata = data.frame(x=rnorm(4), y=runif(4), tau=c(0,0,1,1)) 
ggplot(mydata) + geom_point(aes(x=x, y=y)) + 
     facet_grid(~ tau,labeller = label_bquote(tau^.(x))) 

enter image description here

Sửa Để có được "tau = 0" và "tau = 1"

facet_grid(~ tau,labeller = label_bquote(tau == .(x))) 

Edit2 biến sigma thứ hai

Tôi thấy giải pháp này , bằng cách xác định một labeller tùy chỉnh. Hy vọng ai đó (ggplot2 guys) cho tôi một giải pháp đơn giản hơn.

enter image description here

my.label_bquote <- function (expr1 = (tau == .(x)),expr2 = (sigma == .(x))) 
{ 
    quoted1<- substitute(expr1) 
    quoted2 <- substitute(expr2) 
    function(variable, value) { 
     value <- as.character(value) 
     if(variable == 'tau') 
     lapply(value, function(x) 
       eval(substitute(bquote(expr1, list(x = x)),list(expr1 = quoted1)))) 
     else 
     lapply(value, function(x) 
       eval(substitute(bquote(expr2, list(x = x)),list(expr2 = quoted2)))) 
    } 
} 

mydata = data.frame(x=rnorm(4), y=runif(4), tau=c(0,0,1,1),sigma=c(2,2,3,3)) 
ggplot(mydata) + geom_point(aes(x=x, y=y)) + 
    facet_grid(sigma ~ tau,labeller = my.label_bquote()) 
+0

Nice! Điều này cũng có thể được mở rộng thành hai chiều không? Ví dụ. nếu tôi có sigma biến thứ hai, tôi muốn khía cạnh, sử dụng 'facet_grid'. – mitchus

+2

@mitchus Tôi cập nhật giải pháp của mình để thêm biến số thứ hai .. – agstudy

+0

Cảm ơn rất nhiều, hoạt động tuyệt vời! – mitchus

Các vấn đề liên quan