1

我有一个与此类似的数据集,并使用 ggplot 创建了一个条形图,以显示一个人说出某个单词的次数。

name <- c('Luca', 'Marco','Alberto', 'Luca', 'Marco', 'Luca', 'Alberto', 'Marco')
word <- c('pizza', 'cola', 'pizza','cola','pizza', 'good', 'good', 'chips')
count <- c(3,5,6,4,1,3,6,2)
  
ggplot(df, aes(y=word, x=count, fill=name)) + 
  geom_col()

图片

这就是结果。但是,我只想显示图像的一部分,即前两个最常用的单词。这就是结果。但是我只想显示图像的一部分(前两个最常用的词)。这是我真实数据库的简化,因为在那个数据库中我有大约 30k 千字,我只想取前 20 个。谢谢大家

4

1 回答 1

0

这是一个基于table获取n最常用词然后绘制它们的解决方案。
但首先是测试数据集,因为在问题中未创建 data.frame。

name <- c('Luca', 'Marco','Alberto', 'Luca', 'Marco', 'Luca', 'Alberto', 'Marco')
word <- c('pizza', 'cola', 'pizza','cola','pizza', 'good', 'good', 'chips')
count <- c(3,5,6,4,1,3,6,2)
df <- data.frame(name, word, count)

现在绘图功能fun。默认值n = 2将绘制两个最常用的词,因此我在调用函数时不需要传递该值,只有在绘制另一个数量的最常用词时才需要。

library(ggplot2)

fun <- function(X, col, count, fill, n = 2){
  freq <- sort(table(X[[col]]), decreasing = TRUE)[seq_len(n)]
  i <- which(X[[col]] %in% names(freq))
  df_plot <- X[i, , drop = FALSE]
  g <- ggplot(df_plot, aes(get(col), get(count), fill = get(fill))) + 
    geom_col() +
    labs(x = col, y = count, fill = fill) +
    coord_flip()
  g
}

fun(df, "word", "count", "name")

在此处输入图像描述

于 2021-01-01T17:26:06.800 回答