R ggplot2: stat_count () no debe usarse con un error estético ay en el gráfico de barras


91

Recibo este error al trazar un gráfico de barras y no puedo deshacerme de él, he probado tanto qplot como ggplot, pero sigo teniendo el mismo error.

A continuación está mi 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()

Error:

  stat_count() must not be used with a y aesthetic

Datos en data_country:

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

El error viene en el gráfico de barras y no en el gráfico de puntos.

Respuestas:


149

En primer lugar, su código está un poco fuera de lugar. aes()es un argumento en ggplot(), no usas ggplot(...)+aes(...) + layers

En segundo lugar, del archivo de ayuda ?geom_bar:

Por defecto, geom_bar usa stat = "count" que hace que la altura de la barra sea proporcional al número de cajas en cada grupo (o si se proporciona la estética de peso, la suma de los pesos). Si desea que las alturas de las barras representen valores en los datos, use stat = "identity" y asigne una variable a la estética y.

Quieres el segundo caso, donde la altura de la barra es igual a la conversion_rateEntonces lo que quieres es ...

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:

ingrese la descripción de la imagen aquí


1
Sí, eso funcionó gracias por explicarlo, soy un poco nuevo en esto, agradezco su ayuda
Uasthana

La aclaración, aeses de hecho una función. El argumento de ggplotes mapping. Proporcionamos ese mapeo a través de la aesfunción, para que vea mucho el patrón ggplot(df, aes(...)). Pero el patrón ggplot (data_frame) + aes (x = X, y = Y) también está bien. Aparte de una legibilidad posiblemente mejorada, las llamadas por aesseparado se pueden usar para modificar la estética en un gráfico prefabricado: p <- ggplot (iris) + aes (x = Species, y = Sepal.Length) + geom_point (); q <- p + aes (y = Petal.Length)
teofil

7

cuando desee utilizar sus datos existentes en su marco de datos como valor y, debe agregar stat = "identity" en el parámetro de mapeo. La función geom_bar tiene el valor y predeterminado. Por ejemplo,

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

6

Puede usar geom_col () directamente. Vea las diferencias entre geom_bar () y geom_col () en este enlace https://ggplot2.tidyverse.org/reference/geom_bar.html

geom_bar () hace que la altura de la barra sea proporcional al número de casos en cada grupo. Si desea que las alturas de las barras representen valores en los datos, utilice geom_col () en su lugar.

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

Puedo confirmar que había tenido este problema y que esta era la solución más simple.
Spence_p

0

Estaba buscando lo mismo y esto también puede funcionar.

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

nombres (p.Wages.all.A_MEAN) [1] "Grupo de carreras" "Año" "SALARIO.MEAN.ANUAL"

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.