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)