R 在同一图例中绘制颜色和线型

R 在同一图例中绘制颜色和线型,r,ggplot2,R,Ggplot2,我试着画一组线,有些线我想要虚线,有些我想要不同的颜色。每一行都有线型和颜色的组合 但是,在ggplot2中设置线型和颜色时,会打印两个图例 如何获得一组图例,其中图例中的每个条目都包含有关线型和颜色的信息 例如,对于以下内容,我希望图例中有4个条目,分别对应于红色实线、红色虚线、蓝色实线和蓝色虚线 library(ggplot2) ggplot(mtcars) + geom_line(aes(y = disp, x = mpg, color = as.factor(vs),

我试着画一组线,有些线我想要虚线,有些我想要不同的颜色。每一行都有线型和颜色的组合

但是,在ggplot2中设置线型和颜色时,会打印两个图例

如何获得一组图例,其中图例中的每个条目都包含有关线型和颜色的信息

例如,对于以下内容,我希望图例中有4个条目,分别对应于红色实线、红色虚线、蓝色实线和蓝色虚线

library(ggplot2)
ggplot(mtcars) + 
  geom_line(aes(y = disp, x = mpg, color = as.factor(vs),
                linetype = as.factor(am)))
我不想要的输出示例;只需要一个图例框

一种解决方案是基于vs和am的交互作用创建一个新变量。这将给出4个值:0、0、1、0、0、1和1、1。然后可以手动指定颜色。这里的数据不适合使用线图;使用点

library(tidyverse)
mtcars %>% 
  mutate(vs_am = interaction(vs, am)) %>% 
  ggplot(aes(mpg, disp)) + 
    geom_point(aes(color = vs_am, shape = vs_am)) + 
    scale_color_manual(values = c("red", "blue", "red", "blue"))
如果您真的想要直线,我会使用geom_smooth为每组添加一条使用线性回归的最佳拟合直线:

mtcars %>% 
  mutate(vs_am = interaction(vs, am)) %>% 
  ggplot(aes(mpg, disp)) + 
    geom_point(aes(color = vs_am, shape = vs_am)) + 
    scale_color_manual(values = c("red", "blue", "red", "blue")) + 
    geom_smooth(method = "lm", aes(group = vs_am, color = vs_am))
也许interactionvs,am代表颜色和线型?