use*_*042 11 r ggplot2 boxplot
我正在尝试用ggplot2中的水平箱图制作一个情节,你只能使用coord_flip().我也试图将箱形图垂直放置以将某些组合在一起.我已经知道这种方法建议使用faceting,但这与coord_flip()不兼容,正如我们在这里看到的:ggplot2:带有facet_grid和自由缩放的boxplot.所以我想知道是否可以使用空白级别来创建空格.这是我到目前为止所做的事情:
d <- diamonds
library("ggplot2")
levels(d$cut) <- list(A="Fair", B="Good", "-", C="Very Good", D="Ideal", E="Premium")
p = ggplot(d, aes(x=cut, y=depth))
p +
geom_boxplot(color="black", size=0.2) +
theme_bw() +
scale_x_discrete(breaks = c("A", "B", "-", "C", "D", "E"), drop=FALSE) +
coord_flip()
ph = 2.75
pw = 4
ggsave("plot.png", height=ph, width=pw)
Run Code Online (Sandbox Code Playgroud)
如您所见,如果我在其中创建一个带有" - "的空白级别并将其包含在scale_x_discrete()中,那么我会得到一个空白行.问题是我只能添加一个空格.有没有人对如何在这些水平箱形图之间添加空格有任何想法?
这是一种可以添加更多空白级别的方法:
d <- diamonds
levels(d$cut) <- list(A="Fair", B="Good", " "="space1", C="Very Good", D="Ideal", " "="space2", E="Premium")
ggplot(d, aes(x=cut, y=depth)) +
geom_boxplot(color="black", size=0.2) +
theme_bw() +
scale_x_discrete(breaks = c("A", "B", " ", "C", "D", " ", "E"), drop=FALSE) +
coord_flip()
Run Code Online (Sandbox Code Playgroud)
这也将在垫片上留下刻度线,但是:
删除所有刻度线很简单,只需添加:
+ theme(axis.ticks.y = element_line(linetype=0))
Run Code Online (Sandbox Code Playgroud)
但是如果你只想删除间隔符的刻度线,至少有一种方法(我确定还有其他方法)是用自定义函数来做的:
f <- function(x) {
x[!x %in% c("A", "B", "C", "D", "E")] <- NA
x
}
ggplot(d, aes(x=cut, y=depth)) +
geom_boxplot(color="black", size=0.2) +
theme_bw() +
scale_x_discrete(breaks=f, drop=FALSE) +
coord_flip()
Run Code Online (Sandbox Code Playgroud)