我有一个时间序列数据,我想使用geom_line
使用geom_line
进行视觉检查。我想根据显示的颜色(例如,红色表示减少,绿色表示增加),查看线段相对于上一个时间段是增加还是减少,类似于询问here的问题。
作为第二步,我想只在趋势发生变化时才在数字上加点。
例如,使用内部R数据集economics
,我可以这样准备数据:
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 )
型
但它并没有给我给予我想要的:
的数据
颜色不对,到处都是点。
我的问题有两部分:
1.我如何编写代码,使表示uempmed的线在它增加时显示绿色,在它减少时显示红色,
1.仅当uempmed从增加切换到减少时才添加geom_point
,反之亦然
我很感激任何帮助。
为清晰起见编辑
2条答案
按热度按时间axzmvihb1#
为了获得正确的线条颜色,请根据
lead
计算百分比变化,即,线基于“起始”被着色值。要仅在符号发生变化时添加点,请通过比较pct_change
的符号及其lag
值,向数据集添加一个指示变量。之后,您可以基于此指示变量过滤数据集,geom_point
。另外,我使用replace_na
为line_color
和sign_change
赋值,而不是删除带有NA的行。字符串
的数据
i34xakig2#
我们可以这样做:
1.我去掉了NA
1.为点创建逻辑向量
sign_switch
1.将色彩美学包裹在
ifelse
1.稍微调整了一下,看起来很漂亮
字符串
的数据