tableGrob 行を軸ブレークに揃えるエレガントな方法はありますか?
RでtableGrobチャートとggplotチャートを並置したいと思います(公開レポートの以前のバージョンで使用されたSAS出力を再現する必要があります)。この最小限の再現可能な例のように:
この投稿は私をかなり遠ざけました--- tableGrob はチャートの本体と同じ gtable 行にあります。ただし、tableGrob 内の行を軸ラベルに揃えるには、多くの手動操作が必要です。
この投稿も見つけました。私は公開レポートを作成しているので、CRAN のパッケージですぐに利用できないコードは使用したくありません。そうは言っても、tableGrob の実験的なバージョンは引数として高さを受け入れるようです。このコードでうまくいき、この実験的なバージョンを使用することを選択した場合、適切な行の高さをどのように計算すればよいでしょうか?
これを行うエレガントな方法がない場合は、次のトリックが役立つことがわかりました。
- ggplot2に一致するようにtableGrobのfontsizeとcexを設定します
- padding.v を設定して、tableGrob のテーブル行に間隔を空けます
- 座標制限を変更して、列ラベルに対応し、最後の行の下に揃えます
私のMREコード:
library(ggplot2)
library(gridExtra)
library(gtable)
theme_set(theme_bw(base_size = 8))
df <- head(mtcars,10)
df$cars <- row.names(df)
df$cars <- factor(df$cars, levels=df$cars[order(df$disp, decreasing=TRUE)], ordered=TRUE)
p <- ggplot(data=df, aes(x=hp, y=cars)) +
geom_point(aes(x=hp, y=cars)) +
scale_y_discrete(limits=levels(df$cars))+
theme(axis.title.y = element_blank()) +
coord_cartesian(ylim=c(0.5,length(df$cars)+1.5))
t <- tableGrob(df[,c("mpg","cyl","disp","cars")],
cols=c("mpg","cyl","disp","cars"),
gpar.coretext = gpar(fontsize = 8, lineheight = 1, cex = 0.8),
gpar.coltext = gpar(fontsize = 8, lineheight = 1, cex = 0.8),
show.rownames = FALSE,
show.colnames = TRUE,
equal.height = TRUE,
padding.v = unit(1.65, "mm"))
g <- NULL
g <- ggplotGrob(p)
g <- gtable_add_cols(g, unit(2,"in"), 0)
g <- gtable_add_grob(g, t, t=3, b=3, l=1, r=1)
png('./a.png', width = 5, height = 2, units = "in", res = 100)
grid.draw(g)
dev.off()
トラブルシューティングの目的で y 軸ブレークに車の名前を残しましたが、最終的には削除します。