2017-01-26 4 views
2

facet_grid()を使用して3つの時系列を表示しようとしていますが、スペースを節約するために、それらのパネル間隔を減らしています。問題は、縦軸が重なっているため、中央のプロットでのみ右に移動したいのです。軸のテキストを1つのファセットから削除する

これはggplot2では不可能と思われるので、私がしようとしているのは、すべての軸をレンダリングしてから、それを削除してgtableを編集することですが、これまでは成功しませんでした。

これは最低限の例です。

library(ggplot2) 

set.seed(123) 
df <- data.frame(expand.grid(x = 1:150, type = letters[1:3])) 
df$y <- df$x*0.016 + rnorm(150, sd = .5) 

ggplot(df, aes(x, y)) + geom_line() + 
    facet_grid(type~.) + 
    theme(panel.spacing.y = unit(-3, "lines"), strip.text = element_blank()) + 
    scale_y_continuous(sec.axis = dup_axis(name = ""), name = "y") 

この生成:

Produced plot

そして、私はこれを取得するには、各軸のテキストを削除する:

Plot made with gimp

ありがとう!

答えて

4

解決策は、gTableの関連要素にnullGrob()を割り当てることでした。それを考え出すための

gt <- ggplotGrob(g) 
t <- gt[["grobs"]][[8]][["children"]][[2]] 

# Found those grobs by looking around the table. 
gt[["grobs"]][[8]][["children"]][[2]] <- nullGrob() 
gt[["grobs"]][[10]][["children"]][[2]] <- nullGrob() 
gt[["grobs"]][[12]][["children"]][[2]] <- nullGrob() 

grid.newpage() 
grid.draw(gt) 

good plot

+2

おめでとう、このプロットは全く解釈思えません。 – Chrisss

+0

これは実際のデータでうまく動作しますが、はい、正しく調整するには多くの調整が必要です。 –

関連する問題