2013-06-27 33 views
40

Một biểu đồ khác để xuất bản, một ngày khác đã biến những thứ trong ggplot2 ... Tôi có đang rên rỉ không? Tôi không chắc chắn ...Chữ cái đăng ký trong nhãn trục ggplot

dat <- data.frame(x = rnorm(100), y = rnorm(100)) 
ggplot(dat, aes(x=x,y=y)) + 
    geom_point() + 
    labs(y=expression(Blah[1])) 

dat <- data.frame(x = rnorm(100), y = rnorm(100)) 
ggplot(dat, aes(x=x,y=y)) + 
    geom_point() + 
    labs(y=expression(Blah[1d])) 

Tôi đang cố gắng tìm ra cách để có các chữ cái con trỏ trong nhãn trục. Ví dụ đầu tiên hoạt động vì nó chỉ là một số, ngay sau khi bạn có một ký tự trong dấu ngoặc vuông nó không thành công. Blah [subscript (1d)] về cơ bản là những gì tôi cần, nhưng tôi không thể tìm ra cách để có được nó để cho tôi có chữ cái trong subscript. Có biến cố trong đó có dán() vv

Tất nhiên, để thêm vào sự thất vọng ...

labs(y=expression(Blah[12])) - điều này làm việc

labs(y=expression(Blah[d])) - công trình

labs(y=expression(Blah[d1])) này - công trình này

labs(y=expression(Blah[1d])) - điều này không thành công.

Suy nghĩ?

Trả lời

41

tôi có thể nghĩ ra hai cách tốt hơn so với sử dụng paste:

ggplot(dat, aes(x=x,y=y)) + 
    geom_point() + 
    labs(y=expression(Blah[1*d])) 
ggplot(dat, aes(x=x,y=y)) + 
    geom_point() + 
    labs(y=expression(Blah["1d"])) 

Token (hoặc "tên" hay "biểu tượng") trong R không phải bắt đầu với chữ số. Vì vậy, bạn nhận được khoảng giới hạn đó bằng cách trích dẫn hoặc bằng cách tách 1d bằng dấu phân cách không dấu cách, toán tử *. Đó là "tham gia" hoặc "ligates" một chữ số nguyên chất với ký hiệu R hoặc mã thông báo hợp pháp.

Để có được một ký hiệu phần trăm unsubscripted chỉ:

ggplot(dat, aes(x=x,y=y)) + 
    geom_point() + 
    labs(y=expression(Blah[1*d]*"%")) 

Để đặt dấu ngoặc xung quanh PCT-sign:

expression(Blah[1*d]*"(%)") 

Nhân vật % đã ý nghĩa đặc biệt trong phân tích cú pháp R, vì nó báo hiệu đầu của một toán tử infix do người dùng định nghĩa. Vì vậy, để sử dụng nó như là một chữ, nó cần phải được trích dẫn.

+0

Cảm ơn DWin, không biết nó được gọi là mã thông báo. Trong khi nó không phải là trong câu hỏi (nhưng là trong câu trả lời của tôi), bạn có thể nhận được (%) sau khi subscript mà không dán? – nzcoops

+1

Tất nhiên tôi có thể. Subscripted hay không? –

+0

Không có trong chỉ số. – nzcoops

2

OK. Tôi đổ mồ hôi tôi không đăng bài này chỉ để trả lời nó bản thân mình, bất chấp một cách nhanh chóng như thế nào tôi đã nhận nó (lúc nào cũng là cách khi bạn đặt một câu hỏi ở đây là:

ggplot(dat, aes(x=x,y=y)) + 
    geom_point() + 
    labs(y=expression(Blah[1][d])) 

Nghĩ rằng nó tốt nhất để đăng câu trả lời chứ không phải loại bỏ các câu hỏi như nó có thể giúp người khác một ngày

'Blahs'. sang một bên, những gì tôi thực sự muốn là expression(paste("Hb", A[1][c]," (%)",sep=""))

Tại sao paste0() không làm việc ở đây là ngoài tôi.

+6

'paste0' không phải là hàm bản đồ. 'paste' là một hàm plotmath, ngoại trừ nó có ngữ nghĩa khác với hàm' base :: paste'. Đặc biệt nó không có đối số 'sep'. –

+0

Và trong biểu thức R, bạn cần phải trích dẫn bất kỳ ký tự đặc biệt nào như '%' hoặc các từ dành riêng như "in" –

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