我试图生成两个并排的geom_violin图并缩小左边 和右边界,以及主要类别之间的中间分隔线 两个图的x轴。这是一个简单的例子来说明我想要实现的目标:
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并且只减小绘图的总宽度(不影响小提琴的大小)。此外,请注意rel_widths
函数的plot_grid
无效,因为我需要两个图的宽度相同。
我搜索了一个类似的问题并找到this one;但是,答案使用“打印”声明,仅适用于一个情节。任何人都可以为我的案例概括一下这个答案吗?
为了重复我的示例,我还列出了我的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
修改
我自己就找到了答案。可以通过向ggplots添加+ scale_x_discrete(expand = c(0,0))
来删除边界间距。内部间距由宽度参数控制。
答案 0 :(得分:0)
这对我有用,我也使用了分面而不是像grid.arrange
这样笨重的其他功能
library(dplyr)
library(tidyr)
library(ggplot2)
th1 <- theme_bw() + theme(legend.position = "none")
pi %>%
mutate(log_price = log10(price)) %>%
gather(Attribute, Value, log_price, depth) %>%
ggplot(aes(x = cut, y = Value, fill = color)) +
geom_violin(width = 0.7) +
th1 +
facet_wrap(~ Attribute, scales = "free_y")
看起来它会自动将宽度设置为约0.85
答案 1 :(得分:0)
如果您希望保持代码大致完整,只需将position = position_dodge(width = 0.7)
作为参数添加到geom_violin
即可。根据需要更改宽度编号。