2015-12-12 18 views
9

Tôi đã gặp phải một trở ngại khi viết một hàm ggplot. Tôi đang cố gắng để thay đổi nhãn khía cạnh trong một âm mưu ggplot facet_wrap .... nhưng minh của nó phức tạp hơn so với tôi mặc dù nó sẽ là ....ggplot đổi tên nhãn mặt trong facet_wrap

Các dữ liệu tôi đang sử dụng có thể được truy cập tại đây

str(ggdata) 
'data.frame': 72 obs. of 8 variables: 
$ Season : Factor w/ 3 levels "Autumn","Spring",..: 2 2 2 2 2 2 2 2 2 2 ... 
$ Site : Factor w/ 27 levels "Afon Cadnant",..: 13 13 13 13 13 13 13 13 13 13 ... 
$ Isotope: Factor w/ 4 levels "14CAA","14CGlu",..: 1 1 1 1 1 1 2 2 2 2 ... 
$ Time : int 0 2 5 24 48 72 0 2 5 24 ... 
$ n  : int 3 3 3 3 3 3 3 3 3 3 ... 
$ mean : num 100 88.4 80.7 40.5 27.6 ... 
$ sd  : num 0 1.74 2.85 2.58 2.55 ... 
$ se  : num 0 1 1.65 1.49 1.47 ... 

tôi đã viết các chức năng sau đây để tạo ra các ggplot trong đó sử dụng các mức yếu tố đồng vị dán nhãn các khía cạnh:

plot_func <- function(T) {site_plots <- ggplot(data = T) + geom_point(aes(Time, mean, colour = Season, shape = Season)) + 
    geom_line(aes(Time, mean, colour = Season, linetype = Season)) + 
    geom_errorbar(aes(Time, mean, ymax = (mean + se), ymin = (mean - se)), width = 2) + 
    labs(title = T$Site[1], y = "Percentage of isotope remaining in solution", x = "Time (h)") + 
    scale_x_continuous(breaks=c(0, 24, 48, 72)) + 
    scale_y_continuous(limits=c(0,115), breaks = c(0,25,50,75,100)) + 
    theme(axis.title.y = element_text(vjust = 5)) + 
    theme(axis.title.x = element_text(vjust = -5)) + theme(plot.title = element_text(vjust = -10)) + 
    theme_bw() + facet_wrap(~Isotope, ncol =2) 
    print(site_plots) 
    ggsave(plot = site_plots, filename = paste(T$Site[1], ".pdf"), 
    path = "C:/Users/afs61d/Dropbox/Academic/R/Practice datasets/Helens_data/Site_Isotope_Season_plots/", 
    width = 9, height = 7, dpi = 300)} 

Kết quả trong đồ thị đáng yêu này:

enter image description here

Đó là tốt đẹp nhưng tôi muốn thay đổi nhãn khía cạnh bây giờ ... Sau khi thực hiện một số poking xung quanh google tôi nghĩ rằng tôi có thể có thể sử dụng labeller chức năng như một cuộc tranh cãi để vượt qua để facet_wrap. Sau một giờ bực bội, tôi phát hiện ra rằng điều này chỉ hoạt động với facet_grid !!! ??? Vì vậy, một phương pháp khác là để thay đổi tên mức Yếu tố để cho tôi các nhãn khía cạnh mà tôi muốn ::

gdata$Isotope <- revalue(x = ggdata$Isotope, 
c("14CAA" = " 14C Amino Acids", "14CGlu" = "14C Glucose", 
    "14cGlu6P" = "14C Glucose-6-phosphate", "33P" = "33P Phosphate")) 

này hoạt động, nhưng vấn đề tôi có bây giờ là tôi muốn các con số trong các nhãn để được siêu kịch bản. Bất cứ ai có thể đề xuất cách tốt nhất để đạt được điều này? Cảm ơn

+0

Tôi nghĩ rằng "-máy dán nhãn" có sẵn cho facet_wrap trong phiên bản phát triển của ggplot: http://docs.ggplot2.org/dev/facet_wrap.html –

+0

@BenBolker Thanks ... đó sẽ là rất hữu ích - làm thế nào tôi có thể cài đặt nó? –

+0

@ eipi10 Tôi không nghĩ 'labeller' có thể được chuyển tới' facet_wrap' ... đó là mấu chốt của vấn đề –

Trả lời

3

Quản lý sắp xếp! Đã xảy ra sự cố khi cài đặt phiên bản phát triển của ggplot nhưng sau khi cài đặt curldevtools và cài đặt lại scales hoạt động. Tôi cố gắng @ eipi10 câu trả lời nhưng không thể nhận được rằng để làm việc vì vậy tôi đã thay đổi tên nhãn yếu tố theo một cách khác:

ggdata$Isotope <- factor(ggdata$Isotope, labels = c("NULL^14*C~Amino~Acids", 
"NULL^14*C~Glucose", "NULL^14*C~Glucose-6-phosphate", "NULL^33*P~Phosphate")) 

sau đó tôi điều chỉnh các chức năng ggplot để vượt qua labeller = label_parsed đến facet_wrap chức năng:

plot_func <- function(T) {site_plots <- ggplot(data = T) + geom_point(aes(Time, mean, colour = Season, shape = Season)) + 
    geom_line(aes(Time, mean, colour = Season, linetype = Season)) + 
    geom_errorbar(aes(Time, mean, ymax = (mean + se), ymin = (mean - se)), width = 2) + 
    labs(title = T$Site[1], y = "Percentage of isotope remaining in solution", x = "Time (h)") + 
    scale_x_continuous(breaks=c(0, 24, 48, 72)) + 
    scale_y_continuous(limits=c(0,115), breaks = c(0,25,50,75,100)) + 
    theme(axis.title.y = element_text(vjust = 5)) + 
    theme(axis.title.x = element_text(vjust = -5)) + theme(plot.title = element_text(vjust = -10)) + 
    theme_bw() + facet_wrap(~Isotope, ncol =2, labeller = label_parsed) 
    print(site_plots) 
    ggsave(plot = site_plots, filename = paste(T$Site[1], ".pdf"), 
    path = "C:/Users/afs61d/Dropbox/Academic/R/Practice datasets/Helens_data/Site_Isotope_Season_plots/", 
    width = 9, height = 7, dpi = 300)} 

Chuyển số ggdata đến plot_func cung cấp cho tôi các biểu đồ bên dưới có nhãn nhãn chính xác.

enter image description here

6

Đặt nhãn khuôn mặt thành các biểu thức thích hợp, sau đó sử dụng chức năng labellerlabel_parsed để đảm bảo chúng được hiển thị chính xác. Dưới đây là một ví dụ, bằng cách sử dụng khung iris dữ liệu built-in:

data(iris) 
iris$Species = as.character(iris$Species) 
iris$Species[iris$Species == "virginica"] = "NULL^14*C~Amino~Acids" 

ggplot(iris, aes(Sepal.Width, Sepal.Length)) + 
    geom_point() + 
    facet_wrap(~ Species, labeller=label_parsed) 

Bạn cần phải thêm NULL trước ^14*C hoặc bạn sẽ nhận được một lỗi do có ^ như nhân vật ban đầu. *~ đánh dấu ranh giới của từng phần của biểu thức, tùy thuộc vào việc bạn không hoặc không muốn có khoảng trắng giữa mỗi phần.

Theo văn bản này (ngày 12 tháng 12 năm 2015), bạn cần sử dụng phiên bản phát triển của ggplot2 để làm việc này với facet_wrap. Tuy nhiên, tính năng này có lẽ sẽ sớm được đưa vào bản phát hành thường xuyên của gói.

enter image description here

+1

lừa gọn gàng với "NULL" để kích hoạt chữ viết tắt ban đầu. Nhưng câu hỏi của OP là về 'facet_wrap', không phải là' facet_grid'. – Matt74

+0

@ eipi10 cảm ơn nhưng điều này sẽ không làm việc với 'facet_wrap' ... hữu ích để xem' label_parsed' trong hành động mặc dù –

+2

Tôi đã cập nhật để sử dụng 'facet_wrap', cũng hoạt động. Tôi đang sử dụng phiên bản phát triển của ggplot ('ggplot2_1.0.1.9003'). Có lẽ nó không hoạt động trong bản phát hành CRAN mới nhất? – eipi10

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