2つのside-by-side geom_violinプロットを生成し、左の と右の境界線を縮小しようとしています。両方のプロットのx軸の の主要カテゴリ。ここで私が達成しようとしているものを説明するための最小限の例です。個々のバイオリンのサイズを維持しながら、2つのサイドバイサイドgeom_violinsの幅を小さくする
require(dplyr)
require(ggplot2)
require(grid)
require(gridExtra)
require(cowplot)
# two major categories (cut) and five
# subcategories (color) are enough for the purpose of this question
pi <- filter(diamonds, (cut=="Premium" | cut=="Ideal") & color<"I")
pi$cut <- factor(pi$cut)
pi$color <- factor(pi$color)
th1 <- theme_bw() + theme(legend.position = "none")
g1 <- ggplot(data=pi, aes(x=cut, fill=color, y=price)) +
geom_violin(width=0.5) + th1
g2 <- ggplot(data=pi, aes(x=cut, fill=color, y=depth)) +
geom_violin(width=0.5) + th1
grid.newpage()
grid.arrange(plot_grid(g1,g2, ncol = 2, rel_widths = c(0.3,0.3)))
私はトリミングまたは削減したいスペースをマークしています。 geom_violin()のwidthパラメータを増やすと、実際にはこの間隔が減少することにご注意ください。 しかし、私はバイオリンの幅を0.5に保ち、(バイオリンのサイズに影響を与えずに)プロットの全幅を減らすだけです。また、私は両方のプロットを同じ幅にする必要があるので、は、役に立たないことに注意してください。plot_grid
関数のrel_widths
は役に立ちません。
同様の質問を検索したところ、this oneが見つかりました。ただし、答えは "print"ステートメントを使用し、1つのプロットのみに適用されます。誰も私のケースのためにその答えを一般化してくださいできますか?私の例の再現性については
、私も自分のsessionInfo()
をリストアップしています:
R version 3.3.2 (2016-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X Yosemite 10.10.5
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] grid stats graphics grDevices utils datasets methods base
other attached packages:
[1] cowplot_0.7.0 gridExtra_2.2.1 ggplot2_2.2.1 tidyr_0.6.1 dplyr_0.5.0
loaded via a namespace (and not attached):
[1] Rcpp_0.12.10 assertthat_0.1 R6_2.2.0 plyr_1.8.4 gtable_0.2.0
[6] DBI_0.6-1 magrittr_1.5 scales_0.4.1 lazyeval_0.2.0 labeling_0.3
[11] tools_3.3.2 munsell_0.4.3 colorspace_1.3-2 tibble_1.3.0
EDIT 私は答えを自分自身を発見しました。境界スペーシングは、ggplotsに+ scale_x_discrete(expand = c(0,0))
を追加することで削除できます。内側の間隔はwidthパラメータで制御します。
非常に良好です。しかし、あなたの答えには2つの問題があります。(1)異なるカットカテゴリ間の中央の区切りがほとんど削除されます(削除しないでください)。(2)左のプロットを対数スケールで、右を線形にする必要がある場合スケール(と私はこれを確かに必要とする)、私はあなたの答えを使用してこれを行うにはどうすればいいですか?だから私はgrid.arrangeを使いました。とにかく、私はあなたの答えから多くを学んだので、答えをアップアップしました。ありがとう。 – user8420488483439
あなたの答えに 'geom_violin()'の代わりに 'geom_violin(width = 0.5)'を使うと、あなたのプロットの形は私の疑問のプロットに頼ります。 – user8420488483439
1)そこに 'geom_violin(width = 0.7)+'などをポップすることができます。あなたが一番好きなものを見つけるために遊んでください。 2)ログトランスモレレーションの回答を更新します – Zafar