R ggplot2: stat_count () darf nicht mit einem ästhetischen Fehler im Balkendiagramm verwendet werden


89

Ich erhalte diesen Fehler beim Zeichnen eines Balkendiagramms und kann ihn nicht entfernen. Ich habe sowohl qplot als auch ggplot ausprobiert, aber immer noch den gleichen Fehler.

Folgendes ist mein Code:

 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

Daten in data_country:

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

Der Fehler tritt im Balkendiagramm und nicht im gepunkteten Diagramm auf.

Antworten:


147

Zunächst einmal ist Ihr Code ein bisschen aus. aes()ist ein Argument in ggplot(), Sie verwenden nicht ggplot(...)+aes(...) + layers

Zweitens aus der Hilfedatei ?geom_bar:

Standardmäßig verwendet geom_bar stat = "count", wodurch die Höhe des Balkens proportional zur Anzahl der Fälle in jeder Gruppe wird (oder, wenn die Gewichtsästhetik angegeben wird, die Summe der Gewichte). Wenn Sie möchten, dass die Balkenhöhen Werte in den Daten darstellen, verwenden Sie stat = "identity" und ordnen Sie der y-Ästhetik eine Variable zu.

Sie möchten den zweiten Fall, in dem die Höhe des Balkens gleich dem ist. conversion_rateSie möchten also ...

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

Ergebnis:

Geben Sie hier die Bildbeschreibung ein


1
Ja, das hat funktioniert, danke für die Erklärung. Ich bin ein wenig neu in diesem Bereich. Schätzen Sie Ihre Hilfe
Uasthana

Klarstellung aesist in der Tat eine Funktion. Das Argument dafür ggplotist mapping. Wir stellen diese Zuordnung über die aesFunktion bereit , sodass Sie das Muster häufig sehen ggplot(df, aes(...)). Aber auch das Muster ggplot (data_frame) + aes (x = X, y = Y) ist in Ordnung. Abgesehen von einer möglicherweise verbesserten Lesbarkeit kann ein aesseparater Aufruf verwendet werden, um die Ästhetik eines vorgefertigten Diagramms zu ändern: p <- ggplot (Iris) + aes (x = Spezies, y = Sepal.Length) + geom_point (); q <- p + aes (y = Blütenblattlänge)
Teofil

7

Wenn Sie Ihre in Ihrem Datenrahmen vorhandenen Daten als y-Wert verwenden möchten, müssen Sie stat = "identity" in den Zuordnungsparameter einfügen. Die Funktion geom_bar hat den Standardwert y. Beispielsweise,

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

4

Sie können geom_col () direkt verwenden. Sehen Sie die Unterschiede zwischen geom_bar () und geom_col () in diesem Link https://ggplot2.tidyverse.org/reference/geom_bar.html

Mit geom_bar () wird die Höhe des Balkens proportional zur Anzahl der Fälle in jeder Gruppe. Wenn Sie möchten, dass die Höhe der Balken Werte in den Daten darstellt, verwenden Sie stattdessen geom_col ().

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

0

Ich habe das gleiche gesucht und das könnte auch funktionieren

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

Namen (p.Wages.all.A_MEAN) [1] "Karrierecluster" "Jahr" "ANNUAL.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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.