使用ggplot

时间:2018-04-16 16:33:52

标签: r tidytext

我正在使用名为HappyDB的数据集进行课堂演示,并分析字频的人口统计差异。我在大多数分析中都使用tidytext,并使用their online guide创建了大部分视觉效果。但是,我遇到了代码问题,无法使用标签创建单词的频率图。我的数据集与他们的结构不同,我认为我是在考虑它,但我显然不是。这是他们生成图表的示例代码(比较Jane Austen和Bronte姐妹和H.G. Wells)

library(tidyr)

frequency <- bind_rows(mutate(tidy_bronte, author = "Brontë Sisters"),
                   mutate(tidy_hgwells, author = "H.G. Wells"), 
                   mutate(tidy_books, author = "Jane Austen")) %>% 
mutate(word = str_extract(word, "[a-z']+")) %>%
count(author, word) %>%
group_by(author) %>%
mutate(proportion = n / sum(n)) %>% 
select(-n) %>% 
spread(author, proportion) %>% 
gather(author, proportion, `Brontë Sisters`:`H.G. Wells`)

library(scales)

# expect a warning about rows with missing values being removed
ggplot(frequency, aes(x = proportion, y = `Jane Austen`, color = abs(`Jane Austen` - proportion))) +
  geom_abline(color = "gray40", lty = 2) +
  geom_jitter(alpha = 0.1, size = 2.5, width = 0.3, height = 0.3) +
  geom_text(aes(label = word), check_overlap = TRUE, vjust = 1.5) +
  scale_x_log10(labels = percent_format()) +
  scale_y_log10(labels = percent_format()) +
  scale_color_gradient(limits = c(0, 0.001), low = "darkslategray4", high = "gray75") +
  facet_wrap(~author, ncol = 2) +
  theme(legend.position="none") +
  labs(y = "Jane Austen", x = NULL)

该代码生成此图:

enter image description here

我希望在我的数据集中使用受众特征模拟这一点,但不断收到错误。这是我的代码,它使用了我已经整理过的数据集:

library(dplyr)
library(tidyr)
library(ggplot2)
library(tidytext)
library(stringr) 

windowsFonts(Franklin=windowsFont("Franklin Gothic Demi"))

marriedmen <- tidy_hm[which(tidy_hm$marital =="married" &
                               tidy_hm$gender == "m"),]
marriedwomen <- tidy_hm[which(tidy_hm$marital =="married" &
                                tidy_hm$gender == "f"),]
singlemen <- tidy_hm[which(tidy_hm$marital =="single" &
                             tidy_hm$gender == "m"),]

frequency <- bind_rows(mutate(marriedmen, status = "Married men"),
                       mutate(marriedwomen, status = "Married women"), 
                       mutate(singlemen, status = "Single men")) %>% 
  count(status, word) %>%
  group_by(status) %>%
  mutate(proportion = n / sum(n)) %>% 
  select(-n) %>% 
  spread(status, proportion) %>% 
  gather(status, proportion, `Married women`:`Single men`)

library(scales)

# expect a warning about rows with missing values being removed
ggplot(frequency, aes(x = proportion, y = 'Married men', color = abs(`Married men` - proportion)) +
  geom_abline(color = "gray40", lty = 2) +
  geom_jitter(alpha = 0.1, size = 2.5, width = 0.3, height = 0.3) +
  geom_text(aes(label = word), check_overlap = TRUE, vjust = 1.5) +
  scale_x_log10(labels = percent_format()) +
  scale_y_log10(labels = percent_format()) +
  scale_color_gradient(limits = c(0, 0.001), low = "darkslategray4", high = "gray75") +
  facet_wrap(~status, ncol = 2) +
  theme(legend.position="none") +
  labs(y = NULL, x = NULL)

但我一直收到这个错误:

Error in log(x, base) : non-numeric argument to mathematical function

我尝试删除比例行,但这导致一堆数据被消除,并且情节看起来不像它应该的那样,并且没有线条,标签或颜色。我对r和编码很新,所以任何帮助都会受到赞赏。

0 个答案:

没有答案