R ggplot2: stat_count() не должен использоваться с эстетической ошибкой y в гистограмме

#r

#r #ggplot2 #гистограмма

Вопрос:

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

Ниже приведен мой код:

  library(dplyr)
 library(ggplot2)

 #Investigate data further to build a machine learning model
 data_country = data %>%
           group_by(country) %>%
           summarise(conversion_rate = mean(converted))
  #Ist method
  qplot(country, conversion_rate, data = data_country,geom = "bar", stat ="identity", fill =   country)
  #2nd method
  ggplot(data_country) aes(x=country,y = conversion_rate) geom_bar()
 

Ошибка:

   stat_count() must not be used with a y aesthetic
 

Данные в data_country:

     country conversion_rate
    <fctr>           <dbl>
  1   China     0.001331558
  2 Germany     0.062428188
  3      UK     0.052612025
  4      US     0.037800687
 

Ошибка появляется в гистограмме, а не в пунктирной диаграмме.

Ответ №1:

Во-первых, ваш код немного не в порядке. aes() является аргументом в ggplot() , вы не используете ggplot(...) aes(...) layers

Во-вторых, из файла справки ?geom_bar :

По умолчанию geom_bar использует stat=»count», что делает высоту столбца пропорциональной количеству обращений в каждой группе (или, если указан эстетический вес, сумме весов). Если вы хотите, чтобы высоты столбцов представляли значения в данных, используйте stat=»identity» и сопоставьте переменную с эстетикой y.

Вам нужен второй случай, когда высота строки равна conversion_rate So, что вы хотите…

 data_country <- data.frame(country = c("China", "Germany", "UK", "US"), 
            conversion_rate = c(0.001331558,0.062428188, 0.052612025, 0.037800687))
ggplot(data_country, aes(x=country,y = conversion_rate))  geom_bar(stat = "identity")
 

Результат:

введите описание изображения здесь

Комментарии:

1. Да, это сработало, спасибо за объяснение, я немного новичок в этом, ценю вашу помощь

2. Уточнение, aes на самом деле это функция. Аргумент ggplot равен mapping . Мы предоставляем это отображение через aes функцию, поэтому вы часто видите шаблон ggplot(df, aes(...)) . Но шаблон ggplot(data_frame) aes(x = X, y = Y) тоже подходит. Помимо, возможно, улучшенной читаемости, aes для изменения эстетики на готовом графике можно использовать отдельный вызов: p <- ggplot(iris) aes(x= Species, y= Sepal. Длина) geom_point(); q <- p aes(y =Лепесток. Длина)

3. С 2020 года (и задолго до этого) ggplot(...) aes(...) layers все в порядке.

Ответ №2:

если вы хотите использовать свои данные, существующие в вашем фрейме данных, в качестве значения y, вы должны добавить stat = «identity» в параметр сопоставления. Функция geom_bar имеет значение y по умолчанию. Например,

 ggplot(data_country) 
  geom_bar(mapping = aes(x = country, y = conversion_rate), stat = "identity")
 

Ответ №3:

Вы можете использовать geom_col() напрямую. Смотрите различия между geom_bar() и geom_col() по этой ссылке https://ggplot2.tidyverse.org/reference/geom_bar.html

geom_bar() делает высоту столбца пропорциональной количеству обращений в каждой группе Если вы хотите, чтобы высоты столбцов отображали значения в данных, используйте вместо этого geom_col() .

 ggplot(data_country) aes(x=country,y = conversion_rate) geom_col()
 

Комментарии:

1. Могу подтвердить, что у меня была эта проблема, и это было самое простое решение.

Ответ №4:

Я искал то же самое, и это также может сработать

 p.Wages.all.A_MEAN <- Wages.all %>%
                  group_by(`Career Cluster`, Year)%>%
                  summarize(ANNUAL.MEAN.WAGE = mean(A_MEAN))
 

имена (p.Заработная плата.все.A_MEAN)
[1] «Кластер карьеры» «Год» «ГОДОВАЯ.СРЕДНЯЯ.ЗАРАБОТНАЯ ПЛАТА»

 p.Wages.all.a.mean <- ggplot(p.Wages.all.A_MEAN, aes(Year, ANNUAL.MEAN.WAGE , color= `Career Cluster`)) 
                  geom_point(aes(col=`Career Cluster` ), pch=15, size=2.75, alpha=1.5/4) 
                  theme(axis.text.x = element_text(color="#993333",  size=10, angle=0)) #face="italic",
p.Wages.all.a.mean