R ggplot2: stat_count () não deve ser usado com nenhum erro estético no gráfico de barras

89

Estou recebendo este erro ao plotar um gráfico de barras e não consigo me livrar dele. Tentei o qplot e o ggplot, mas ainda com o mesmo erro.

A seguir está meu código:

 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()

Erro:

  stat_count() must not be used with a y aesthetic

Dados em data_country:

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

O erro está chegando no gráfico de barras e não no gráfico pontilhado.

Uasthana
fonte

Respostas:

147

Primeiro, seu código está um pouco errado. aes()é um argumento em ggplot(), você não usa ggplot(...)+aes(...) + layers

Em segundo lugar, a partir do arquivo de ajuda ?geom_bar:

Por padrão, geom_bar usa stat = "count" que torna a altura da barra proporcional ao número de casos em cada grupo (ou se o peso etético for fornecido, a soma dos pesos). Se você quiser que as alturas das barras representem valores nos dados, use stat = "identity" e mapeie uma variável para a estética y.

Você quer o segundo caso, onde a altura da barra é igual a conversion_rateEntão o que você quer é ...

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")

Resultado:

insira a descrição da imagem aqui

Chrisss
fonte
1
Sim, funcionou, obrigado por explicar, eu sou um pouco novo nisso, agradeço sua ajuda
Uasthana
O esclarecimento aesé de fato uma função. O argumento para ggploté mapping. Fornecemos esse mapeamento por meio da aesfunção, para que você veja muito o padrão ggplot(df, aes(...)). Mas o padrão ggplot (data_frame) + aes (x = X, y = Y) também está bom. Além da legibilidade possivelmente melhorada, a chamada aesseparadamente pode ser usada para modificar a estética em um gráfico predefinido: p <- ggplot (íris) + aes (x = Espécie, y = Sépala.Comprimento) + geom_point (); q <- p + aes (y = Petal.Length)
teofil
7

quando você deseja usar seus dados existentes em seu quadro de dados como valor y, você deve adicionar stat = "identidade" no parâmetro de mapeamento. A função geom_bar tem o valor y padrão. Por exemplo,

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

Você pode usar geom_col () diretamente. Veja as diferenças entre geom_bar () e geom_col () neste link https://ggplot2.tidyverse.org/reference/geom_bar.html

geom_bar () torna a altura da barra proporcional ao número de casos em cada grupo. Se você quiser que as alturas das barras representem valores nos dados, use geom_col ().

ggplot(data_country)+aes(x=country,y = conversion_rate)+geom_col()
Peixe Dourado Salgado
fonte
Posso confirmar que tenho tido esse problema e essa foi a solução mais simples.
Spence_p
0

Eu estava procurando o mesmo e isso também pode funcionar

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

nomes (p.Wages.all.A_MEAN) [1] "Grupo de Carreira" "Ano" "ANUAL.MEAN.WAGE"

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
Seyma Kalay
fonte