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

基于R-ggplot2的均值时间序列分析及可视化问题求助

解决代码报错与情感可视化方案

一、修复时间序列均值计算的代码报错

你遇到的match.names错误,大概率是因为使用reshape2::melt()时没有明确指定需要保留的分组列(也就是时间分段列),导致函数尝试处理不匹配的列名。更适配tidyverse工作流的方式是用tidyr::pivot_longer()来重塑数据,同时把你需要的6个月分段修正过来(你代码里写的是2个月哦)。

修正后的代码如下:

library(tidyverse)
library(lubridate) # 处理日期时间的必备包

# 按6个月分段计算正负情感均值,并重塑为长格式
posnegtime <- kdn_tweets %>%
  group_by(created_at = cut(created_at, breaks = "6 months")) %>%
  summarise(negative = mean(negative),
            positive = mean(positive)) %>%
  pivot_longer(cols = c(negative, positive),
               names_to = "sentiment_type",
               values_to = "mean_value")

为什么这样能解决问题?pivot_longer()可以明确指定哪些列是要转换为分类的(这里是negative和positive),哪些列是保留的分组标识(created_at),避免了melt()默认处理时的列名匹配混乱。

二、绘制时间序列情感均值图

基于上面整理好的数据,用ggplot绘制时间序列图:

ggplot(posnegtime, aes(x = created_at, y = mean_value, color = sentiment_type, group = sentiment_type)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2) +
  labs(title = "Mean Sentiment Over 6-Month Intervals",
       x = "Time Interval",
       y = "Mean Sentiment Score",
       color = "Sentiment Type") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

三、绘制一周各天/一年各月的情感分布

针对你想要的周/月情感分布图表,我们可以用lubridate提取日期中的星期和月份信息,再分组计算均值后可视化:

1. 一周各天的情感分布

# 提取星期几,计算各天的情感均值
weekday_sentiment <- kdn_tweets %>%
  mutate(weekday = wday(created_at, label = TRUE, abbr = FALSE)) %>% # 提取完整星期名
  group_by(weekday) %>%
  summarise(negative = mean(negative),
            positive = mean(positive)) %>%
  pivot_longer(cols = c(negative, positive),
               names_to = "sentiment_type",
               values_to = "mean_value")

# 绘制柱状图(类似你给出的示例风格)
ggplot(weekday_sentiment, aes(x = weekday, y = mean_value, fill = sentiment_type)) +
  geom_col(position = "dodge") +
  labs(title = "Mean Sentiment by Day of Week",
       x = "Day of Week",
       y = "Mean Sentiment Score",
       fill = "Sentiment Type") +
  theme_minimal()

2. 一年各月的情感分布

# 提取月份,计算各月的情感均值
month_sentiment <- kdn_tweets %>%
  mutate(month = month(created_at, label = TRUE, abbr = FALSE)) %>% # 提取完整月份名
  group_by(month) %>%
  summarise(negative = mean(negative),
            positive = mean(positive)) %>%
  pivot_longer(cols = c(negative, positive),
               names_to = "sentiment_type",
               values_to = "mean_value")

# 绘制柱状图
ggplot(month_sentiment, aes(x = month, y = mean_value, fill = sentiment_type)) +
  geom_col(position = "dodge") +
  labs(title = "Mean Sentiment by Month of Year",
       x = "Month",
       y = "Mean Sentiment Score",
       fill = "Sentiment Type") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

如果想要更贴近你给出的示例图(比如折线+点的组合),可以把geom_col()换成geom_line()+geom_point(),根据你的需求调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:39:31