You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R ggplot2 geom_line绘制分组折线异常为粗条问题排查

异常原因
  1. 核心错误是geom_line()的美学映射中设置了group = 1:group参数是ggplot用来指定折线分组的依据,设置为1等于强制将所有数据点归为同一组,即使你已经用color=Item映射了商品类别,ggplot也会忽略分类规则,把所有点按x轴顺序连为同一条线,再搭配你设置的size=8的超粗线宽,自然会呈现形态怪异的粗条。
  2. 初始代码未对Date列做类型转换:用read.table读入的日期列默认是字符型,x轴会被识别为离散分类变量,点的连接顺序会按数据框中的行顺序排列,进一步加剧线条错乱。就算你后续用lubridate::mdy(Date)把x轴转成了日期类型,只要group=1的设置没删除,三个品类的点依然会被归为同一组连接,就会出现你补充截图里的交叉乱线。
修正方案
  • 删除aes()内的group = 1参数:只要映射了color=Item这类分类属性,ggplot会自动按Item的取值拆分分组,为Fruit、Confectionary、Appliance三个类别分别绘制独立折线。
  • 保留Date列的日期类型转换,让x轴按连续时间尺度展示,避免离散轴的排序问题。
  • 调小线宽参数,size=8的线宽过粗,正常折线图线宽设置为0.5~1.5即可。

修正后的可运行代码:

library(ggplot2)
library(lubridate)

# 构造示例数据
df <- read.table(text="Date     Item            Purchased
01/01/08 Fruit              48
01/01/08 Confectionary      42
01/01/08 Appliance          11
01/06/08 Confectionary      16
01/06/08 Fruit              19
01/06/08 Appliance          50", header=TRUE)

# 绘图
test_df <- ggplot(df) +
  geom_line(aes(x = mdy(Date), y = Purchased, color = Item), linewidth = 1) +
  theme(
    title = element_text(size = 10),
    panel.background = element_rect(fill = 'white', color = "grey70"),
    legend.position = 'top'
  )

test_df

注:ggplot2 3.4.0及以上版本中,折线的宽度参数推荐使用linewidth,老版本可换回size参数。

内容的提问来源于stack exchange,提问作者alec22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:06:21