12

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() に含めると、どういうわけか空白の行が得られます。問題は、スペースを 1 つしか追加できないことです。これらの水平ボックス プロットの間にスペースを追加する方法について、誰かアイデアはありますか?

4

1 に答える 1

10

空白のレベルを追加できるようにする方法の 1 つを次に示します。

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()

ただし、これによりスペーサーにも目盛りが残ります。

目盛り付きのプロット

以下を追加することで、すべてのティックを簡単に削除できます。

+ theme(axis.ticks.y = element_line(linetype=0))

目盛りなしでプロット

ただし、スペーサーの目盛りのみを削除する場合は、少なくとも 1 つの方法 (他にもあると確信しています) は、カスタム関数を使用して行うことです。

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()

いくつかの目盛りを付けてプロットする

于 2016-01-11T11:20:07.353 に答える