【问题标题】:GGplot 2 output is blankGGplot 2 输出为空白
【发布时间】:2019-07-18 16:45:07
【问题描述】:

我正在使用整洁的文本指南进行文本挖掘并更改为代码以用于我自己的数据。

我正处于绘制数据集中最常用词的阶段。我已经设法将它们放入数据框中。

我已尝试更改代码的某些部分,但这无济于事,因为我不完全确定每个位的作用。我也在网上到处找答案!

我的数据框如下所示:

# A tibble: 1,343 x 2
   word            n
   <chr>       <int>
 1 reminders     104
 2 check         100
 3 checks        100
 4 mot            87
 5 car            82
 6 vehicle        79
 7 send           78
 8 people         73
 9 maintenance    44
10 vehicles       42

绘制最常用词的代码如下所示:

library (ggplot2)

frequentwordsstop  %>%
  count(word, sort = TRUE) %>%
  filter(n > 40) %>% 
  mutate(word = reorder(word, n)) %>%
  ggplot(aes(word, n)) +
  geom_col() +
  xlab (NULL) +
  coord_flip()

我得到的是 x 轴标签上带有“n”的空白正方形。就是这样!

我没有收到任何错误消息。我得到的是 x 轴标签上带有“n”的空白正方形。就是这样!

【问题讨论】:

  • 当我使用非 tidyverse 方法时,我得到了预期的情节。如果您发布的 tibble 是 frequentwordsstopcount(word, sort = TRUE) 不会对每个单词计数一次并将计数设置为 1?另一件事可能是意外的包命名空间可能会覆盖reorder() 函数(您是否看到使用?reorder 时出现多个选项?)
  • 嗨,我尝试过使用 ?reorder,它提供了描述 reorder 是一个通用函数的帮助文档(这是在 RStudio 中)。所以我认为没有其他东西覆盖它。我认为 count(word, sort = TRUE) 正在对单词的频率进行排序,例如我会得到一个条形图,首先是最常用的单词(提醒),然后是第二个,(检查)等。您能否复制过去的非 tidyverse 方法可能会对我有所帮助?感谢回复!

标签: r ggplot2 plot


【解决方案1】:

如果您有如下所示的数据:

library(tidyverse)

df <- tribble(~word, ~n,
              "reminders",     104,
              "check",         100,
              "checks",        100,
              "mot",            87,
              "car",            82,
              "vehicle",        79,
              "send",           78,
              "people",         73,
              "maintenance",    44,
              "vehicles",       42)

df
#> # A tibble: 10 x 2
#>    word            n
#>    <chr>       <dbl>
#>  1 reminders     104
#>  2 check         100
#>  3 checks        100
#>  4 mot            87
#>  5 car            82
#>  6 vehicle        79
#>  7 send           78
#>  8 people         73
#>  9 maintenance    44
#> 10 vehicles       42

那你已经数过了;字数存储在n 列中。不用再用count()了,其实你试一试会得到一个无厘头的结果,听起来你经历过!

由于您已经计算了词频,因此您可以将结果直接输入到您拥有的其余代码中,以制作您感兴趣的情节。

df %>%
  filter(n > 40) %>% 
  mutate(word = reorder(word, n)) %>%
  ggplot(aes(word, n)) +
  geom_col() +
  xlab (NULL) +
  coord_flip()  

reprex package (v0.3.0) 于 2019 年 8 月 3 日创建

【讨论】:

  • 非常感谢!
【解决方案2】:

所以,我已经能够以非 tidyverse 方式生成情节,我会将其发布为答案,以便我可以包含情节并可以拥有代码块。这不是一个实际的答案。

# Loading in your data
z <- " 1 reminders     104
 2 check         100
 3 checks        100
 4 mot            87
 5 car            82
 6 vehicle        79
 7 send           78
 8 people         73
 9 maintenance    44
10 vehicles       42"
df <- read.table(text = z)[,-1] # Drop rownumbers

# Fix names
colnames(df) <- c("word", "n")

# Reorder factor
df$word <- factor(df$word, levels = df$word[order(df$n)])

ggplot(df, aes(word, n)) +
  geom_col() +
  xlab(NULL) +
  coord_flip()

【讨论】:

  • 您的复制不会执行 OP 正在执行的任何数据转换;这就是它起作用的原因,无论使用 tidyverse,因为 OP 的转换是多余的,正如您的评论正确观察到的那样。
  • 是的,这是有道理的,因为我没有 OP 的未转换数据。我并不是要暗示 tidyverse 的使用不好,我只是自己不熟练使用它。
  • 谢谢大家。我仍然不明白 sort TRUE 这个词,因为我已经从 tidyverse 代码中复制了它,并且我认为它从最常用的词中将数据排序到最少。但是,看到您的非 tidyverse 方法非常有用,因为我使用了它!谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 2023-03-05
  • 2017-09-22
相关资源
最近更新 更多