Почему мы получаем ошибку «Не знаем, как добавить o к графику»?

#r

#r

Вопрос:

Пытаюсь реализовать анализ настроений в Твиттере. Все работало нормально, но когда я пытаюсь создать гистограммы твитов и получаю ошибку как

     Error: Don't know how to add o to a plot
  

Когда я попробовал в первый раз, это дало мне правильный результат.
Но после этого он выдает мне указанную выше ошибку

Я хотел бы знать, почему мы получаем указанную выше ошибку. В моем случае я получаю эту ошибку в приведенных ниже случаях.

 # add variables to data frame
scores$drink = factor(rep(c("wine", "beer", "coffee", "soda"), nd))
scores$very.pos = as.numeric(scores$score >= 2)
scores$very.neg = as.numeric(scores$score <= -2)

# how many very positives and very negatives
numpos = sum(scores$very.pos)
numneg = sum(scores$very.neg)

# global score
global_score = round( 100 * numpos / (numpos   numneg) )

# colors
cols = c("#7CAE00", "#00BFC4", "#F8766D", "#C77CFF")
names(cols) = c("beer", "coffee", "soda", "wine")

1)  # barplot of average score
meanscore = tapply(scores$score, scores$drink, mean)
df = data.frame(drink=names(meanscore), meanscore=meanscore)
df$drinks <- reorder(df$drink, df$meanscore)

ggplot(df, aes(y=meanscore))  
geom_bar(data=df, aes(x=drinks, fill=drinks))  
scale_fill_manual(values=cols[order(df$meanscore)])  
opts(title = "Average Sentiment Score",
    legend.position = "none")
2)  # barplot of average very positive
drink_pos = ddply(scores, .(drink), summarise, mean_pos=mean(very.pos))
drink_pos$drinks <- reorder(drink_pos$drink, drink_pos$mean_pos)

ggplot(drink_pos, aes(y=mean_pos))  
geom_bar(data=drink_pos, aes(x=drinks, fill=drinks))  
scale_fill_manual(values=cols[order(drink_pos$mean_pos)])  
options(title = "Average Very Positive Sentiment Score",
    legend.position = "none")

3) # barplot of average very negative
drink_neg = ddply(scores, .(drink), summarise, mean_neg=mean(very.neg))
drink_neg$drinks <- reorder(drink_neg$drink, drink_neg$mean_neg)

ggplot(drink_neg, aes(y=mean_neg))  
geom_bar(data=drink_neg, aes(x=drinks, fill=drinks))  
scale_fill_manual(values=cols[order(drink_neg$mean_neg)])  
options(title = "Average Very Negative Sentiment Score",
legend.position = "none")
  

Выше во всех трех случаях я получаю одну и ту же проблему.
пожалуйста, подскажите мне, почему я получаю эту ошибку.
Как я могу это решить.

Пожалуйста, предложите мне.

Заранее спасибо,

Mohan.V

Ответ №1:

Я не могу воссоздать проблему, но, возможно, это потому, что это устаревшая версия ggplot2.

Я попытался воссоздать ваш scores data.frame вот так:

 nd <- 100
scores <- as.data.frame(list(scores = sample(-3:3, nd, replace = T),
drink = factor(rep(c("wine", "beer", "coffee", "soda"), nd))))
scores$very.pos = as.numeric(scores$score >= 2)
scores$very.neg = as.numeric(scores$score <= -2)
  

Затем, чтобы создать первую диаграмму, мы должны использовать geom_col вместо geom_bar , также с современным ggplot2, мы используем labs и theme , а не opts :

 ggplot(df, aes(y=meanscore))  
    geom_col(data=df, aes(x=drinks, fill=drinks))  
    scale_fill_manual(values=cols[order(df$meanscore)])   
    labs( title = "Average Sentiment Score")  
    theme(legend.position = "none")
  

Тот же подход работает для других графиков.