【问题标题】:Scatter plot or dispersion plot in RR中的散点图或分散图
【发布时间】:2019-02-08 22:07:29
【问题描述】:

好的,所以我想要一个单一的情节,其中有“x”部小说,我们将能够看到特定单词在所有小说中的分布情况。每部小说都有不同的长度(总字数),因此“x”轴必须是小说,“y”轴必须是每部小说的长度。现在,我可以为每部小说创建一个单独的情节,但我想把它们都放在一起。这是我目前所拥有的:

input.dir<-("corpus2")
files.v<-dir(input.dir, "\\.txt$")

corpus<-corpus(files.v, input.dir)

tiempo<-tiempo(corpus)

noche<-palabra("día", corpus, tiempo)

dispersion(noche)

#corpus

corpus<-function(files.v, input.dir){
  text.word.vector.l<-list()
  for(i in 1:length(files.v)){
    text.v <- scan(paste(input.dir, files.v[i], sep="/"), what="character", sep="\n")
    Encoding(text.v)<-"UTF-8"
    text.v <- paste(text.v, collapse=" ")
    text.lower.v <- tolower(text.v)
    text.words.v <- strsplit(text.lower.v, "\\W")
    text.words.v <- unlist(text.words.v)
    text.words.v <- text.words.v[which(text.words.v!="")]
    text.word.vector.l[[files.v[i]]] <- text.words.v
  }
  return(text.word.vector.l)
}

#tiempo

tiempo <- function(argument1){
  tiempo.l<-list()
  for (i in 1:length(argument1)){
    time<-seq(1:length(argument1[[i]]))
    tiempo.l[[files.v[i]]]<-time
  }
  return(tiempo.l)
}

#palabra

palabra<-function(keyword, argument1, argument2){
  hits.l<-list()
  for (i in 1:length(argument1)) {
    hits.v<-which(argument1[[i]]==keyword)
    hits.keyword.v<-rep(NA, length(argument2[[i]]))
    hits.keyword.v[hits.v]<-1
    hits.l[[files.v[i]]]<-hits.keyword.v
  }
  return(hits.l)
}

#dispersion

dispersion<-function(argument1){
  options(scipen=5)
  for (i in 1:length(argument1)) {
    plot(argument1[[i]], main="Dispersion plot",
         xlab="time", ylab="keyword", type="h", ylim=c(0,1), yaxt='n')
  }
}

我怎样才能把它组合在一起?这是一张我觉得它应该是什么样子的图片:

我想要做的是或多或少地将所有这些情节放在一起:

【问题讨论】:

  • “分散”是什么意思?您是否正在尝试使用条形图绘制每部小说中单词出现的频率?请阅读How to Create a Minimal, Complete, and Verifiable Example 并更新您的问题。
  • 我要做的是绘制小说中特定单词出现的“位置”。用总字数设定小说多长的形象。我说清楚了吗?
  • 感谢 Marcus。看起来 eipi10 提供了答案。

标签: r ggplot2 bar-chart scatter-plot


【解决方案1】:

您的示例不可重现,因此下面的代码使用 Jane Austen 的小说使用 ggplot2 绘制单词位置。希望您可以根据需要调整此代码

library(tidyverse)
library(janeaustenr)
library(scales)

# Function to plot dispersion of a given vector of words in novels by Jane Austen
plot.dispersion = function(words) {

  pattern = paste(words, collapse="|")

  # Get locations of each input word in each text
  # Adapted from Text Mining with R (https://www.tidytextmining.com/tfidf.html)
  texts = austen_books() %>% 
    group_by(book) %>% 
    mutate(text = str_split(tolower(text), "\\W")) %>% 
    unnest %>% 
    filter(text != "") %>% 
    mutate(word.num = 1:n(),
           pct = word.num/n()) %>% 
    filter(grepl(pattern, text)) %>% 
    mutate(text = str_extract(text, pattern))

  # Plot the word locations
  ggplot(texts, aes(y=book, x=pct)) +
    geom_point(shape="|", size=5) +
    facet_grid(text ~ .) +
    scale_x_continuous(labels=percent) +
    labs(x="Percent of book", y="") +
    theme_bw() +
    theme(panel.grid.major.x=element_blank(),
          panel.grid.minor.x=element_blank())
}

plot.dispersion(c("independent", "property"))

【讨论】:

  • 嗨。谢谢你的回答。这真的是我正在寻找的。我只有一个问题。我的书受版权保护,所以我不能与您分享它们,以便您可以复制我正在尝试做的事情。我总是以纯文本形式使用它们。反正我可以用它们代替奥斯汀的书吗?我该怎么做?
猜你喜欢
  • 2016-04-07
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多