gpt4 book ai didi

r - 带有 wordclouds 的子图/方面

转载 作者:行者123 更新时间:2023-12-03 14:58:03 24 4
gpt4 key购买 nike

我正在尝试以一种方式制作几个词云的子图/方面
赏心悦目。

问题:

  • 我无法让基础 R 组合 wordcloud - 正确输出
  • 使用 ggplot2 制作 wordcloud允许刻面但产生不令人满意的结果
    (丑定位)

  • 我尝试了两种方法来创建这些 wordcloud-subplots。

    1. 我创建了一个示例数据集(遵循 here ):
    library(dplyr)
    library(janeaustenr)
    library(tidytext)

    df <- austen_books() %>%
    unnest_tokens(word, text) %>%
    anti_join(stop_words, by = "word") %>%
    group_by(book) %>%
    count(word) %>%
    top_n(100, n)

    2.我第一次尝试使用 wordcloud包和基础 R:
    library(wordcloud)

    par(mfrow = c(2,2))
    png("jane_austen_wordclouds.png")

    df %>%
    filter(book == "Sense & Sensibility") %>%
    with(wordcloud(word, n))

    df %>%
    filter(book == "Pride & Prejudice") %>%
    with(wordcloud(word, n))

    df %>%
    filter(book == "Mansfield Park") %>%
    with(wordcloud(word, n))

    df %>%
    filter(book == "Emma") %>%
    with(wordcloud(word, n))

    title( "Jane Austen Word Clouds", outer = TRUE)
    dev.off()

    创建:

    enter image description here

    所以不知何故它只保存了最后一个子图。如果我不使用 png("jane_austen_wordclouds.png")dev.off()然后直接从 RStudio 保存图形,然后我得到:

    enter image description here

    这也不好,因为它以某种方式截断了顶部和底部的最后三个子图。

    3. 其次,我使用 ggplot(灵感来自 this):
    library(ggplot2)
    library(ggrepel)

    df %>%
    filter(book %in% c("Sense & Sensibility", "Pride & Prejudice",
    "Mansfield Park", "Emma")) %>%
    ggplot(., aes(x = 1, y = 1, size = n, label = word)) +
    geom_text_repel(segment.size = 0, segment.alpha = 0) +
    scale_size(range = c(2, 15), guide = FALSE) +
    theme_void() +
    theme(panel.border = element_rect(colour = "black", fill=NA, size=1)) +
    facet_wrap(~book) +
    labs(title = "Jane Austen Word Clouds")
    ggsave("jane_austen_gg.png", width = 11, height = 11)

    这创造了:
    enter image description here

    沿着对角线看起来很奇怪。和 wordcloud看起来更好,因为它还垂直定向一些单词。

    可能没有办法插入漂亮的 wordcloud数字到ggplot?

    最佳答案

    我相信您可能会发现使用 gridGraphics 和 gridExtra 将绘图保存为对象而不是以排列的方式再次绘制它们会很有用。我已经测试了以下代码并且它有效。拳头将每个图形保存在不同的对象中,如下:

    toPlot<-df %>% 
    filter(book == "Sense & Sensibility")
    wordcloud(toPlot$word, toPlot$n, max.words=100, random.order=FALSE, scale=c(3,0.5))
    grid.echo()
    a <- grid.grab()

    #wordcloud2
    toPlot2 <- df %>%
    filter(book == "Pride & Prejudice")
    wordcloud(toPlot2$word, toPlot2$n, max.words=100, random.order=FALSE, scale=c(3,0.5))
    grid.echo()
    b <- grid.grab()

    #wordcloud3
    toPlot3 <- df %>%
    filter(book == "Mansfield Park")
    wordcloud(toPlot3$word, toPlot3$n, max.words=100, random.order=FALSE, scale=c(3,0.5))
    grid.echo()
    c <- grid.grab()

    #wordcloud4
    toPlot4 <- df %>%
    filter(book == "Emma")
    wordcloud(toPlot4$word, toPlot4$n, max.words=100, random.order=FALSE, scale=c(3,0.5))
    grid.echo()
    d <- grid.grab()

    然后,使用 4 个对象,您可以根据给定的矩阵排列它们。有关布局的更多信息,请参见此处: https://cran.r-project.org/web/packages/gridExtra/vignettes/arrangeGrob.html .在以下情况下,第二行的两个词云的布局比上面的要小:
    grid.newpage()
    lay <- rbind(c(1,1,1,2,2,2),
    c(1,1,1,2,2,2),
    c(1,1,1,2,2,2),
    c(1,1,1,2,2,2),
    c(3,3,3,4,4,4),
    c(3,3,3,4,4,4))
    grid.arrange(a,b,c,d, layout_matrix = lay)

    结果应该是这张图片: wordclouds

    关于r - 带有 wordclouds 的子图/方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47080052/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com