2017-12-04 10 views
1

のパネルとずれている目盛りの終わりとパネルが始まる場所との間に、小さくてはっきりとしたオフセットがあるようです。目盛りがggplot2 [R]

minimum working example

これは、軸が(上記参照)ティックで終了するように軸の範囲が指定されている場合に、より明白です。例えば、、y軸では、最高ティックが高すぎ、最低ティックが低すぎます。

再現するコード:

library(ggplot2) p <- ggplot(mtcars,aes(mpg, wt)) + geom_point() + scale_y_continuous(limits=c(1,5),expand=c(0,0)) p <- p + theme_few() p <- p + theme(axis.ticks=element_line(size=0.5),axis.ticks.length = unit(0.5, "cm")) # enlarged for clarity, although this happens regardless 私はこれをどのように修正することができますか?

編集:私自身のデータの受け入れ答えを使用して

、私は、これはまた、軸の極値のポイントがクリップされている方法を変更するに気づきました。ティックとパネルを正しく位置合わせする方法はありますか?この動作を変更しないでください。私はを避けるために、ポイントのを削除したいだけで、パネルの外側の部分を隠すだけです。

minimum working example

答えて

6

それはオフだ位置が、クリッピングされているパネルの境界線はありません、

library(ggplot2) 
p <- ggplot(mtcars,aes(mpg, wt)) + geom_point() + scale_y_continuous(limits=c(1,5),expand=c(0,0)) 
p <- p + theme_bw() 
p <- p + theme(axis.ticks=element_line(size=3), 
       panel.border = element_rect(size = 3), 
       axis.ticks.length = unit(0.5, "cm")) 

g <- ggplotGrob(p) 

g$layout$clip <- "off" 
library(gridExtra) 
grid.arrange(p, g, ncol=2) 

enter image description here

編集:上記の観察は解決策であることを意味していませんでした;コメントに記載されているように、パネル全体のクリッピングをオフにすることは、パネル領域から漏れ出すポイントにとって問題である。回避策として、新しいgrobをgtableに追加することが考えられます。それをパネルから抽出し、クリッピングすることなく上に追加します。

library(ggplot2) 
p <- ggplot(mtcars,aes(mpg, wt)) + geom_point(size=20) + scale_y_continuous(limits=c(1,5),expand=c(0,0)) 
p <- p + theme_bw() 
p <- p + theme(axis.ticks=element_line(size=2), 
       panel.border = element_rect(size = 2), 
       axis.ticks.length = unit(0.5, "cm")) 

g <- ggplotGrob(p) 
panel_id <- g$layout$name == "panel" 
border <- tail(g$grobs[panel_id][[1]][["children"]], 1) 
g <- gtable::gtable_add_grob(g, border, 
          t = min(g$layout$t[panel_id]), 
          l = min(g$layout$l[panel_id]), 
          name = "border", 
          clip = "off") 

library(gridExtra) 
grid.arrange(p, g, ncol=2) 
+0

このパネルの幅を保持する方法はありますか?ただし、データポイントを制限しますか? (全体を削除するのではなく、部分を隠すだけです)** [サンプル画像を埋め込むために編集したオリジナルの投稿] ** – user2455117

+0

私はクリッピングを削除することを提案していませんでした。あなたが見つけたように、それは不愉快な副作用を生む。 IMOの適切な解決策は、パネルの境界線をパネルの上に描画することです(したがってクリップされません)。しかし、これは既に数回報告されていると確信しています。 – baptiste

+0

gridExtraの内部または外部のggplot2要素を手動で注文する方法を見つけることができませんでした。あなたは例を参照できますか?さもなければ、私がそれをすると考えることができる唯一の(明らかにハッキーな)方法は、元のプロットの上にブランクのクリップされていないパネルを重ねることです。 – user2455117

関連する問題