2010-11-05 34 views
21

Trong ví dụ sau, làm cách nào để đặt ylims riêng cho từng khía cạnh của tôi?Làm thế nào để kiểm soát ylim cho một cốt truyện có khía cạnh khác nhau với ggplot2?

qplot(x, value, data=df, geom=c("smooth")) + facet_grid(variable ~ ., scale="free_y") 

Trong mỗi khía cạnh, trục y có phạm vi giá trị khác nhau và tôi muốn ylims khác nhau cho từng khía cạnh.

Ylims mặc định quá dài cho xu hướng mà tôi muốn xem.

Trả lời

12

Đây là brought up on the ggplot2 mailing list một thời gian ngắn trước đây. Những gì bạn đang yêu cầu hiện tại là không thể nhưng tôi nghĩ rằng nó đang được tiến hành.

+11

bất kỳ tin tức về điều này? Bây giờ có thể không? – Ignacio

5

Theo như tôi biết, điều này chưa được triển khai trong ggplot2. Tuy nhiên một cách giải quyết khác - điều đó sẽ cho bạn ylims vượt quá những gì ggplot cung cấp tự động - là thêm "dữ liệu nhân tạo". Để giảm ylims chỉ đơn giản là loại bỏ các dữ liệu bạn không muốn âm mưu (xem tại và cho một ví dụ).

Dưới đây là một ví dụ:

Chúng ta hãy chỉ cần thiết lập một số dữ liệu giả mà bạn muốn âm mưu

df <- data.frame(x=rep(seq(1,2,.1),4),f1=factor(rep(c("a","b"),each=22)),f2=factor(rep(c("x","y"),22))) 
df <- within(df,y <- x^2) 

nào chúng ta có thể âm mưu sử dụng biểu đồ đường

p <- ggplot(df,aes(x,y))+geom_line()+facet_grid(f1~f2,scales="free_y") 
print(p) 

Giả sử chúng ta muốn cho y bắt đầu tại -10 ở hàng đầu tiên và 0 ở hàng thứ hai, vì vậy chúng tôi thêm một điểm tại (0, -10) vào ô phía trên bên trái và tại (0,0) ot âm dưới bên trái:

ylim <- data.frame(x=rep(0,2),y=c(-10,0),f1=factor(c("a","b")),f2=factor(c("x","y"))) 
dfy <- rbind(df,ylim) 

Bây giờ bằng cách giới hạn x quy mô từ 1 đến 2 những điểm cộng thêm không được vẽ (một cảnh báo được đưa ra):

p <- ggplot(dfy,aes(x,y))+geom_line()+facet_grid(f1~f2,scales="free_y")+xlim(c(1,2)) 
print(p) 

Same sẽ làm việc cho việc mở rộng biên độ trên bằng cách thêm điểm với cao y giá trị tại các giá trị x nằm ngoài phạm vi của xlim.

này sẽ không hoạt động nếu bạn muốn giảm bớt ylim, trong trường hợp này Subsetting dữ liệu của bạn sẽ là một giải pháp, ví dụ để hạn chế hàng trên nằm trong khoảng -10 và 1,5 bạn có thể sử dụng:

p <- ggplot(dfy,aes(x,y))+geom_line(subset=.(y < 1.5 | f1 != "a"))+facet_grid(f1~f2,scales="free_y")+xlim(c(1,2)) 
print(p) 
Các vấn đề liên quan