ggplot2每个方面的因子顺序不同

时间:2014-06-17 03:33:57

标签: r ggplot2

我正在尝试创建一个克利夫兰点图,在这种情况下给出两个类别J和K.问题是元素A,B,C在两个类别中,所以R保持放屁。我举了一个简单的例子:

x <- c(LETTERS[1:10],LETTERS[1:3],LETTERS[11:17])
type <- c(rep("J",10),rep("K",10))
y <- rnorm(n=20,10,2)
data <- data.frame(x,y,type)
data
data$type <- as.factor(data$type)
nameorder <- data$x[order(data$type,data$y)]
data$x <- factor(data$x,levels=nameorder)

ggplot(data, aes(x=y, y=x)) +
geom_segment(aes(yend=x), xend=0, colour="grey50") +
geom_point(size=3, aes(colour=type)) +
scale_colour_brewer(palette="Set1", limits=c("J","K"), guide=FALSE) +
theme_bw() +
theme(panel.grid.major.y = element_blank()) +
facet_grid(type ~ ., scales="free_y", space="free_y") 

理想情况下,我希望单独使用两个类别(J,K)的点图,每个因子(向量x)相对于y向量递减。最终发生的事情是两个类别都不是从最大到最小,而是在最后变得不稳定。请帮忙!

1 个答案:

答案 0 :(得分:4)

不幸的是,因素只能有一组水平。我发现这样做的唯一方法实际上是从数据中创建两个独立的data.frames并重新调整每个数据的因子。例如

data <- data.frame(
    x = c(LETTERS[1:10],LETTERS[1:3],LETTERS[11:17]),
    y = rnorm(n=20,10,2),
    type= c(rep("J",10),rep("K",10))
)
data$type <- as.factor(data$type)

J<-subset(data, type=="J")
J$x <- reorder(J$x, J$y, max)
K<-subset(data, type=="K")
K$x <- reorder(K$x, K$y, max)

现在我们可以用

绘制它们
ggplot(mapping = aes(x=y, y=x, xend=0, yend=x)) + 
   geom_segment(data=J, colour="grey50") +
   geom_point(data=J, size=3, aes(colour=type)) +
   geom_segment(data=K, colour="grey50") +
   geom_point(data=K, size=3, aes(colour=type)) + 
   theme_bw() +
   theme(panel.grid.major.y = element_blank()) +
   facet_grid(type ~ ., scales="free_y", space="free_y") 

导致

enter image description here