在ggplot2分组配色场景下,如何为指定系列设置线宽与线型
解决ggplot2中指定系列线条加粗并保持样式的问题
数据集信息
我使用的是包含78个观测值、3个变量的df_konj数据集,前几行数据如下:
head(df_konj) Indikator Period value 1 Barometerindikatorn 2022-01-01 110.9 2 Barometerindikatorn 2022-02-01 114.0 3 Barometerindikatorn 2022-03-01 112.2 4 Barometerindikatorn 2022-04-01 110.3 5 Barometerindikatorn 2022-05-01 110.8 6 Barometerindikatorn 2022-06-01 106.1
需求与初始尝试
我的需求是:保持原图表样式不变,仅让Barometerindikatorn系列为实线且线条更粗。
最初的绘图代码如下:
ggplot(df_konj, aes(x = Period, y = value, group=Indikator, color=Indikator)) + geom_point(size=2) + geom_line(linewidth=1.1, aes(linetype=Indikator)) + labs(x = "Månad", y = "Värde", title="Konjunkturbarometern - månadsbarometern, flera indikatorer", subtitle="Sverige", caption="Källa: Konjunkturinstitutet", fill="År")
尝试新增geom_line单独绘制目标系列时,出现了两个问题:图例被拆分,且Bygg & anläggning系列变成了实线(其余系列不应为实线)。
最终解决代码
作为R新手,我对ggplot2的group参数等概念理解不足,最终通过以下代码实现了需求:
ggplot(df_konj, aes(x = Period, y = value, group=Indikator, color=Indikator, linetype=Indikator, linewidth = Indikator)) + geom_point(size=2) + geom_line() + scale_discrete_manual("linewidth", values = c(2, rep(1, 5))) + labs(x = "Månad", y = "Värde", title="Konjunkturbarometern - månadsbarometern, flera indikatorer", subtitle="Sverige", caption="Källa: Konjunkturinstitutet", fill="År")+ theme(legend.title = element_text(face="bold")) + theme_bw()
关键说明
- 将
linewidth和linetype都映射到Indikator变量,确保每个系列的样式统一关联 - 用
scale_discrete_manual为Barometerindikatorn(对应第一个值)设置线宽为2,其余5个系列保持线宽1 - 保留了原图表的颜色、点大小、主题等样式,仅修改指定系列的线宽和线型
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

