首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ggplot2:有条件地改变线型和颜色

ggplot2:有条件地改变线型和颜色
EN

Stack Overflow用户
提问于 2020-11-24 14:32:25
回答 2查看 167关注 0票数 0

我有以下数据:

代码语言:javascript
运行
复制
df <- tribble(
  ~group,             ~year,   ~value,  
  "group1",     "2010-2015",       70,
  "group2",     "2010-2015",       75,
  "group1",     "2015-2020",       72,
  "group2",     "2015-2020",       77,
  "group1",     "2020-2025",       74,
  "group2",     "2020-2025",       79,
  "group1",     "2025-2030",       76,
  "group2",     "2025-2030",       81)

我想把画成x,年,y,值,按组着色,也就是说,

代码语言:javascript
运行
复制
ggplot(df, aes(year, value, color = group, group = group)) +
  geom_line(size = 1.1)

但我希望“2020-2025年”和“2025年-2030年”成为虚线。

使用下面的代码,我得到了一个错误:“geom_path:如果您使用的是虚线或虚线,则颜色、大小和线型必须是直线上的常量。”

代码语言:javascript
运行
复制
df %>% 
  mutate(projection = year %in% c("2020-2025", "2025-2030")) %>% 
  ggplot(aes(year, value, color = group, group = group)) +
  geom_line(aes(linetype = projection), size = 1.1)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-24 15:08:18

也许试试这个

代码语言:javascript
运行
复制
library(tidyr)
library(dplyr)
library(ggplot2)

df %>% 
  mutate(projection = list("2010-2015" = F, "2015-2020" = c(T, F), "2020-2025" = T, "2025-2030" = T)[year]) %>% 
  unnest(projection) %>% 
  ggplot(aes(year, value, color = group, group = interaction(group, projection))) +
  geom_line(aes(linetype = projection), size = 1.1)

输出

另一种形式

代码语言:javascript
运行
复制
df %>% 
  mutate(projection = list("2010-2015" = F, "2015-2020" = F, "2020-2025" = c(T, F), "2025-2030" = T)[year]) %>% 
  unnest(projection) %>% 
  ggplot(aes(year, value, color = group, group = interaction(group, projection))) +
  geom_line(aes(linetype = projection), size = 1.1)

输出

票数 2
EN

Stack Overflow用户

发布于 2020-11-24 15:07:57

这可以通过两个geom_line层来实现,并过滤每个层要显示的数据:

代码语言:javascript
运行
复制
library(tidyverse)

df <- tribble(
  ~group,             ~year,   ~value,  
  "group1",     "2010-2015",       70,
  "group2",     "2010-2015",       75,
  "group1",     "2015-2020",       72,
  "group2",     "2015-2020",       77,
  "group1",     "2020-2025",       74,
  "group2",     "2020-2025",       79,
  "group1",     "2025-2030",       76,
  "group2",     "2025-2030",       81)

df1 <- df %>% 
  mutate(projection = year %in% c("2020-2025", "2025-2030"))

ggplot(mapping = aes(year, value, color = group, group = group)) +
  geom_line(data = filter(df1, !year %in% c("2025-2030")), size = 1.1) +
  geom_line(data = filter(df1, projection), size = 1.1, linetype = "dashed")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64988622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档