如何按值而不是标签对ggplot图表进行排序?

时间:2015-10-15 22:36:50

标签: r ggplot2

我试图构建一个图表,除其他外,它是按值而不是标签排序的。但是,我发现没有办法一直这样做 - 有时候对图表后面的数据进行排序就足够了,但大多数情况下似乎并没有帮助。

更糟糕的是,我希望运行两套图表,理想情况是来自同一个文件,为每个图表拉出不同的点。

这里是一个(简化 - 真实版本有几个不同的值列等)我的代码版本:

library(ggplot2)

texttable <- "CustomerID    Level   TerritoryID PointValue
1   1   2   1.07008411325505
2   1   6   0.818345721216575
3   4   6   0.963128455248954
4   1   6   1.00707326033957
5   4   5   1.21104485305313
6   5   1   0.997679907969959
8   4   6   0.979654115606137
9   4   6   1.06385914268472
11  2   6   0.835519424818177
12  4   3   0.868668911128272
13  4   6   0.885912959934727
14  6   6   1.24296543210132
15  1   2   0.89646750726414
16  5   1   1.21236715108711
17  2   6   0.931486514531414
18  2   2   1.03713079535294
19  2   7   0.999841149204272
20  1   4   0.946128993266485
22  2   3   0.862294861210271
23  2   6   0.82423674978601
24  5   2   0.93637131146921
27  2   1   0.992294385756429
28  6   2   0.916891653017615
30  4   2   1.02938833174225
33  4   2   1.05472249469147
34  3   2   0.910270389167454
35  4   3   0.868004861090004
36  1   1   1.00459731116181
41  2   4   0.819587910554718
42  2   3   0.774525504141426"

datatable <- read.table(textConnection(texttable), header=TRUE)
for (i in 1:nrow(datatable))  #Identify the categories as not numeric
{
  datatable$CustomerID[i] <- toString(datatable$CustomerID[i]);
  datatable$Level[i] <- toString(datatable$Level[i]);
  datatable$TerritoryID[i] <- toString(datatable$TerritoryID[i]);
}

datatable <- datatable[order(datatable$PointValue),];

level1table <- subset(datatable, Level=="1") ;
ggplot() + geom_point(aes(x=CustomerID, y=PointValue),data=level1table)+ggtitle("Level 1 PointValues");

territory6table <- subset(datatable, TerritoryID=="6")
ggplot()+ geom_point(aes(x=CustomerID, y=PointValue),data=territory6table)+ggtitle("Territory 6 PointValues");

我应该怎么做才能让积分按PointValue的顺序出现?

1 个答案:

答案 0 :(得分:1)

reorder基于另一个序数的因子变量。

territory6table <- subset(datatable, TerritoryID=="6")
territory6table$CID <- as.factor(territory6table$CustomerID)
territory6table$CID <- reorder(territory6table$CID, territory6table$PointValue)

ggplot()+
  geom_point(aes(CID, PointValue),data=territory6table)+
  ggtitle("Territory 6 PointValues")

enter image description here