2015-05-27 14 views
5

Bazı ggplot2 grafiklerine başlıklar koymaya çalışırken başlıklar olmadan bazılarını bırakmaya çalışıyorum. Ne yazık ki, başlık ayarlandığında, y ekseni ve arsa küçülüyor (sağdaki çizime bakın). Başlığı, Y ekseni boyutunu değiştirmeden çizmem gerekiyor, böylece başlıklı grafikler diğerleriyle aynı ölçekte (orta grafikte olduğu gibi). show ggplot2 title bunun için yer ayırmadan

grid.arrange(
    (ggplot(mtcars, aes(mpg, hp)) + geom_point()), 
    (ggplot(mtcars, aes(mpg, hp)) + geom_point() + 
    geom_text(aes(22.5, 340, label="fake title", vjust = 1, hjust = .5, show_guide = FALSE))), 
    (ggplot(mtcars, aes(mpg, hp)) + geom_point() + 
    labs(title="real title")), 
    ncol=3) 

plot sample

ben alan üzerine kısa çünkü ben, diğer parseller üzerinde sahte boş dize başlıkları kullanamazsınız

. geom_text() yöntemini kullanabilirim, bana daha az bozuk görünmesini nasıl sağlayabileceğini söyleyebilirim. Öyleyse, arsa üstünde ve üstünde arsa başlığını göstermeye çalışırken, başlık için herhangi bir ayrılmış alanı nasıl kaldırırım? İkincisi theme(plot.title = element_text(vjust=-1)) ile yapılır.)

+2

'geom_text' yerine' annotate (geom = "text") 'kullan '' – Gregor

+0

@Gregor: Önerdiğiniz şeyi yaptım, bu yüzden bir cevap olarak yazabilirsem krediyi vereceğim. Eğer değilse, Matthew Plourde'un cevabını kabul edildi olarak işaretleyeceğim. –

cevap

2

. geom_text'u kullanırsanız, verilerinizde satırlar olduğu kadar çok etiket basacaktır, dolayısıyla sorunuzdaki zayıf görünümlü fazladan işaretlenmiş etiket. Acı verici bir çalışma, geom_text katmanı için veri olarak kullanılacak 1 satırlık bir veri çerçevesi oluşturmaktır. Bununla birlikte, annotate bu tür bir şey için tasarlanmıştır, bu yüzden bir işinize ihtiyacınız yoktur. Gibi bir şey:

annotate(geom = "text", x = 22.5, y = 340, label="fake title") 

iyi bir uygulamadır. Annotate ayrıca bir arsaya tek yatay veya dikey çizgiler eklemek veya etrafındaki bir dikdörtgen çizerek bir bölgeyi vurgulamak için kullanışlıdır.

3

Düzenleme Teşekkür Bunu gerçekleştirmek için daha kısa bir yol işaret için @baptiste için. Aşağıdan, p1p2 ve p3 Verilen:

pl = lapply(list(p1,p2,p3), ggplotGrob) 
grid.newpage() 
grid.draw(do.call(cbind, c(pl, size="first"))) 

Orijinal cevap

Sen ggplot Grobs inşa etmek ve araziler üzerinde heights parametreyi standartlaştırabilirsiniz:

p1 <- ggplot(mtcars, aes(mpg, hp)) + geom_point() 
p2 <- ggplot(mtcars, aes(mpg, hp)) + geom_point() + labs(title="real title") 
p3 <- ggplot(mtcars, aes(mpg, hp)) + geom_point() + 
    geom_text(aes(22.5, 340, label="fake title", vjust = 1, hjust = .5, show_guide = FALSE)) 

p1 <- ggplot_gtable(ggplot_build(p1)) 
p2 <- ggplot_gtable(ggplot_build(p2)) 
p3 <- ggplot_gtable(ggplot_build(p3)) 

p2$heights <- p1$heights 
p3$heights <- p1$heights 

grid.arrange(p1, p2, p3, ncol=3) 

enter image description here

İsterseniz

Daha sonra, arsa kapalı veya başka arsa üzerine taşımak için başlığın vjust ayarını kullanabilirsiniz: Bunun için annotate kullanmalıdır

p2 <- ggplot(mtcars, aes(mpg, hp)) + geom_point() + 
    labs(title="real title") + 
    theme(plot.title=element_text(vjust=-.3)) 

enter image description here

+3

gtable grid.arrange, 'pl = lapply'den (list (p1, p2, p3), ggplotGrob) daha uygundur; grid.newpage(); grid.draw (do.call (cbind, c (pl, size = "ilk"))). Ayrıca, anonim() 'in, şu anda metnin birden çok sürümünü yığması nedeniyle geom_text'den daha iyi olacağını unutmayın. – baptiste

+0

Teşekkürler, Baptiste. Cevabınızı önerinizi içerecek şekilde güncelledim. –