2015-09-06 13 views
13

Bu, öncelikle panel.margin = unit(...) işlevinin theme() işlevinde nasıl çalıştığını yanlış anlamamın bir sonucu olabilir ... ancak kenar boşluklarını facet_wrap içinde istediğim gibi özelleştiremiyorum. Temelde, faset metni (yani strip.text) her yönüyle yerleşsin ve her yönüyle arasında hiçbir spcaing ile şöyle bir facet_grid istiyorum:ggplot2 ve facet_wrap dosyasında, tüm kenar boşluklarının ve dolguların nasıl kaldırılacağı, strip.text dosyasının nasıl saklanacağı?

(Ben her boyutu boyutlarını göstermek için pembe sınırları içinde bıraktığınız)

The ideal final product

Yani burada şimdiye kadar kod. strip.text tamamen

p + mytheme + theme(strip.text = element_blank()) 

no strip text

Çıkarma

library(ggplot2) 
library(grid) 
p <- ggplot() + 
    geom_bar(data = mtcars, aes(x = cyl, y = qsec), stat = 'identity') + 
    facet_wrap(~ carb, ncol = 3) 

mytheme <- theme_minimal() + theme(
    axis.text.x = element_blank(), 
    axis.text.y = element_blank(), 
    axis.ticks = element_blank(), 
    axis.title = element_blank(), 
    panel.margin = unit(0, "lines"), 
    panel.border = element_rect(colour = rgb(1.0, 0, 0, 0.5), fill=NA, size=1) 
) 
standart arsa
p + mytheme 

just a standard plot

:

veri ve arsa kurmak içinstrip.text ekleme ve bu

p + mytheme + 
    theme(strip.text = element_text(size = rel(3.0), vjust = -4.0)) 

test grid inset text

strip.text yeniden dahil (ve artan nispi boyutu) iki sıra arasındaki dikey kenar arttırır insetting. Bu noktada, üst ve alt sıralar arasındaki dikey boşluğu nasıl kapatacağımı bilmiyorum.

p + mytheme + 
    theme(strip.text = element_text(size = rel(3.0), vjust = -4.0), 
      panel.margin = unit(c(-2, -2), "lines")) 

Too much negative margin

Peki nasıl iki sıra arasında sadece panel.margin hedeflerim Çok fazla negatif marj?

Düzeltme: Ek bilgiler. Sıralar arasında boşluk strip.background gibi görünen:

p + mytheme + 
     theme(strip.text = element_text(size = rel(3.0), vjust = -4.0), 
       panel.margin = unit(-1, "lines"), 
       strip.background = element_rect(fill = rgb(0, 1.0, 0, 0.2))) 
theme() mümkün tartışmaların liste arasında

enter image description here

+2

Panel.margin kullanırsanız.y = birim (-2, "satır") ', sadece satırlar arasındaki boşluğu azaltırsınız. Aradığınız şey bu mu yoksa başka bir şey mi vardı? – maj

+0

@maj ... bu ... o kadar basit olamaz ... ama öyleydi. Sanırım bir yerlerde belgelemeyi özledim. Yorumunuzu cevap olarak görebilmeniz için kabul edebilir misiniz? –

+0

@maj sistemimde gerekli olan sonucu elde etmek için panel.margin.y = birim (-0.5, "satırlar") 'a ihtiyacım var – Jaap

cevap

7

, sadece panel.margin ("faset panelleri (birim) etrafında marjı", ?theme bakınız) vardır Ancak, uygun bir şekilde, aynı zamanda panel.margin.x ve panel.margin.y ile eksenlerden birine de erişebilirsiniz (“faset panelleri etrafındaki yatay/dikey kenar boşluğu (birim; panel.margin öğesinden devralınmıştır)”). Bu nedenle

, sıfırın altında marjı azalan kesmek gibi biraz hissediyor ederken, iş yapacak aşağıdaki gibi bir şey (biraz değerini ayarlamak gerekebilir - unit(-2, "lines") benim için en iyi çalıştı):

p + theme(strip.text = element_text(size = rel(3.0), vjust = -4.0), 
      panel.margin.y = unit(-2, "lines")) 

strip.text = element_blank() kullanırsanız, muhtemelen panel.margin.y = unit(-0.5, "lines") kullanmalısınız.

İlgili konular