2016-04-21 13 views
3

スクリーンショットに示すように、ファセットラップにy軸を追加することはできますが、最初の行のみを追加できますか?ggplot2ファセット折り返し:最初の行のy軸目盛り

私のプロットのためのコード:

library(ggplot2) 

mydf <- read.csv('https://dl.dropboxusercontent.com/s/j3s5sov98q9yvcv/BPdf_by_NB') 

ggplot(data = mydf) + 
    geom_line(aes(x = YEARMONTH, y = NEWCONS, group = 1), color="darkseagreen3") + 
    geom_line(aes(x = YEARMONTH, y = DEMOLITIONS, group = 1), color = "black") + 
    theme_minimal() + 
    labs(title="New constructions Vs Demolitions (2010 - 2014)\n") + 
    theme(axis.line = element_blank(), 
     axis.title.x = element_blank(), 
     axis.title.y = element_blank(), 
     axis.text.x = element_blank(), 
     axis.text.y = element_blank()) + 
    facet_wrap(~ NB) 

結果:

ggplot2 facet wrap

(私はスケールを配置したい場所の凡例を手動で追加しました)

答えて

4

この考えはthis答えから取られました。私たちは、後でいくつかのgrobsを削除することができるように選択的

p <- ggplot(data = mydf) + 
    geom_line(aes(x = YEARMONTH, y = NEWCONS, group = 1), color="darkseagreen3") + 
    geom_line(aes(x = YEARMONTH, y = DEMOLITIONS, group = 1), color = "black") + 
    theme_minimal() + 
    labs(title="New constructions Vs Demolitions (2010 - 2014)\n") + 
    theme(axis.line = element_blank(), 
       axis.title.x = element_blank(), 
       axis.text.x = element_blank()) + 
    facet_wrap(~ NB) 

は、themeコールの変化に注意してください。

library(gtable) 
p_tab <- ggplotGrob(p) 
print(p_tab) 

したがって、左軸のアイテムのうち4つを削除します。そこ正規表現を使用してgtable_filter機能ですが、(私が正しい正規表現を作ることができなかったので)単純な負のサブセット化を行い、私自身の関数を記述する方が簡単だった:ほとんどそこ

gtable_filter_remove <- function (x, name, trim = TRUE){ 
    matches <- !(x$layout$name %in% name) 
    x$layout <- x$layout[matches, , drop = FALSE] 
    x$grobs <- x$grobs[matches] 
    if (trim) 
     x <- gtable_trim(x) 
    x 
} 

p_filtered <- gtable_filter_remove(p_tab,name = paste0("axis_l-",5:16),trim=FALSE) 

library(grid) 
grid.newpage() 
grid.draw(p_filtered) 

enter image description here

+0

!今は私が必要としないy軸ラベル( "NEWCONS")があります。ちょうどその場合、スケールを維持しながらラベルを避けることは可能ですか? – HAVB

+0

@HAVBああ、私はあなたの元の 'テーマ'呼び出しからそれを取り除くのはあまりにも積極的だったと思う。私はあなたがそれを戻すだけでいいと思います。 – joran

+0

@HAVB ...これは、 'axis.title.y = element_blank()'を 'labs()'の 'y = NULL'に戻すという意味です。 – joran

関連する問題