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

ggplot2技术问题:将y轴变量分为两类并绘制折线图

解决ggplot2情感趋势图的优化问题

我明白你现在的痛点:原有的折线图因为单日期多数据点挤在一起,完全看不清趋势,而且之前分组尝试还搞乱了y轴标签顺序。别担心,咱们一步步来解决,核心思路是先按每日计算正负情感的均值,再分别绘制两条趋势线,这样既清晰又能准确展示变化。

第一步:预处理数据——计算每日正负情感均值

首先咱们需要把原始数据按日期分组,分别算出每日正情感(0到5)和负情感(0到-5)的平均值。这里用dplyr包来处理会很方便:

# 加载需要的包
library(ggplot2)
library(dplyr)

# 预处理数据:按日期分组,计算正负情感的每日均值
kernplot_summary <- kernplot %>%
  # 创建分组标签:区分正/负情感
  mutate(sentiment_group = case_when(
    Sentiment >= 0 ~ "Positive (0 to 5)",
    Sentiment < 0 ~ "Negative (0 to -5)"
  )) %>%
  # 按日期和分组聚合,计算均值
  group_by(dates, sentiment_group) %>%
  summarize(daily_avg_sentiment = mean(Sentiment, na.rm = TRUE)) %>%
  ungroup() %>%
  # 手动指定分组顺序,避免y轴标签乱序
  mutate(sentiment_group = factor(sentiment_group, 
                                  levels = c("Positive (0 to 5)", "Negative (0 to -5)")))

这段代码做了三件关键的事:

  • 用case_when给每条数据打上正负情感的分组标签
  • 按日期+分组计算每日均值,去掉重复数据点的干扰
  • 把分组变量转成因子并指定顺序,解决你之前遇到的y轴标签异常问题

第二步:绘制优化后的双折线图

现在用处理好的汇总数据绘图,两条线分别对应正负情感的每日趋势:

ggplot(kernplot_summary, aes(x = dates, y = daily_avg_sentiment, color = sentiment_group)) +
  # 绘制两条折线,添加点标记让趋势更明显(可选)
  geom_line(linewidth = 1.2) +
  geom_point(size = 2, alpha = 0.7) +
  # 配置x轴日期显示,和你原来的设置保持一致
  scale_x_date(
    date_breaks = "1 day",
    date_labels = "%Y-%m-%d",
    limits = as.Date(c("2017-09-22", "2017-10-10"))
  ) +
  # 配置y轴范围和刻度,保持-5到5的区间
  scale_y_continuous(
    breaks = seq(-5, 5, by = 1),
    limits = c(-5, 5)
  ) +
  # 自定义颜色,让正负线区分更直观
  scale_color_manual(values = c("Positive (0 to 5)" = "#2ecc71", "Negative (0 to -5)" = "#e74c3c")) +
  # 调整主题,让x轴标签不重叠
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 25, vjust = 1.0, hjust = 1.0),
    legend.title = element_blank(), # 去掉图例标题(可选)
    plot.title = element_text(size = 14, face = "bold", hjust = 0.5)
  ) +
  # 添加标题和轴标签
  labs(
    title = "Daily Average Sentiment Trend (2017-09-22 to 2017-10-10)",
    x = "Date",
    y = "Average Sentiment"
  )

关键优化点说明:

  • 用color = sentiment_group区分两条折线,图例自动生成
  • 加入geom_point可以让每日均值的位置更清晰(如果不需要可以删掉)
  • 用scale_color_manual指定了绿色(正)和红色(负)的配色,比默认颜色更符合情感的直觉
  • 保留了你原来的x轴旋转和日期设置,同时用theme_minimal让整体风格更清爽

如果你的数据里有些日期只有正或负情感的话,不用担心,ggplot会自动跳过缺失的分组,不会出现断裂的线(如果想强制连接的话,可以用geom_line(na.rm = TRUE))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:58:41