DF 熔化后 X 轴未排序离散值
X axis not ordering discrete value after melt of DF
我是 R 的新手,我对 ggplot2 和 melt 函数的使用有疑问。在特定情况下,我试图创建一个多线图,它表示某些时间间隔及其在比赛中的演变。
假设数据框如下(DF_TimeGap)
Lap Ath1 Ath2 Ath3 Ath4 Ath5
1 1 0 0 0 -1 1
2 2 0 0 14 0 28
3 3 0 -1 3 0 18
4 4 0 0 1 0 3
5 5 0 -8 1 -9 3
6 6 0 -22 0 -23 1
7 7 0 0 1 -19 3
8 8 0 -1 13 -2 13
9 9 0 -1 1 0 -1
10 10 0 5 7 8 10
然后我用
融化它
library(reshape2)
DFMelt_TimeGap = melt(DF_TimeGap, id.var="Lap")
names(DFMelt_TimeGap)[2] = "Rider"
names(DFMelt_TimeGap)[3] = "Gap"
看起来像(出于 space 原因,我只报告前两个)
Lap Rider Gap
1 1 Ath1 0
2 2 Ath1 0
3 3 Ath1 0
4 4 Ath1 0
5 5 Ath1 0
6 6 Ath1 0
7 7 Ath1 0
8 8 Ath1 0
9 9 Ath1 0
10 10 Ath1 0
11 1 Ath2 0
12 2 Ath2 0
13 3 Ath2 -1
14 4 Ath2 0
15 5 Ath2 -8
16 6 Ath2 -22
17 7 Ath2 0
18 8 Ath2 -1
19 9 Ath2 -1
20 10 Ath2 5
...
当我尝试绘制多线图时
ggplot(DFMelt_TimeGap, aes(x = Lap, y = Gap, col= Rider, group = Rider)) +
geom_point()+
geom_line()+
xlab("Lap")+ ylab("Gap (s)")
我得到的是下图(忘记颜色标签,我避免不必要的代码)
如果不是因为 x 轴上的顺序是
1 10 2 3 4 5 6 7 8 9
有人知道如何解决此类问题吗?
感谢所有热心贡献的人
在你的融化过程中 Lap
以某种方式转变为角色。我的猜测是在您的真实数据中 Lap
已经包含一个字符(或者更糟的是 factor
)。然后在您的 ggplot
中,x 轴映射到字符列,默认情况下使用字母顺序。
您可以通过 str(DFMelt_TimeGap)
.
验证
最好确保 Lap
是一个数字开头,这样 DF_TimeGap$Lap <- as.numeric(as.character(DF_TimeGap$Lap))
应该修复它。
我使用 as.numeric(as.character(.))
以防您的 Lap
最初被格式化为 factor
。
这将为您的绘图生成数字比例。您可能想添加 scale_x_continuous(breaks = 1:10)
以在每个 Lap
数字处休息。
如果你想坚持 factor/character
变量。您必须手动调整 DFMelt_TimeGap
中级别的顺序,您可以通过 DFMelt_TimeGap$Lap <- factor(DFMelt_TimeGap$Lap, 1:10)
我是 R 的新手,我对 ggplot2 和 melt 函数的使用有疑问。在特定情况下,我试图创建一个多线图,它表示某些时间间隔及其在比赛中的演变。
假设数据框如下(DF_TimeGap)
Lap Ath1 Ath2 Ath3 Ath4 Ath5
1 1 0 0 0 -1 1
2 2 0 0 14 0 28
3 3 0 -1 3 0 18
4 4 0 0 1 0 3
5 5 0 -8 1 -9 3
6 6 0 -22 0 -23 1
7 7 0 0 1 -19 3
8 8 0 -1 13 -2 13
9 9 0 -1 1 0 -1
10 10 0 5 7 8 10
然后我用
融化它library(reshape2)
DFMelt_TimeGap = melt(DF_TimeGap, id.var="Lap")
names(DFMelt_TimeGap)[2] = "Rider"
names(DFMelt_TimeGap)[3] = "Gap"
看起来像(出于 space 原因,我只报告前两个)
Lap Rider Gap
1 1 Ath1 0
2 2 Ath1 0
3 3 Ath1 0
4 4 Ath1 0
5 5 Ath1 0
6 6 Ath1 0
7 7 Ath1 0
8 8 Ath1 0
9 9 Ath1 0
10 10 Ath1 0
11 1 Ath2 0
12 2 Ath2 0
13 3 Ath2 -1
14 4 Ath2 0
15 5 Ath2 -8
16 6 Ath2 -22
17 7 Ath2 0
18 8 Ath2 -1
19 9 Ath2 -1
20 10 Ath2 5
...
当我尝试绘制多线图时
ggplot(DFMelt_TimeGap, aes(x = Lap, y = Gap, col= Rider, group = Rider)) +
geom_point()+
geom_line()+
xlab("Lap")+ ylab("Gap (s)")
我得到的是下图(忘记颜色标签,我避免不必要的代码)
如果不是因为 x 轴上的顺序是 1 10 2 3 4 5 6 7 8 9
有人知道如何解决此类问题吗? 感谢所有热心贡献的人
在你的融化过程中 Lap
以某种方式转变为角色。我的猜测是在您的真实数据中 Lap
已经包含一个字符(或者更糟的是 factor
)。然后在您的 ggplot
中,x 轴映射到字符列,默认情况下使用字母顺序。
您可以通过 str(DFMelt_TimeGap)
.
最好确保 Lap
是一个数字开头,这样 DF_TimeGap$Lap <- as.numeric(as.character(DF_TimeGap$Lap))
应该修复它。
我使用 as.numeric(as.character(.))
以防您的 Lap
最初被格式化为 factor
。
这将为您的绘图生成数字比例。您可能想添加 scale_x_continuous(breaks = 1:10)
以在每个 Lap
数字处休息。
如果你想坚持 factor/character
变量。您必须手动调整 DFMelt_TimeGap
中级别的顺序,您可以通过 DFMelt_TimeGap$Lap <- factor(DFMelt_TimeGap$Lap, 1:10)