R 在带有线型的ggplot上添加简单图例

R 在带有线型的ggplot上添加简单图例,r,ggplot2,legend,R,Ggplot2,Legend,如何将图例添加到此绘图中? 我到处都搜索过,但找不到一个与我当前代码匹配的简单方法。 我有三个变量,它们都有相同的颜色和不同的线型 ggplot()+geom_line(data=datapop, aes(Year, OECD),size = 0.7, color="#69b3a2") + geom_line(data=datapop, aes(Year, World),size = 0.7, color="#69b3a2", linetype="dashed")+ geom_l

如何将图例添加到此绘图中? 我到处都搜索过,但找不到一个与我当前代码匹配的简单方法。 我有三个变量,它们都有相同的颜色和不同的线型

ggplot()+geom_line(data=datapop, aes(Year, OECD),size = 0.7, color="#69b3a2") +
    geom_line(data=datapop, aes(Year, World),size = 0.7, color="#69b3a2", linetype="dashed")+
    geom_line(data=datapop, aes(Year, Switzerland),size = 0.7, color="#69b3a2", linetype="twodash")+
    xlab("Years")+ ylab("Aging") +theme_minimal()+ labs(color="Legend text")+
    scale_x_date(date_breaks = "2 years",date_labels = "%Y")+
    theme(axis.text.x=element_text(angle=60, hjust=1))

更新

这是一个使用mtcars的解决方案

data("mtcars")

ggplot( data = mtcars) +
  geom_line(aes(gear, mpg, linetype = "mpg"), color = "royalblue", size = 0.7 ) + 
  geom_line(aes(gear, drat, linetype = "drat" ), color = "royalblue", size = 0.7 ) + 
  geom_line(aes(gear, qsec, linetype = "qsec" ), color = "royalblue",  size = 0.7 )+ 
  xlab("gear") + ylab("Outcomes") + 
  scale_linetype_manual( name = "Legend text", 
                         values = c( "mpg" = "solid",
                                     "drat" = "dashed",
                                     "qsec" = "twodash" ) ) +
  theme_minimal() + 
  theme(axis.text.x=element_text(angle=60, hjust=1))
以你为例,我会做以下几点。要调整
线型
,应使用
scale\u linetype\u manual()
。参数
name
用于图例标题,而
values
通过调用
geom\u line()
中原始
aes()
中使用的名称来控制线型

这是您在不使用任何其他软件包而不是ggplot2的情况下执行此操作的方法


现在看起来更好了吗?

另一种方法是
data.table
解决方案。当然,您首先必须安装并加载
data.table

install.packages("data.table")
library(data.table)
我为您的情况创建了这个虚拟数据,并将字符类型“Year”转换为日期格式,并将整个数据转换为
数据。表

datapop <- data.frame(Year = c("1980", "1982", "1984"), OECD = c(2,3,4), World = c(3,5,8), Switzerland = c(2,2.5,3)) %>% mutate(Year = as.Date(Year, format = "%Y")) %>% as.data.table()
然后,我使用
ggplot2
package简单地绘制了这些数据。在
aes()
部分中,我给出了
linetype=variable
参数,以便它自己根据线型创建图例:

ggplot(data=datapop_melted) +
      geom_line(aes(x = Year, y = value, linetype = variable)) + 
      labs(title="Years vs Aging", x ="Years", y = "Aging", linetype = "Location") +
      scale_x_date(date_breaks = "2 years", date_labels = "%Y") +
      theme(axis.text.x=element_text(angle=60, hjust=1)) +
      theme_minimal()

您可以在中看到结果图。

能否提供一些样本数据以生成reprex?几乎不错,问题是,两个示例中的输出都是一个图例,有三条相同颜色的线,没有线型差异,这是因为您传递的是相同的颜色,我认为这是您首先想要的颜色。您可以对线型应用相同的策略。我希望保持相同的颜色,但在图例中应区分三种线型。我不知道要改变什么才能得到它。是用比例色还是用屁股的颜色?
datapop_melted <- melt(datapop, id.vars = "Year")
ggplot(data=datapop_melted) +
      geom_line(aes(x = Year, y = value, linetype = variable)) + 
      labs(title="Years vs Aging", x ="Years", y = "Aging", linetype = "Location") +
      scale_x_date(date_breaks = "2 years", date_labels = "%Y") +
      theme(axis.text.x=element_text(angle=60, hjust=1)) +
      theme_minimal()