0

編集: これは FAQ ではありません。d$x <- reorder(d$x,d$y,mean) のようなものは、他のファセットではなく、下のファセットのプロットのみを並べ替えます... 両方のプロットを値に基づいて並べ替えたいと思いますポイントプロット、上のもの。 FAQ p <- ggplot(data = d, mapping = aes(x=reorder(x,y,mean), y=y)) + ...で提案されているように、下のプロットのみを注文します...

したがって、データフレーム d2 の値に基づいて、ファセットの両方のプロットで x 軸を並べ替える必要があります。2つを組み合わせると、d1とd2の並べ替えが壊れるようです。


次のコードを使用して結合されたプロットがあります。

library(plyr)
library(ggplot2)
library(grid)
library(gridExtra)

set.seed(123)
x <- sample( LETTERS[1:9], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.15, 0.05,0.1, 0.2, 0.05, 0.05,0.1) )
y <- sample( c("Y","N"), 10000, replace=TRUE, prob=c(0.2, 0.8))
df <- as.data.frame(cbind(x,y))
names(df) <- c("x","y")
df$p_y <- as.numeric(df$y)-1

# create volume data for bar plot
d1 <- as.data.frame(table(df$x))
names(d1) <- c("x","y")
# create p(target) data for point plot
d2 <- ddply(df,1,summarise,y=mean(p_y))

d1$panel <- "volume"
d2$panel <- "p(target)"

# combine dataframes to one
d <- rbind(d1, d2)
# combine plots
p <- ggplot(data = d, mapping = aes_string(x="x", y="y")) + 
  facet_grid(panel ~ ., scales = "free") +
  theme_bw() + 
  theme(axis.text.x = element_text(angle = 90,hjust = 1)) +
  layer(data = d1, geom = c( "bar"), stat = "identity") +
  layer(data = d2, geom = c( "point"), stat = "identity")
p

これにより、x 軸の係数に従って並べ替えられたプロットが生成されます。デフォルトではアルファベット順です...最初のプロットの p_target 値で X 軸を並べ替えたいと思います...そのため、P(target) は左から右に減少します。私はデータフレーム d を正しい順序で配置することを考えていましたが、ファセットグリッドの配置はアルファベット順に戻っています...

ヒューゴ

4

0 に答える 0