我有一个时间序列数据,我想使用ggplot使用geom_line进行视觉判断.我想看看这条线的线段是根据所显示的 colored颜色 (例如,红色表示减少,绿色表示增加)相对于前一时间段增加或减少的,类似于问题here.

作为第二步,我只想在趋势发生变化的情况下才给数字加一分.

例如,使用名为economics的内部R数据集,我可以这样准备数据:

library(tidyverse)

t <- economics %>%
  filter(date >= "2013-09-01") %>%
  mutate(pct_change = (uempmed/lag(uempmed) - 1) * 100 ,
         line_color =  pct_change < 0)

百分比变化给出:

 [1]          NA  -1.2121212   4.9079755   1.1695906 -10.9826590   3.2467532  -0.6289308  -0.6329114
 [9]  -7.0063694  -5.4794521  -5.0724638  -1.5267176   3.8759690   1.4925373  -4.4117647  -0.7692308
[17]   2.3255814  -2.2727273  -6.9767442  -4.1666667

我试过用这个:

  ggplot(data = na.omit(t) , aes(x = date, y = uempmed)) +
  geom_line(aes(group = 1 ,color = line_color )) + 
  geom_point(shape = 1 )

但它没有给我我在寻找的东西:

enter image description here

colored颜色 不对,到处都是点.

我的问题有两个部分;

  1. 我如何编写代码,使表示uempmed的线在增加时显示为绿色,在减少时显示为红色,
  2. 仅当UEMPMED从增加切换到减少时才加geom_point,反之亦然

我很感激你的帮助.

为清晰起见进行编辑

推荐答案

要为您的线条 Select 正确的 colored颜色 ,请计算基于lead的百分比变化,即,线条根据"开始"值进行着色.要仅在符号发生更改时添加点,请通过比较符号pct_change和其值lag向数据集中添加一个指示器变量.然后,您可以根据geom_point的该指示符变量来过滤数据集.此外,我没有使用Nas删除行,而是使用replace_naline_colorsign_change赋值.

library(tidyverse)

t <- economics %>%
  filter(date >= "2013-09-01") %>%
  mutate(
    pct_change = (uempmed / lead(uempmed) - 1) * 100,
    line_color = pct_change < 0,
    sign_change = sign(pct_change) * sign(lag(pct_change))
  ) %>%
  replace_na(list(line_color = FALSE, sign_change = 0))

ggplot(data = t, aes(x = date, y = uempmed)) +
  geom_line(aes(group = 1, color = line_color)) +
  geom_point(data = ~filter(.x, sign_change < 0), shape = 1)

R相关问答推荐

如何删除gggvenn与gggplot绘制的空白?

R for循环返回到先前值

如何得到R中唯一的组合群?

如果可能,将数字列转换为整数,否则保留为数字

将饼图插入条形图

在数组索引上复制矩阵时出错

在rpart. plot或fancyRpartPlot中使用带有下标的希腊字母作为标签?

如何通过ggplot2添加短轴和删除长轴?

跨列查找多个时间报告

`夹心::vcovCL`不等于`AER::tobit`标准错误

在纵向数据集中创建新行

如何对r中包含特定(未知)文本的行求和?

将具有坐标列表列的三角形转换为多个多边形

防止在更新SHINY中的Reactive Value的部分内容时触发依赖事件

循环遍历多个变量,并将每个变量插入函数R

SHILINY中DT列的条件着色

防止正则表达式覆盖以前的语句

具有自定义仓位限制和计数的GGPLATE直方图

如何将两个用不同的运算符替换*的矩阵相乘

具有某些列的唯一值的数据帧