【问题标题】:Error: geom_bar requires the following missing aesthetics: y错误:geom_bar 需要以下缺失的美学:y
【发布时间】:2018-12-04 01:56:23
【问题描述】:

在 zomato 文件夹中有 4 个 csv(bengoli、chinese、italian 和 panjabi)文件。我正在使用基于词典的情感分析将这些文件与正面和负面的单词文本文件进行比较。一切都运行良好,我也非常完美地获得了 a、c、e、g 的值。但是当涉及到情节时,它给了我这个错误

不知道如何为列表类型的对象自动选择比例。默认为连续。 错误:geom_bar 需要以下缺失的美学:y

 library(stringr)
    library(ggplot2)
    library(tm)


     src <- DirSource("./Data/foodwise/zomato")
        docs <- Corpus(src)
        docs <- tm_map(docs, removePunctuation)
        docs <- tm_map(docs,content_transformer(tolower))
        docs <- tm_map(docs, removeNumbers)
        docs <- tm_map(docs, removeWords,stopwords("english"))
        docs <- tm_map(docs, stripWhitespace)
        docs <- tm_map(docs, stemDocument)
        writeCorpus(docs, path="./Data")

texts <- readLines("./Data/zomato bengoli.csv.txt")
        opinion.lexicon.pos <- scan('./Data/positive-word.txt', what='character', comment.char = ';')
        opinion.lexicon.neg <- scan('./Data/negative-word.txt', what='character', comment.char = ';')
        jj <- str_split(texts, pattern="\\s+")
        a <- lapply(jj,function(x){sum(!is.na(match(x,opinion.lexicon.pos)))})
        texts1 <- readLines("./Data/zomato chinese.csv.txt")
        jj <- str_split(texts1, pattern="\\s+")
        c <- lapply(jj,function(x){sum(!is.na(match(x,opinion.lexicon.pos)))})

        texts2 <- readLines("./Data/zomato Italian.csv.txt")
        jj <- str_split(texts2, pattern="\\s+")
        e <- lapply(jj,function(x){sum(!is.na(match(x,opinion.lexicon.pos)))})

        texts3 <- readLines("./Data/zomato panjabi.csv.txt")
        jj <- str_split(texts3, pattern="\\s+")
        g <- lapply(jj,function(x){sum(!is.na(match(x,opinion.lexicon.pos)))})
        x <-c("Bengoli", "Chinese", "Italian", "Panjabi")
        y <- c(a, c ,e, g)
        data <- data.frame(x, y)
        ggplot(data, aes(x, y)) + geom_bar(stat = "identity",aes(fill = x)) + xlab("Cuisines") + ylab("Total count") + ggtitle("")+ scale_fill_manual("Cuisines", values = c("Italian" = "lightpink", "Panjabi" = "lightblue", "Chinese" = "darkgrey", "Bengoli"="lightgreen"))

【问题讨论】:

  • 欢迎来到 SO。首先:stackoverflow.com/questions/5963269/… 然后是你的问题:我想错误信息几乎是不言自明的。您需要提供一个连续的“y”。或者你使用 stat = 'count' 或 geom_count
  • lapply 返回一个 list 类的对象。这意味着您的对象aceg 是列表,所以y 也是一个列表。 ggplot 不适用于列表,这就是“不知道如何为列表类型的对象自动选择比例”所说的。如果没有可重复的示例和用文字描述您的目标,很难为您提供帮助。如果您需要比这些 cmets 更多的帮助,请查看 Tjebo 的链接,并为我们提供一个可重复使用的示例。

标签: r ggplot2 rstudio


【解决方案1】:

如前所述,我们确实需要一个可重复的示例来做好回答工作,但我会根据我认为您的要求进行尝试

您的主要问题是您aceg 都是列表,所以y 也是一个列表。您需要将它们转换为数字,然后求和,如果您想要总数

jj <- list("Bengoli","English", "Bengoli")
g <- lapply(jj,function(i){sum(!is.na(match(i,"Bengoli")))})
# this is a list:
g

g2 <- sum(unlist(g))
# Now it is a number which you can supply to ggplot
g2

x <-c("Bengoli", "Chinese", "Italian", "Panjabi")
y <- c(g2,4,3,6)

data <- data.frame(x, y)
ggplot(data, aes(x, y)) + 
  geom_bar(stat = "identity",aes(fill = x)) + 
  xlab("Cuisines") + 
  ylab("Total count") + 
  scale_fill_manual("Cuisines",
                    values = c("Italian" = "lightpink",
                               "Panjabi" = "lightblue", 
                               "Chinese" = "darkgrey", 
                               "Bengoli"="lightgreen"))

【讨论】:

  • 抱歉,我现在更新了我的问题。希望你能明白我的意思......我非常完美地得到了 a、c、e、g 的值。但是当涉及到 ggplot 时,它向我显示了一个错误
  • 如果你写class(g)class(y)你会得到什么?
  • 天啊,写完 class(y) 我得到了准确的输出。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 2019-07-15
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多