如何转换DataFrame并绘制多术语时间维度词频折线图?
解决方法:将长格式数据转换为宽格式(或直接用长格式绘图)
你需要把当前长格式的DataFrame(每行对应一个日期-词汇的频率记录)调整为适合绘制多系列折线图的结构,下面是具体实现方案:
1. 用tidyr包将长格式转宽格式
如果坚持要把每个词汇转为单独列,可以用tidyverse工具集里的pivot_wider函数完成转换:
# 加载必要的包 library(tidyr) library(dplyr) # 对示例数据进行长转宽操作,缺失的日期-词汇组合用0填充 wide_data <- examp.data %>% pivot_wider( id_cols = date, # 作为行索引的列:日期 names_from = term, # 转为列名的字段:词汇 values_from = freq, # 填充列的数值:频率 values_fill = 0 # 缺失值填充为0 )
转换后的宽格式数据结构如下:
| date | engineering | biology | physics | mathematics | computer |
|---|---|---|---|---|---|
| 2012-01-01 | 732 | 0 | 0 | 0 | 0 |
| 2013-09-23 | 0 | 917 | 0 | 0 | 0 |
| 2014-11-15 | 0 | 0 | 241 | 0 | 0 |
| 2014-05-11 | 0 | 0 | 0 | 601 | 0 |
| 2015-03-27 | 0 | 0 | 0 | 0 | 692 |
2. 直接用长格式绘制多系列折线图(推荐)
其实用ggplot2可以直接基于原始长格式数据绘图,无需转换格式,更符合tidyverse的逻辑,能直接生成你需要的多系列折线图:
library(ggplot2) ggplot(examp.data, aes(x = date, y = freq, color = term)) + geom_line(linewidth = 1) + geom_point(size = 2) + # 可选:添加数据点增强可读性 labs( x = "日期", y = "词汇出现频率", title = "社交媒体词汇频率趋势", color = "词汇类型" ) + theme_minimal()
这段代码会自动按term区分不同折线系列,并生成对应图例,和你目标图表的效果一致。
3. 基础绘图包实现(基于宽格式数据)
如果习惯用R基础绘图包,基于转换后的宽格式数据可以这样绘制:
# 先按日期排序 wide_data <- wide_data %>% arrange(date) # 初始化绘图 plot(wide_data$date, wide_data$engineering, type = "l", col = "darkred", xlab = "日期", ylab = "出现频率", main = "社交媒体词汇频率趋势") # 依次添加其他词汇的折线 lines(wide_data$date, wide_data$biology, col = "steelblue") lines(wide_data$date, wide_data$physics, col = "forestgreen") lines(wide_data$date, wide_data$mathematics, col = "orange") lines(wide_data$date, wide_data$computer, col = "purple") # 添加图例 legend("topright", names(wide_data)[-1], col = c("darkred","steelblue","forestgreen","orange","purple"), lty = 1)
内容的提问来源于stack exchange,提问作者Juan de Dios Fernandez
相关产品推荐
相关产品推荐

