Pierwsza sugestia, że nieco pomija rozwiązanie szukam jest połączyć wszystkie moje dane w jednej tabeli danych i używać facet_grid w moim zmiennej i symulacji
ggplot() + ... + facet_grid(variable~simulation, scales = 'free_y')
Daje to znakomitą patrząc działkę wyświetla dane na jednej figurze, ale może stać się nieporęczny przy wielu symulacjach.
Aby "zhakować" spisek w produkcję tego, co chcę, najpierw ustaliłem, które granice pożądane dla każdej zmiennej pogodowej. Limity te zostały ustalone na podstawie największego zakresu wszystkich symulacji będących przedmiotem zainteresowania. Po ustaleniu stworzyłem małą tabelę danych z tymi samymi kolumnami co moje dane symulacyjne i dołączyłem ją do końca. Moje dane symulacja miała strukturę
'year' 'month' 'variable' 'run' 'mean'
1973 1 'rhmax' 1 65.44
1973 2 'rhmax' 1 67.44
... ... ... ... ...
2011 12 'windmin' 200 0.4
Więc stworzyliśmy nową tabelę danych z tych samych kolumn
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))
co daje
'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
Chociaż wybór roku i metę jest aribtrary, wybór miesiąc nee d być kimkolwiek poza 1:12. Następnie dodawana to na przetwarzanie danych symulacyjnych
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')
Kiedy wykreślić te dane z ograniczeń T ograniczę wartości oś X jak w pierwotnych danych. Dołączona tabela danych z limitami y ma miesiąc wartości 13. Ponieważ ggplot wciąż skaluje osie do całego zbioru danych, nawet gdy osie są ograniczone, daje mi to moje granice, których pragnę. Ważne jest, aby pamiętać, że jeśli są wartości danych większe niż określone przez Ciebie limity, to nie zadziała.
Przed: Należy zauważyć różnice w limitach y dla każdej zmiennej pogodowej między panelami.
Po: Teraz granice y pozostają spójne dla każdej zmiennej pogody pomiędzy panelami.
Mam nadzieję, edytować ten post w najbliższych dniach i dodać powtarzalne przykład dla lepszego wyjaśnienia. Proszę o komentarz, jeśli słyszałeś coś o dodaniu tej funkcji do ggplot.
Wierzę, że jeśli zamierzasz pokazać linię trendu lub jakieś statystyki, powinieneś użyć scale_x_discrete (llmits = ...). xlim jest skrótem dla coord_cartesian, który jest w zasadzie tylko powiększeniem, więc ggplot obliczyłby stat z dodanymi danymi. może ktoś może potwierdzić. – Dominik