2014-07-12 22 views
10

İki ayrı çizimi istiyorum. Onları bir beamer sunumunun farklı çerçevelerinde kullanıyorum ve diğerine bir satır ekleyeceğim (en sonunda aşağıdaki örnekte değil). Bu yüzden sunumun bir slayttan bir sonraki slayda "atlama" ("atlama"?) Yapmasını istemiyorum. Çizginin doğal olarak eklenmiş gibi görünmesini isterim. Aşağıdaki kodu inanıyorum sorunu gösterir. Bu ince, ama ikinci arsa arsa alanı ilk arsa biraz daha büyük değil. Bu y ekseni etiketi nedeniyle olur.Tüm plot bileşenlerini aynı boyutta ggplot2 içinde iki parsel arasında tutunuz.

library(ggplot2) 

dfr1 <- data.frame(
    time = 1:10, 
    value = runif(10) 
) 

dfr2 <- data.frame(
    time = 1:10, 
    value = runif(10, 1000, 1001) 
) 

p1 <- ggplot(dfr1, aes(time, value)) + geom_line() + scale_y_continuous(breaks = NULL) + scale_x_continuous(breaks = NULL) + ylab(expression(hat(z)==hat(gamma)[1]*time+hat(gamma)[4]*time^2)) 
print(p1) 
dev.new() 
p2 <- ggplot(dfr2, aes(time, value)) + geom_line() + scale_y_continuous(breaks = NULL) + scale_x_continuous(breaks = NULL) + ylab(".") 
print(p2) 
Birkaç ayarlarında bu tekniği kullanacak çünkü böyle elle eksen etiketin boyutunu ayarlamak veya x-ekseni üzerinde boşluk ekleme gibi bir hackish çözüm yok tercih ediyorum

, (aşağıda bir referans bakınız) ve etiketler her zaman değişebilir (tekrarlanabilirliği severim, bu yüzden esnek bir çözüm istiyorum).

Ben çok aranan ediyorum ve aşağıdaki bulduk:

Specifying ggplot2 panel width

How can I make consistent-width plots in ggplot (with legends)?

https://groups.google.com/forum/#!topic/ggplot2/2MNoYtX8EEY

How can I add variable size y-axis labels in R with ggplot2 without changing the plot width?

Benim için çalışmaz, başta çünkü ben ayrı parsellere ihtiyaç var, bu yüzden hizalama meselesi değil Yukarıdaki çözümlerin bazılarında olduğu gibi birleştirilmiş bir arsa üzerinde sanal olarak.

cevap

8

denemedim, ama bu

gl <- lapply(list(p1,p2), ggplotGrob) 
library(grid) 
widths <- do.call(unit.pmax, lapply(gl, "[[", "widths")) 
heights <- do.call(unit.pmax, lapply(gl, "[[", "heights")) 
lg <- lapply(gl, function(g) {g$widths <- widths; g$heights <- heights; g}) 
grid.newpage() 
grid.draw(lg[[1]]) 
grid.newpage() 
grid.draw(lg[[2]]) 
+0

Bu gerçekten işe yarıyor. Ben çok merak ediyorum. Neden kendini denemedin? Zamanın R'ye yapıştırılmasının 5 saniye olduğunu sanıyorum ama belki de R.'ye erişiminiz yoktu. Bunların hepsini test edilmeden hafızadan yapabildiniz mi? Her durumda, yaratıcı çözümünüz için teşekkür ederim. –

2

nasıl p2 için bu kullanma hakkında:

p2 <- ggplot(dfr2, aes(time, value)) + geom_line() + 
    scale_y_continuous(breaks = NULL) + 
    scale_x_continuous(breaks = NULL) + 
    ylab(expression(hat(z)==hat(gamma)[1]*time+hat(gamma)[4]*time^2)) + 
    theme(axis.title.y=element_text(color=NA)) 

Bu p1 aynı etiketin bulunduğu, ancak görüntülenmez böylece renk NA olduğunu. color="white"'u da kullanabilirsiniz.

+0

Bu çok iyi bir fikir, işe yarayabilir. Teşekkür ederim. Ancak p2'de bir y etiketine ihtiyacım var. Benim örneğimde "ylab (". ")' Var. –

+0

Yanıtları https://groups.google.com/forum/#!topic/ggplot2/s5Euy1orwLY adresinde ayarlamaya çalıştım ancak uyum sağlamada başarısız oldu. –

İlgili konular