Ось X не упорядочивает дискретное значение после расплава DF - PullRequest
0 голосов
/ 23 октября 2019

Я довольно новичок в 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"

и он выглядит так (я просто сообщу опервые два по космическим причинам)

    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)")

я получаю следующий график (забудьте о цветовых метках, я избегаюненужный код) enter image description here

, что было бы хорошо, если бы не тот факт, что порядок по оси x равен 1 10 2 3 4 5 6 7 8 9

Кто-нибудь знает, как решить подобные проблемы? Спасибо всем, кто стремится внести свой вклад

1 Ответ

3 голосов
/ 23 октября 2019

В процессе таяния 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)

...