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

如何在ggplot中绘制仅含单个变量的Quanteda词频排名图

问题根因

你遇到的绘图无数据问题主要由两个常见原因导致:

  • freqs列数据类型错误:你提供的示例数据中freqs是字符型,ggplot无法基于字符类型的y轴绘制折线
  • aes内动态计算索引不稳定:在aes映射中直接调用seq_along计算排名,部分场景下会出现映射错位
解决方案

按以下步骤修改代码即可正常出图:

  1. 先确认freqs列数据类型,转换为数值型
  2. 提前在数据框中生成排名列,避免在aes内动态计算

完整修正代码(适配你提供的处理流程)

# 前面的语料处理、DFM生成代码保持不变
symptoms_corpus <- corpus(X$TEXT, docnames = X$id )
Symptoms_DFM <- dfm(symptoms_corpus)
freqs <- colSums(Symptoms_DFM)
words <- colnames(Symptoms_DFM)
word_list <- data.frame(words, freqs)
word_list <- word_list[order(word_list$freqs, decreasing = TRUE), ]

# --- 新增/修正部分开始 ---
# 检查freqs列类型,转换为数值型(如果是字符的话)
word_list$freqs <- as.numeric(word_list$freqs)
# 提前生成排名列
word_list$rank <- 1:nrow(word_list)

# 绘图
ggplot(word_list, aes(x = rank, y = freqs)) + 
  geom_line(linewidth = 1.2) +
  labs(title = "Rank Frequency Plot", x = "Rank", y = "Frequency") +
  theme_bw() # 可选,替换默认灰色背景,更美观
# --- 新增/修正部分结束 ---

基于你提供的示例数据集的测试代码

first_column <- c("the","patient", "arm", "rash", "tingling", "was", "in", "not")
second_column <- c("4116407", "3599537", "2582586", "1323883", "1220894", "1012042", "925339", "822150")
word_list2 <- data.frame(first_column, second_column)
colnames(word_list2) <- c("word", "freqs")

# 修正后绘图
word_list2$freqs <- as.numeric(word_list2$freqs)
word_list2 <- word_list2[order(word_list2$freqs, decreasing = T), ]
word_list2$rank <- 1:nrow(word_list2)

ggplot(word_list2, aes(x = rank, y = freqs)) + 
  geom_line(linewidth = 1.2, color = "#2c3e50") +
  labs(title = "Rank Frequency Plot", x = "Rank", y = "Frequency") +
  theme_bw()
优化建议

词频分布符合齐普夫定律,双对数坐标轴下的展示效果更清晰,可在绘图代码中加入对数轴设置:

ggplot(word_list, aes(x = rank, y = freqs)) + 
  geom_line(linewidth = 1.2) +
  scale_x_log10() +
  scale_y_log10() +
  labs(title = "Rank Frequency Plot (Log-Log Scale)", x = "Rank (Log)", y = "Frequency (Log)") +
  theme_bw()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:45:03