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

双词列表词云对比绘制求助:共享词汇居中展示

实现带中心共享词的对比词云

步骤1:准备数据与加载依赖包

先安装并加载所需R包,再导入你的原始数据:

# 安装依赖包(首次运行时执行)
install.packages(c("dplyr", "ggwordcloud", "ggplot2"))

# 加载包
library(dplyr)
library(ggwordcloud)
library(ggplot2)

# 你的原始数据
df1 <- c('apple','banana','cherry', 'melon', 'grape', 'fig', 'guava', 'strawberry', 'blueberry')
df2 <- c('apple','pineapple','kiwi', 'banana', 'orange', 'lemon', 'peach','avocado','pear','cherry','mango','coconut')

步骤2:数据预处理(分类词与分配位置)

将词分为共享词、仅df1独有词、仅df2独有词三类,通过坐标设置确保共享词集中在中心:

# 转换为带来源标记的数据框
word_data <- bind_rows(
  data.frame(word = df1, source = "df1"),
  data.frame(word = df2, source = "df2")
)

# 统计词频并分类,分配坐标
word_stats <- word_data %>%
  count(word, name = "freq") %>%
  mutate(
    category = case_when(
      word %in% intersect(df1, df2) ~ "shared",
      word %in% df1 ~ "only_df1",
      TRUE ~ "only_df2"
    ),
    # 固定x坐标:共享词在中心(0),df1词在左(-1),df2词在右(1)
    x = case_when(
      category == "shared" ~ 0,
      category == "only_df1" ~ -1,
      TRUE ~ 1
    ),
    # 共享词限制y范围确保集中在中间,其他词随机分布在对应区域
    y = ifelse(category == "shared", runif(n(), -0.2, 0.2), runif(n(), -1, 1))
  )

步骤3:绘制对比词云

用ggwordcloud绘制,通过坐标控制位置,颜色区分词的类别:

ggplot(word_stats, aes(label = word, x = x, y = y, size = freq, color = category)) +
  geom_text_wordcloud_area(shape = "circle") +
  scale_color_manual(
    values = c("only_df1" = "#2E8B57", "shared" = "#FF6347", "only_df2" = "#1E90FF")
  ) +
  scale_size_area(max_size = 15) +
  theme_minimal() +
  theme(
    panel.grid = element_blank(),
    axis.text = element_blank(),
    axis.title = element_blank()
  )

关键调整点

  • 可修改max_size参数调整最大词的尺寸,修改颜色值适配需求
  • 若原始数据存在重复词,freq会自动统计出现次数,词的大小会对应频率
  • 调整共享词的y范围(-0.2, 0.2)可控制中心区域的宽窄

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:13:13