r - ggplot中的时间序列差异
问题描述
我正在尝试用 ggplot 绘制时间序列的(第一个)差异。由于差异(根据定义)包含比数据少一个元素,我(可以预见地)收到错误消息:“错误:美学必须是长度 1 或与数据相同”。
我通过将我的 y 美学定义为c(NA, diff(data))
而不是 just 来解决这个问题diff(data)
,这很有效。但是,这感觉像是一个笨拙的解决方法,并且仅在它给我带来麻烦的情况下才有效,例如当我尝试处理多个情节时。(此外,如果需要更高阶的差异或更多滞后,则需要继续添加 NA)。
有人知道更强大的解决方案吗?
最终的问题是: 我想要的(这是使用拼凑而成的::) 我使用刻面得到的(注意:如果我将 NA 放在最后,则第三张图表将变为正确)
解决方案
虽然将 NA 添加到差分向量并不笨拙,但在 ggplot 美学中这样做是。比较以下两段代码:
ggplot(data = data.long, aes(x = date, y = c(NA, count %>% diff()))) +
geom_point()
data.long %>%
mutate(diff_count = c(NA, diff(count))) %>%
ggplot(aes(x = date, y = diff_count)) +
geom_point()
它们都会给出相同的图表,但第二个代码是首选方法,因为用于绘图的数据(差异计数)是在发送到 ggplot 之前计算的,并且更易于阅读和修改。换句话说,先做数据管理,再可视化数据。正如您所说,使用第一种方法可能会在以后给您带来麻烦,例如进行更复杂的图形绘制,例如刻面。
推荐阅读
- python - 如何使用熊猫从 2 个 CSV 文件中删除所有重复的行?
- c# - 为什么线程池直到结束才完成任务?
- c - 如何从输入文件文本中填充 C 中的二叉树
- c++ - 如何处理 grpc 双向流中的断开连接?
- wordpress - 我如何允许用户使用用户名或电子邮件登录
- android - ionic cordova run android 在上次更新后停止工作
- ios - UILabel 中的 Int 未达到 11
- javascript - requestFullscreen 在三星移动默认浏览器中无法正常工作
- spring - 如何修复'java.lang.NoClassDefFoundError:org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource$GraphTraversalSourceStub'?
- ansible - with_items 之间的迁移到循环