0

编辑:这不是常见问题解答,我不想在 facet_grid 中订购一个情节,而是订购两个情节。像 d$x <- reorder(d$x,d$y,mean) 之类的东西只会重新排序较低面上的图而不是另一个... 我希望根据点图,最上面的那个。 按照常见问题解答中的建议 p <- ggplot(data = d, mapping = aes(x=reorder(x,y,mean), y=y)) + ...只订购较低的情节...

因此,我需要根据数据帧 d2 中的值对构面中的两个图上的 x 轴进行重新排序。将两者结合起来似乎打破了 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 按正确的顺序排列,但 facet grid puts 又按字母顺序排列...

雨果

4

0 回答 0