“已解决”为什么ggplot2会绘制“中断”(移位)时间序列线图?

问题描述 投票:-1回答:1

首先,由于英语不好,您对我的描述感到困惑,对此我深表歉意。我尽力解释我的问题,如果您有任何不明白的地方,请添加评论,我将详细解释。

用于绘制类似图的数据集(这里的图像只是其中的一部分):我在下面放置了dput的输出。

“] >>

这是带有时间戳的线性加速器捕获的运动数据。我使用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轴上显示时间。然后我得到一个奇怪的图。

“奇怪的情节”

两点之间有一个中断。如果我在显示的代码中删除了前五行和“ scale_x_datetime”。绘图将很好,曲线将平滑,但x轴无法正确显示时间。

为什么和如何?

----------更新20/4/2020

我使用dput(df[20:50,])输出我的数据集的一部分,希望对您有所帮助。感谢@ chemdork123的帮助。

下面有一个简单的数据结构描述。用于绘制图的数据帧有四列,时间,PCA_a,PCA_b,cor。我将绘制三线图,所有三幅图的X数据都是时间(时间戳)。在本文中,我仅显示“时间-PCA_b”图。实际上,三个情节都有相同的问题,中断和中断位置相同。 (“ cor” col中的NA并不是一个错误,这是我故意这样做的。)

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,则图将是完美的。否则No.277点将移动。我制作了一个dput值为277的gist here。有人可以测试吗?我的情节是“在此处输入图像描述”

首先,由于英语不好,您对我的描述感到困惑,对此我深表歉意。我尽力向您解释我的问题,如果您有任何不明白的地方,请添加一个...

r ggplot2 time-series posixct
1个回答
0
投票
感谢@ chemdork123的帮助。我发现断点一秒钟内的所有数据在原始数据集中消失了。这应该是研究工具的失败。

答案很简单,使我看起来像个傻瓜XD。

© www.soinside.com 2019 - 2024. All rights reserved.