在 ggplot2 中向线型图例添加附加线

Posted

技术标签:

【中文标题】在 ggplot2 中向线型图例添加附加线【英文标题】:Adding Additional Lines to Linetype Legend in ggplot2 【发布时间】:2018-08-02 16:29:19 【问题描述】:

我很难为我使用 ggplot2 在 R 中创建的图例添加额外的线型。下面的代码使用变量Percentage.of.Total.Prescriptions....Percentage.Paid.Out.of.Pocket.... 的连续数据来尝试创建具有两组线(实线和虚线)以及各自的图例的线图。

Lineplot <- ggplot(Table.6, aes(x = Year, 
                            y = Percentage.of.Total.Prescriptions...., 
                            group = as.factor(Table.6$Insurance.Status), 
                            color = Insurance.Status,
                            linetype = "Total Insulin \nPrescriptions")) + geom_line()
Lineplot <- Lineplot + 
geom_line(aes(y = Percentage.Paid.Out.of.Pocket...., 
colour = Insurance.Status, 
linetype = "Paid \n Out-of-Pocket"), 
linetype = 5)

Lineplot <- Lineplot + labs(title = "Human Insulin Utilization")
Lineplot <- Lineplot + labs(x = "Year")
Lineplot <- Lineplot + labs(y = "Percentage (%)")
Lineplot <- Lineplot + labs(colour = "Insurance Status")
Lineplot <- Lineplot + scale_x_continuous(breaks = c(seq(2002,2015,1)))
Lineplot <- Lineplot + scale_y_continuous(breaks = c(seq(0,1,0.1)))
Lineplot <- Lineplot + expand_limits(y = 0:1)
Lineplot

Plot #1

第二个代码块创建了一条虚线,我试图在图例中标记它,不幸的是没有运气。

我将不胜感激有关如何向图例添加第二个线型的任何指针,表示虚线。

谢谢

【问题讨论】:

我觉得你需要scale_linetype_xxxggplot2.tidyverse.org/reference/scale_linetype.html 感谢您的评论,不幸的是,我已经尝试了每个变体,但无法使其正常工作。似乎这些函数不适用于连续数据... 【参考方案1】:

在第二个geom_line 中,您在aes 中定义一次linetype,然后立即用linetype = 5 覆盖它。删除它,它应该可以工作:

# dummy data
foo = data.frame(a = c(1:10),
                 b = rnorm(10, 5, 2),
                   c = rnorm(10,10,2))

# how it is now
ggplot(foo, aes(x = a, y = b, linetype = "b")) + 
  geom_line() + 
  geom_line(aes(y = c, linetype = "c"), linetype = 5)

# fixed
ggplot(foo, aes(x = a, y = b, linetype = "b")) + 
  geom_line() + 
  geom_line(aes(y = c, linetype = "c"))

此外,您可以通过在主 ggplot 位中仅保留 common aes 参数并将特定于行的参数移动到第一个 geom_line 来使其更简洁:

ggplot(foo, aes(x = a)) + 
  geom_line(aes(y = b, linetype = "b")) + 
  geom_line(aes(y = c, linetype = "c"))

之后要指定线型,​​请使用scale_linetype_manual

ggplot(foo, aes(x = a)) + 
  geom_line(aes(y = b, linetype = "b")) + 
  geom_line(aes(y = c, linetype = "c")) + 
  scale_linetype_manual(values = c(1,5))

【讨论】:

以上是关于在 ggplot2 中向线型图例添加附加线的主要内容,如果未能解决你的问题,请参考以下文章

(R) 如何在 ggplot2 中根据颜色、线型和点形状获取图例?

如何将图例添加到 ggplot2 中的多行?

为ggplot2线图创建图例

将水平线添加到 R 中 ggplot2 中的堆叠条形图,并在图例中显示

图例中 geom_hline 的颜色不正确 [ggplot2]

在 ggplot 中结合颜色和线型图例