在ggplot2中的x轴上绘制有序因子

时间:2018-07-02 17:26:35

标签: r sorting ggplot2

我有以下数据。

pos <- c(1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6)
block <- c(1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2)
set <- c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4)
fsize <- c(4,5,6,1,2,1,2,2,3,4,5,1,7,11,2,1,2,3,5,3,5,6,1,2)

dat <- data.frame(pos,block,set,fsize)
dat <- dat[order(block,set,-fsize),]
dat$pos <- as.factor(dat$pos)

ggplot(dat, aes(x = pos, y = fsize)) + geom_bar(stat="identity") +
  facet_wrap(~block+set)

每个位置pos与大小fsize相关联。每个块/集中有6个位置。我想按减小的女性尺寸排列尺寸。 因此,例如,具有重新排列位置的第一个块/集将为3,2,1,5,4,6,而其他块/集将有所不同。但是,当我绘制它时,即使我分解pos列,x轴也会自动重新排列为1-6。有关如何纠正此问题的任何建议?

1 个答案:

答案 0 :(得分:3)

这是一个解决方案,但是为了按所需顺序绘制,我需要创建一个具有唯一名称的新变量。该变量是setpos列的组合。

dat <- data.frame(pos,block,set,fsize)

dat <- dat[order(block,set,-fsize),]
#make a key variable in the overall desired order
key<-paste(dat$set, dat$pos, sep=",")
#make an new ordered factor variable in the proper order
dat$order <- factor(key,   levels= key, ordered =TRUE)

ggplot(dat, aes(x = order, y = fsize)) + geom_bar(stat="identity") +
  facet_wrap(~block+set, scales="free_x") + labs(x="Set,Pos")

enter image description here