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.
Để '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ăm và chạ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.
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.
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.
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