2015-05-04 47 views
9

Điều này có thể kết thúc là câu hỏi expression hoặc call, nhưng tôi đang cố định định dạng theo điều kiện các nhãn trục riêng lẻ.Định dạng động các nhãn trục riêng lẻ trong ggplot2

Trong ví dụ sau, tôi muốn chọn lọc đậm một trong những nhãn trục:

library(ggplot2) 

data <- data.frame(labs = c("Oranges", "Apples", "Cucumbers"), counts = c(5, 10, 12)) 

ggplot(data = data) + 
    geom_bar(aes(x = labs, y = counts), stat="identity")` 

No Bolding

Có vấn đề tương tự here, nhưng các giải pháp liên quan đến themeelement_text. Tôi đang cố gắng sử dụng nhãn trục trực tiếp.

tôi có thể làm điều này bằng tay như sau:

breaks <- levels(data$labs) 
labels <- breaks 
labels[2] <- expression(bold("Cucumbers")) 

ggplot(data = data) + 
    geom_bar(aes(x = labs, y = counts), stat="identity") + 
    scale_x_discrete(label = labels, breaks = breaks) 

Bolded

Nhưng, nếu tôi cố gắng để làm điều đó bằng cách đánh chỉ số thay vì gõ ra "Dưa chuột", tôi nhận được lỗi sau:

breaks <- levels(data$labs) 
labels <- breaks 
labels[2] <- expression(bold(labels[2])) 

ggplot(data = data) + 
    geom_bar(aes(x = labs, y = counts), stat="identity") + 
    scale_x_discrete(label = labels, breaks = breaks) 

Mà làm cho s ense, bởi vì nó không đánh giá labels[2]. Nhưng, có ai biết làm thế nào để ép buộc nó để làm điều đó? Cảm ơn.

Trả lời

11

Làm thế nào về

breaks <- levels(data$labs) 
labels <- as.expression(breaks) 
labels[[2]] <- bquote(bold(.(labels[[2]]))) 

ggplot(data = data) + 
    geom_bar(aes(x = labs, y = counts), stat="identity") + 
    scale_x_discrete(label = labels, breaks = breaks) 

Ở đây chúng ta là rõ ràng hơn về việc chuyển đổi để thể hiện và chúng tôi sử dụng bquote() để chèn giá trị của nhãn vào các biểu hiện riêng của mình.

+0

Có! 'bquote' và'.() 'là những gì tôi cần. Cảm ơn. Có một sự ghi nhớ cho tên hàm đó không? Báo giá ngược? – Sealander

+0

Từ trang trợ giúp, đó là "một tương tự của macro LISP backquote" vì vậy nó khá gần. – MrFlick

+0

@MrFlick Tôi làm cách nào để thực hiện việc này cho nhiều mục? Ví dụ cho vị trí 2 và 3? Và tôi cũng có thể làm điều này bằng cách chỉ định tên các yếu tố, ví dụ: "Dưa chuột" và "Cam"? Cảm ơn! – Stefan

2

lựa chọn khác là để thiết lập mặt chữ động với theme, mặc dù tôi không chắc chắn nếu điều này là trong bất kỳ ý nghĩa một phương pháp tốt hơn hoặc tồi tệ hơn câu trả lời @ MrFlick của:

breaks <- levels(data$labs) 

# Reference breaks by name 
toBold = "Cucumbers" 

ggplot(data = data) + 
    geom_bar(aes(x = labs, y = counts), stat="identity") + 
    scale_x_discrete(label = labels, breaks = breaks) + 
    theme(axis.text.x= 
     element_text(face=ifelse(breaks %in% toBold, "bold", "plain"))) 

# Reference breaks by position 
label.index=2 

ggplot(data = data) + 
    geom_bar(aes(x = labs, y = counts), stat="identity") + 
    scale_x_discrete(label = labels, breaks = breaks) + 
    theme(axis.text.x= 
     element_text(face=ifelse(breaks %in% labels[match(label.index, 1:length(breaks))], 
           "bold", "plain"))) 
Các vấn đề liên quan