ggplot2中手动设置离散变量线条宽度的正确语法求助
解决方案
1. 解决scale_linewidth_manual找不到的错误
这个错误的核心原因是你的ggplot2版本低于3.4.0——scale_linewidth_manual是在3.4.0版本才正式加入的函数。有两种解决方式:
方式一:升级ggplot2到最新版本
在R控制台运行:
install.packages("ggplot2")
升级后,直接替换原有代码:
ggplot(df_melt, aes(x = Date, y= value)) + geom_line(aes(color = Variable, linewidth = Variable)) + scale_color_manual(values = c("dark green", "azure3", "goldenrod4")) + scale_linewidth_manual(values = c(.6, .8, .6)) + # 其他图层设置 ...
方式二:不升级版本,用通用的scale_manual函数
如果暂时无法升级,可通过指定aesthetic参数来实现手动设置线宽:
ggplot(df_melt, aes(x = Date, y= value)) + geom_line(aes(color = Variable, linewidth = Variable)) + scale_color_manual(values = c("dark green", "azure3", "goldenrod4")) + scale_manual(aesthetic = "linewidth", values = c(.6, .8, .6)) + # 其他图层设置 ...
2. 关于"Using linewidth for a discrete variable is not advised"的警告
这个只是ggplot2的可读性提示,并非错误:官方认为离散变量用线宽区分,不如颜色、线型直观,容易让读者混淆。但如果你的可视化需求确实需要用线宽来区分类别,完全可以忽略这个警告,代码依然能正常运行并生成你想要的图。
验证后的完整示例代码
假设你的df_melt有3个Variable类别,完整可运行的代码示例:
# 模拟数据 df_melt <- data.frame( Date = seq.Date(as.Date("2023-01-01"), as.Date("2023-01-10"), by = 1), value = rnorm(30), Variable = rep(c("A", "B", "C"), each = 10) ) # ggplot2绘图(升级版本后) library(ggplot2) ggplot(df_melt, aes(x = Date, y= value)) + geom_line(aes(color = Variable, linewidth = Variable)) + scale_color_manual(values = c("dark green", "azure3", "goldenrod4")) + scale_linewidth_manual(values = c(.6, .8, .6)) + theme_minimal()
内容的提问来源于stack exchange,提问作者Thomas Philips
相关产品推荐
相关产品推荐

