我正在尝试使用ggplot2中的水平框线图进行绘图,您只能通过使用coord_flip()来进行绘制。我还试图垂直隔开框线图,以将某些集合组合在一起。我已经读过,对于这种事情,建议使用刻面,但这与coord_flip()不兼容,正如我们在此处看到的:ggplot2: boxplot with facet_grid and free scale。所以我想知道是否有可能使用空白级别来创建空白。到目前为止,这是我设法做到的:

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)

如您所见,如果我创建一个包含“-”的空白层并将其包含在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()

但是,这也会在垫片上留下刻度线:

r - 在ggplot2中定位水平框线图-LMLPHP

删除所有刻度线很简单,只需添加以下内容:
+ theme(axis.ticks.y = element_line(linetype=0))

r - 在ggplot2中定位水平框线图-LMLPHP

但是,如果您只想删除间隔号,则至少有一种方法(我敢肯定还有其他方法)是使用自定义函数来完成的:
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()

r - 在ggplot2中定位水平框线图-LMLPHP

关于r - 在ggplot2中定位水平框线图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12626687/

10-12 19:22