R ggplot2: stat_count () tidak boleh digunakan dengan kesalahan estetika dalam grafik Batang

91

Saya mendapatkan kesalahan ini saat memplot grafik batang dan saya tidak dapat menghilangkannya, saya telah mencoba qplot dan ggplot tetapi masih kesalahan yang sama.

Berikut adalah kode saya:

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

Kesalahan:

  stat_count() must not be used with a y aesthetic

Data di data_country:

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

Kesalahan terjadi pada diagram batang dan bukan pada diagram titik-titik.

Uasthana
sumber

Jawaban:

149

Pertama, kode Anda sedikit salah. aes()adalah argumen ggplot(), Anda tidak menggunakan ggplot(...)+aes(...) + layers

Kedua, dari file bantuan ?geom_bar:

Secara default, geom_bar menggunakan stat = "count" yang membuat tinggi batang proporsional dengan jumlah kasus di setiap grup (atau jika aethetic bobot diberikan, jumlah bobot). Jika Anda ingin ketinggian batang mewakili nilai dalam data, gunakan stat = "identity" dan petakan variabel ke estetika y.

Anda menginginkan kasus kedua, di mana tinggi batang sama dengan conversion_rateJadi yang Anda inginkan adalah ...

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

Hasil:

masukkan deskripsi gambar di sini

Astaga
sumber
1
Ya, itu berhasil, terima kasih telah menjelaskannya, saya sedikit baru dalam hal ini menghargai bantuan Anda
Uasthana
Klarifikasi, aessebenarnya adalah sebuah fungsi. Argumennya ggplotadalah mapping. Kami menyediakan pemetaan itu melalui aesfungsi, sehingga Anda sering melihat polanya ggplot(df, aes(...)). Tapi pola ggplot (data_frame) + aes (x = X, y = Y) juga bagus. Selain dari kemungkinan keterbacaan yang lebih baik, pemanggilan aessecara terpisah dapat digunakan untuk memodifikasi estetika pada plot yang dibuat sebelumnya: p <- ggplot (iris) + aes (x = Species, y = Sepal.Length) + geom_point (); q <- p + aes (y = Petal.Length)
teofil
7

ketika Anda ingin menggunakan data Anda yang ada di bingkai data Anda sebagai nilai y, Anda harus menambahkan stat = "identitas" di parameter pemetaan. Fungsi geom_bar memiliki nilai y default. Sebagai contoh,

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

Anda dapat menggunakan geom_col () secara langsung. Lihat perbedaan antara geom_bar () dan geom_col () di tautan ini https://ggplot2.tidyverse.org/reference/geom_bar.html

geom_bar () membuat tinggi batang sebanding dengan jumlah kasus di setiap grup. Jika Anda ingin tinggi batang mewakili nilai dalam data, gunakan geom_col () sebagai gantinya.

ggplot(data_country)+aes(x=country,y = conversion_rate)+geom_col()
Ikan Emas Asin
sumber
Dapat mengonfirmasi bahwa saya telah mengalami masalah ini dan ini adalah solusi paling sederhana.
Spence_p
0

Saya mencari hal yang sama dan ini mungkin juga berhasil

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

nama (p.Wages.all.A_MEAN) [1] "Gugus Karir" "Tahun" "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
Seyma Kalay
sumber