简体   繁体   English

如何使用ggplot2绘制与数据匹配的线

[英]how to plot lines matching data using ggplot2

plot increase_rate contains abs(increase_rate) > 0.05 . 情节增加率包含abs(increase_rate) > 0.05
but under the code, discard the data between -0.05 to 0.05. 但根据该代码,请丢弃-0.05至0.05之间的数据。

I also plot data including from -0.05 to 0.05 range. 我还绘制了从-0.05到0.05范围的数据。

library(tidyverse)
data(population, package="tidyr")

population %>%
  arrange(country, year) %>%
  group_by(country) %>%
  mutate(population_nextY = lead(population)) %>%
  mutate(increase_rate = (population_nextY - population)/population_nextY) %>%
  filter(abs(increase_rate) > 0.05) %>%
  ungroup %>%
  ggplot()+
  geom_line(aes(x = year, y = increase_rate, color = country)) 

I want to get final plot like this. 我想要这样的最终情节。 在此处输入图片说明

d <- 
  population %>%
  arrange(country, year) %>%
  group_by(country) %>%
  mutate(population_nextY = lead(population)) %>%
  mutate(increase_rate = (population_nextY - population)/population_nextY) %>%
  ungroup

select_country <- 
  d %>% filter(!between(increase_rate, -0.05, 0.05)) %>%
  select(country) %>% distinct %>% unlist

d %>%
  filter(country %in% select_country) %>%
  ggplot()+
  geom_line(aes(x = year, y = increase_rate, color = country))

使用between

filter(!between(increase_rate, -0.05, 0.05))

add column using mutate() function 使用mutate()函数添加列

population %>%
  arrange(country, year) %>%
  group_by(country) %>%
  mutate(population_nextY = lead(population)) %>%
  mutate(increase_rate = (population_nextY - population)/population_nextY) %>%
  mutate(judge = max(abs(increase_rate), na.rm=T)) %>%
  filter(judge > 0.05) %>%
  ungroup %>%
  ggplot() + 
  geom_line(aes(x = year, y = increase_rate, color = country))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM