«Решено» Почему ggplot2 будет рисовать линейный график временного ряда «сдвиг» (сдвиг)? - PullRequest
0 голосов
/ 19 апреля 2020

Прежде всего, я хотел бы извиниться за вашу путаницу с моим описанием из-за моего бедного Энгли sh. Я пытаюсь объяснить свой вопрос как лучший, если у вас есть что-то непонятное, пожалуйста, добавьте комментарий, я объясню более подробно.

Набор данных, использованный для построения графика, подобного этому (изображение здесь просто часть):
Я поставил вывод dput ниже.

Dataset(part)

Это данные движения, полученные линейным ускорителем с метка времени. Я использую ggplot2, чтобы нарисовать линейный график, чтобы показать это в своем отчете. Вот мой код:

......
#Convert timestamp format
time <- gsub(":", ".", x)
time <- strptime(time, format = "%H.%M.%OS")
time <- as.POSIXct(time)
df["time"] <- time

# Person B Plot
p <- ggplot(df, aes(x = time)) +
  scale_x_datetime(name = "Time", labels = date_format("%H:%M:%OS")) +
  ylab("PCA") +
  geom_hline(aes(yintercept = 0)) +
  scale_colour_manual("", values = c("PCA_A" = "hotpink3", "PCA_B" = "steelblue3", "Correlation" = "chocolate")) +
  geom_line(aes(y = PCA_b, group = 1, colour = "PCA_B"), size = 0) +
  # theme(text = element_text(size = 23), plot.title = element_text(hjust = 0.5)) +
  ggtitle("PCA_Two")

Из-за отметки времени, хранящейся в файле csv в виде строки. Мне нужно изменить формат на POSIXct, затем я могу использовать scale_x_datetime, чтобы показать время по оси x. Затем я получаю странный график.

Strange Plot

Существует разрыв между две точки. Если я удалю первые пять строк и "scale_x_datetime" в коде, который я показал. Сюжет будет в порядке, кривая будет плавной, но ось x не может правильно показывать время.

Fine Plot but not perfect

Почему и как?

--- ------- update 20/4/2020

Я использую dput(df[20:50,]) для вывода части моего набора данных, надеюсь, это будет полезно. Спасибо за помощь @ chemdork123.

Ниже приведено простое описание структуры данных. Кадр данных, используемый для построения графика, имеет четыре столбца time, PCA_a, PCA_b, cor. Я нарисую трехстрочный график, все данные X на трех графиках - время (временная метка). В этом посте я просто показываю сюжет «время - PCA_b». На самом деле, все три сюжета имеют одну и ту же проблему, места разрыва и места одинаковы. (NA в столбце «cor» не является ошибкой, это то, что я сделал специально.)

structure(list(time = structure(c(1587503540.556, 1587503540.577, 
1587503540.615, 1587503540.637, 1587503540.675, 1587503540.696, 
1587503540.716, 1587503540.756, 1587503540.776, 1587503540.817, 
1587503540.837, 1587503540.876, 1587503540.893, 1587503540.915, 
1587503540.937, 1587503540.976, 1587503540.997, 1587503541.018, 
1587503541.059, 1587503541.078, 1587503541.117, 1587503541.138, 
1587503541.18, 1587503541.201, 1587503541.24, 1587503541.26, 
1587503541.3, 1587503541.339, 1587503541.358, 1587503541.4, 1587503541.423
), class = c("POSIXct", "POSIXt"), tzone = ""), PCA_a = c(1.56737319252217, 
2.04606254627585, 2.49366222484302, 2.88101522283612, 3.18379411504211, 
3.38503090762478, 3.47436865063648, 3.44747654856326, 3.30707775976109, 
3.06371801441373, 2.73437161733756, 2.33935677190782, 1.89968708587307, 
1.43586301558354, 0.967277030171067, 0.511214148600076, 0.0816220889456876, 
-0.311381715806983, -0.661355048674678, -0.965683235694069, -1.22624198074107, 
-1.44997061419577, -1.64740413737597, -1.82782646420492, -1.99421995781177, 
-2.14199256386341, -2.26073408401317, -2.33585157388011, -2.34937651266747, 
-2.28185734041769, -2.11603996134387), PCA_b = c(0.428589019048672, 
0.437715207869297, 0.44415836273225, 0.447676595545035, 0.448336071890988, 
0.446396459498192, 0.442205853553038, 0.43616876635858, 0.42877854629294, 
0.420603253124693, 0.412148862183822, 0.403676755189904, 0.395124979959946, 
0.386241966203463, 0.376849622459395, 0.367015680942488, 0.35712348581213, 
0.347977244142877, 0.340825041944267, 0.337103574812562, 0.338073413214583, 
0.344591707232845, 0.35695103029739, 0.374713701538921, 0.396660690638421, 
0.420888192551911, 0.445042523797771, 0.466693774961235, 0.483678597255532, 
0.494312865435414, 0.497599592736315), cor = c(0.787242026266416, 
NA, NA, NA, NA, NA, NA, NA, NA, 0.297936210131332, NA, NA, NA, 
NA, NA, NA, NA, NA, -0.074108818011257, NA, NA, NA, NA, NA, NA, 
NA, NA, -0.437523452157598, NA, NA, NA)), row.names = 20:50, class = "data.frame")

---------- обновление 21/4/2020

Я нашел очень интересную вещь. Если размер набора данных меньше 277, график будет идеальным. Или точка № 277 сместится. Я делаю гистограмму здесь с dput размером 277. Кто-нибудь может это проверить? Мой сюжет будет enter image description here

1 Ответ

1 голос
/ 22 апреля 2020

Спасибо за помощь от @ chemdork123. Я обнаружил, что все данные за одну секунду вокруг точки останова исчезли в наборе необработанных данных. Это должен быть провал, сделанный исследовательским прибором.

Ответ настолько прост, что делает меня похожим на дурака XD.

...