双词列表词云对比绘制求助:共享词汇居中展示
实现带中心共享词的对比词云
步骤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
相关产品推荐
相关产品推荐

