2015-02-13 16 views
5

Tôi đã xem các câu hỏi tương tự được hỏi và thảo luận này về cách thêm chức năng vào ggplotSetting x/y lim in facet_grid. Trong nghiên cứu của tôi, tôi thường muốn sản xuất một số ô mẫu, nói cho các thử nghiệm mô phỏng khác nhau, nơi các giới hạn trục vẫn giống nhau để làm nổi bật sự khác biệt giữa các thử nghiệm. Điều này đặc biệt hữu ích khi hiển thị các ô lô trong bản trình bày. Trong mỗi cốt truyện panel tôi sản xuất, lô cá nhân yêu cầu trục y độc lập như họ thường là biến thời tiết, nhiệt độ, độ ẩm tương đối, windspeed, vv Sử dụngđặt giới hạn x/y trong facet_wrap với tỷ lệ = 'miễn phí'

ggplot() + ... + facet_wrap(~ ..., scales = 'free_y') 

hoạt động tuyệt vời như tôi có thể dễ dàng tạo ra các tấm cốt truyện khác nhau biến thời tiết. example weather variable plot panel Khi tôi so sánh giữa các ô âm mưu khác nhau, nó đẹp để có các trục nhất quán. Thật không may là ggplot không có cách nào thiết lập các giới hạn riêng lẻ của từng ô trong một ô bảng điều khiển. Nó mặc định sử dụng phạm vi dữ liệu đã cho. Thảo luận Nhóm Google được liên kết ở trên thảo luận về thiếu sót này, nhưng tôi không thể tìm thấy bất kỳ cập nhật nào về việc liệu điều này có thể được thêm vào hay không. Có cách nào để lừa ggplot để đặt giới hạn riêng lẻ không?

Trả lời

6

Một gợi ý đầu tiên mà hơi sidesteps giải pháp tôi đang tìm là kết hợp tất cả dữ liệu của tôi vào một bảng dữ liệu và sử dụng facet_grid trên biến và mô phỏng của tôi

ggplot() + ... + facet_grid(variable~simulation, scales = 'free_y') 

Điều này tạo ra một âm mưu trông vẫn khoẻ mạnh hiển thị dữ liệu trong một hình, nhưng có thể trở nên khó sử dụng khi xem xét nhiều mô phỏng. facet_grid solution

Để 'hack' âm mưu sản xuất những gì tôi muốn, trước tiên tôi xác định giới hạn nào mình muốn cho mỗi biến thời tiết. Những giới hạn này được tìm thấy bằng cách xem xét các mức độ lớn nhất cho tất cả các mô phỏng quan tâm. Sau khi xác định tôi đã tạo một bảng dữ liệu nhỏ với các cột giống như dữ liệu mô phỏng của tôi và nối nó vào cuối. dữ liệu mô phỏng của tôi có cấu trúc

'year' 'month' 'variable' 'run' 'mean' 
    1973  1  'rhmax'  1 65.44 
    1973  2  'rhmax'  1 67.44 
    ...  ...  ...  ... ... 
    2011 12 'windmin' 200 0.4 

Vì vậy, tôi đã tạo ra một bảng dữ liệu mới với các cột tương tự

ylims.sims <- data.table(year = 1, month = 13, 
    variable = rep(c('rhmax','rhmin','sradmean','tmax','tmin','windmax','windmin'), each = 2), 
    run = 201, mean = c(20, 100, 0, 80, 100, 350, 25, 40, 12, 32, 0, 8, 0, 2)) 

Mà cho

'year' 'month' 'variable' 'run' 'mean' 
     1  13  'rhmax' 201 20 
     1  13  'rhmax' 201 100 
     1  13  'rhmin' 201 0 
     1  13  'rhmin' 201 80 
     1  13 'sradmean' 201 100 
     1  13 'sradmean' 201 350 
     1  13  'tmax'  201 25 
     1  13  'tmax'  201 40 
     1  13  'tmin'  201 12 
     1  13  'tmin'  201 32 
     1  13 'windmax' 201 0 
     1  13 'windmax' 201 8 
     1  13 'windmin' 201 0 
     1  13 'windmin' 201 2 

Trong khi lựa chọn nămchạy là sự lựa chọn của sự lựa chọn của tháng nee d là bất cứ điều gì bên ngoài 1:12. Sau đó, tôi đã thêm dữ liệu này vào dữ liệu mô phỏng của mình

sim1data.ylims <- rbind(sim1data, ylims) 
    ggplot() + geom_boxplot(data = sim1data.ylims, aes(x = factor(month), y = mean)) + 
    facet_wrap(~variable, scale = 'free_y') + xlab('month') + 
    xlim('1','2','3','4','5','6','7','8','9','10','11','12') 

Khi tôi vẽ các giá trị trục này với giá trị trục y, tôi giới hạn giá trị trục x cho dữ liệu gốc. Bảng dữ liệu được nối thêm với các giới hạn y có tháng giá trị là 13. Vì ggplot vẫn cân các trục với toàn bộ tập dữ liệu, ngay cả khi các trục bị giới hạn, điều này cho tôi giới hạn y mà tôi mong muốn. Quan trọng cần lưu ý rằng nếu có giá trị dữ liệu lớn hơn giới hạn bạn chỉ định, điều này sẽ không hoạt động.

Trước: Chú ý sự khác biệt về giới hạn y cho từng biến thời tiết giữa các bảng.

before sims before sims covars

Sau: Bây giờ các giới hạn y vẫn còn phù hợp cho mỗi biến thời tiết giữa các tấm. enter image description here

enter image description here

tôi hy vọng sẽ chỉnh sửa bài đăng này trong những ngày tới và thêm một ví dụ tái sản xuất cho lời giải thích tốt hơn. Vui lòng nhận xét nếu bạn đã nghe bất kỳ điều gì về việc thêm chức năng này vào ggplot.

+0

tôi tin rằng nếu bạn định hiển thị đường xu hướng hoặc một số loại chỉ số bạn muốn sử dụng scale_x_discrete (llmits = ...). xlim là viết tắt của coord_cartesian, về cơ bản chỉ là một zoom và do đó ggplot sẽ tính toán một stat với dữ liệu được nối thêm. có thể ai đó có thể xác nhận. – Dominik

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