R 根据某一年的观测值对ggplot2中的面板数据进行排序

R 根据某一年的观测值对ggplot2中的面板数据进行排序,r,plot,ggplot2,R,Plot,Ggplot2,我正在用ggplot2绘制一个简单的数据面板。来自同一个体(区域)的观测来自两个不同的波,我想用一个波的值来绘制我的图,对个体进行排序。但是,默认情况下,GGP根据两个波的平均值绘制顺序。这是一个基本的例子 数据我创建了一个可复制的示例,使用通用的xs和ys。基本上,您需要对您的系数使用ordered函数: x <- letters[1:4] y1 <- 1:4 y2 <- c(1, 4, 2, 5) + 1 library(ggplot2) library(reshape2

我正在用ggplot2绘制一个简单的数据面板。来自同一个体(区域)的观测来自两个不同的波,我想用一个波的值来绘制我的图,对个体进行排序。但是,默认情况下,GGP根据两个波的平均值绘制顺序。这是一个基本的例子


数据我创建了一个可复制的示例,使用通用的
x
s和
y
s。基本上,您需要对您的系数使用
ordered
函数:

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)
由此得出这个数字:


而且,我经常在这个问题上被绊倒。我发现调整
ggplot2
中的级别有时很难

@Richard谢谢编辑:)谢谢Richard,我想这可以解决问题,假设y2变量仍然在工作环境中,可以调用,对吗?。我发现了一个类似的解决方法:当使用整形函数使数据变长(或使用整形2进行融合)时,我将我的“y2”变量(2010年的泰尔0指数)保持时间不变。通过这种方式,我可以为每个人提供两个因子级别的变量,并且可以根据需要进行排序。事实上,我所做的是以宽格式复制y2变量,并且只将其中一个副本传递到长格式。另一个变量duplicate是时不变的(我不将其包含在重塑函数的“variable”列表中),它用于以后对数据进行排序。然而,其他不需要预先格式化的解决方案(或以更广泛的形式调用旧变量,如y2)可能会很有帮助,而且更直接。
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")
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)
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)