如果r中的值小于0或大于0,如何根据条件为geom_line()和geom_point()正确着色?

签证

tidytuesday数据集我想创建一个线图的颜色在蓝色如果大于0若小于0

library(tidyverse)
library(tidytuesdayR)
library(ggthemes)
library(glue)
library(scales)

加载数据中

tt <- tt_load("2021-02-23")
employed <- tt$employed

阴谋

employed %>% 
  na.omit() %>% 
  group_by(year) %>% 
  summarise(employment_yrwise = sum(employ_n)) %>% 
  mutate(employ_change = (employment_yrwise - lag(employment_yrwise, default = 0))/
           lag(employment_yrwise) ) %>% 

  mutate(employ_change = replace(employ_change, is.na(employ_change), 0),
         line_color = ifelse(employ_change >= 0, "blue","red")) %>% 
  
  ggplot(aes(x = year, y = employ_change, 
             label = round(employ_change*100, digits = 2),
         col = line_color)) +
  geom_line(group=1) +
  geom_point() +
  scale_y_continuous(labels = scales::percent_format(),
                     limits = c(-0.08, 0.02) ) +
  geom_text(nudge_y = .005) +
  labs(title = "Yearly % Change in Employment")

我不确定为什么我会被上面的代码弄到图表下方,当颜色低于0时,它的颜色似乎是相反的,而线条却不能正确地上色:

在此处输入图片说明

也尝试了下面的代码,但是也没有用:

employed %>% 
  na.omit() %>% 
  group_by(year) %>% 
  summarise(employment_yrwise = sum(employ_n)) %>% 
  mutate(employ_change = (employment_yrwise - lag(employment_yrwise, default = 0))/
           lag(employment_yrwise) ) %>% 
  mutate(employ_change = replace(employ_change, is.na(employ_change), 0) #,
         #line_color = ifelse(employ_change >= 0, "blue","red")
         ) %>% 
  
  ggplot(aes(x = year, y = employ_change, 
             label = round(employ_change*100, digits = 2)
             # ,col = line_color
             )) +
  geom_line(group=1) +
  geom_point() +
  scale_y_continuous(labels = scales::percent_format(),
                     limits = c(-0.08, 0.02) ) +
  scale_color_manual(values = c("blue","red")) +
  geom_text(nudge_y = .005) +
  labs(title = "Yearly % Change in Employment")
特朗布兰德

至于根据线条是否在某点之上/之下而给它们提供不同的颜色,则您需要在交叉点处对这些线进行插值以分配不同的颜色,因为线段本身不能具有多种颜色。这是用于内插此类线条自-窃解决方案

首先,我们将编写两个函数。一个用于查找交叉点并整形数据,另一个用于在交叉点进行插值。

library(ggplot2)

divide_line <- function(x, y, at = 0) {
  df <- data.frame(x, ymin = at, ymax = y)
  df$sign <- sign(df$ymax - df$ymin)
  df <- df[order(df$x), ]
  df$id <- with(rle(df$sign), rep.int(seq_along(values), lengths))
  
  crossover <- which(c(FALSE, diff(df$id) == 1))
  crossover <- sort(c(crossover, crossover - 1))
  splitter  <- rep(seq_len(length(crossover) / 2), each = 2)
  crossover <- lapply(split(df[crossover, ], splitter), find_isect)
  
  df <- do.call(rbind, c(list(df), crossover))
  df[order(df$x),]
}

find_isect <- function(df) {
  list2env(df, envir = rlang::current_env())
  dx <- x[1] - x[2]
  dy <- ymin[1] - ymin[2]
  t <- (-1 * (ymin[1] - ymax[1]) * dx) / (dx * (ymax[1] - ymax[2]) - dy * dx)
  df$x <- x[1] + t * -dx
  df$ymin <- df$ymax <- ymin[1] + t * -dy
  return(df)
}

然后,我们可以执行以下操作:

df <- data.frame(
  x = 1:100,
  y = rnorm(100)
)

df <- divide_line(df$x, df$y, at = 0)

ggplot(df, aes(x, ymax, group = id, colour = as.factor(sign))) +
  geom_line()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

动画geom_line()崩溃为geom_point()

抖动geom_line和geom_point

添加geom_point和geom_line进行绘图

分别调整geom_point()和geom_line()

绘制geom_line()+ geom_point()R

如何使geom_line和geom_point抖动相同的幅度?

ggplot2中带有geom_line和geom_point的图例

使用geom_point()和geom_line()进行多个系列的ggplot中的图例错误

如何根据python中的条件添加geom_point层

如何将geom_bar,geom_point和geom_line合并为一个图形?

带有 geom_line 和 geom_ribbon 和 geom_point 的图例

添加geom_line以链接盒状图中所有geom_point(条件为ggplot2)

如何在R中使用ggplot2根据大小为节点/ geom_point渐变着色?

ggplot2:合并geom_line,geom_point和geom_bar的图例

R ggplot2:如何绘制具有纯色和透明笔触并根据颜色着色的geom_point?

如何在 ggplot 混合 geom_rect 和 geom_line 中对区域进行着色?

geom_point中的着色和标记点

ggplot 将 geom_point 与 geom_line 分开的方法?

ggplot2-结合了geom_point和geom_line的图例

结合ggplot geom_point和geom_line图产生的冗余图例

ggplot:两组的geom_line和geom_point重叠顺序?

将gganimate与geom_point和geom_line一起使用

绘制 geom_line() 和 geom_point() - 不同长度的数据

geom_point将不接受0作为值

在R中绘制geom_line和geom_ribbon时如何添加不连续点?

使用facet_grid和多个数据点(R ggplot2)时,将geom_point和geom_line组合

将 geom_line 和 geom_point 与 ggplotly 一起使用时的奇怪图例和工具提示文本

ggplot方面和条件geom_point

当点由变量避开而线由另一个避开时,如何对齐geom_line和geom_point?