在ggplot2中按照某一年的观察值对面板数据进行排序

时间:2015-05-16 14:31:33

标签: r plot ggplot2

我正在使用ggplot2绘制一个简单的数据面板。来自同一个体(区域)的观察来自两个不同的波,我想绘制我的图表,通过仅一个波的值来排序个体。但是,ggplot默认按两个波的平均值排序。这是data的基本样本。

data <- read.table(text = "

 ID  Country time     Theil0
 1      AT1 2004 0.10358155
 2      AT2 2004 0.08181044
 3      AT3 2004 0.08238252
 4      BE1 2004 0.14754138
 5      BE2 2004 0.07205898
 6      BE3 2004 0.09522730
 7      AT1 2010 0.10901556
 8      AT2 2010 0.09593889
 9      AT3 2010 0.07579683
 10     BE1 2010 0.16500438
 11     BE2 2010 0.08313131
 12     BE3 2010 0.10281853

", sep = "", header = TRUE)

以下是情节的代码:

library(ggplot2)

pd <- position_dodge(0.4)

ggplot(data, aes(x=reorder(Country, Theil0), y=Theil0, colour = as.factor(time))) +   
   geom_point(size=3, position = pd)+
   xlab("Region") +
   theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
   ylab("Index") +
   ggtitle("2004 and 2010")

由此产生的情节: enter image description here

正如您所看到的,仅按2010年的值排序(而不是两年的平均值)将使BE2和AT3观测值切换顺序,这是我在图中所希望的。谢谢你对此有任何帮助。

1 个答案:

答案 0 :(得分:2)

我创建了一个使用通用packagex的可重现示例。基本上,您需要在因子上使用y函数:

ordered

给出类似于你的情节: enter image description here

但是,x <- letters[1:4] y1 <- 1:4 y2 <- c(1, 4, 2, 5) + 1 library(ggplot2) library(reshape2) # used to melt the dummy dataset df <- data.frame(x = x, y1 = y1, y2 = y2) df2 <- melt(df, id.vars = "x", variable.name = "Group", value.name = "y") df2$Group <- factor(df2$Group) gg1 <- ggplot(data = df2, aes( x = x, y = y, color = Group)) + geom_point() ggsave("eample1.jpg", gg1, width = 3, height = 3) 可能会重新排序:

x

给出了这个数字:

enter image description here

另外,我很多时候都被绊倒了。我发现df2$x2 <- ordered(df2$x, x[order(y2)]) gg2 <- ggplot(data = df2, aes( x = x2, y = y, color = Group)) + geom_point() ggsave("eample2.jpg", gg2, width = 3, height = 3) 中的调整级别有时会被欺骗。