ggplot,绘制两种线型和颜色

时间:2021-01-19 20:12:40

标签: r ggplot2

出于某种原因,我无法弄清楚如何在此绘制具有两种不同线型的图形。 我不想使用方面。我想在这里将颜色映射到党派,并将线型映射到框架。

Liberals<-c(0.6, 0.75, 0.8, 0.6, 0.75, 0.9)
Conservatives<-c(0.4, 0.25, 0.2, 0.4, 0.25, 0.1)
 partisanship<-rep(c('low', 'medium', 'strong'), 2)

 frame<-c(rep('neutral', 3), rep('partisan', 3))
 frame
 partisanship
 Liberals
 Conservatives
df<-data.frame(Liberals, Conservatives, partisanship, frame) 
df
library(tidyverse)


## This is the data I'm working with

structure(list(partisanship = c("strong", "strong", "medium", 
"medium", "low", "low", "low", "low", "medium", "medium", "strong", 
"strong"), frame = c("partisan", "neutral", "neutral", "partisan", 
"neutral", "partisan", "neutral", "partisan", "neutral", "partisan", 
"neutral", "partisan"), name = c("Conservatives", "Conservatives", 
"Conservatives", "Conservatives", "Conservatives", "Conservatives", 
"Liberals", "Liberals", "Liberals", "Liberals", "Liberals", "Liberals"
), value = c(0.1, 0.2, 0.25, 0.25, 0.4, 0.4, 0.6, 0.6, 0.75, 
0.75, 0.8, 0.9)), row.names = c(NA, -12L), class = c("tbl_df", 
"tbl", "data.frame"))->df2


df2%>% 
    ggplot(., aes(x=partisanship, y=value, group=frame, col=name))+geom_line(aes(linetype=frame, col=frame))

1 个答案:

答案 0 :(得分:1)

这可以通过使用例如在 frame 美学上映射 namegroup 来实现interaction。此外,因为您想通过 name 从 geom_line 中删除 col=frame 来着色:

library(tidyverse)

df_long <- df %>% 
  pivot_longer(-c(partisanship:frame))  %>% 
  arrange(., value, frame) 

ggplot(df_long, aes(x=partisanship, y=value, group=interaction(frame, name), col=name)) + 
  geom_line(aes(linetype=frame))