R ggplot2: stat_count () Bar grafikte estetik bir hata ile kullanılmamalıdır


91

Bir çubuk grafiği çizerken bu hatayı alıyorum ve ondan kurtulamıyorum, hem qplot hem de ggplot'u denedim ama yine de aynı hata.

Kodum aşağıdadır:

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

Hata:

  stat_count() must not be used with a y aesthetic

Data_country'deki veriler:

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

Hata, noktalı grafikte değil çubuk grafikte geliyor.

Yanıtlar:


149

Öncelikle, kodunuz biraz yetersiz. aes()bir argümandır ggplot(), ggplot(...)+aes(...) + layers

İkinci olarak, yardım dosyasından ?geom_bar:

Varsayılan olarak, geom_bar, çubuğun yüksekliğini her gruptaki vaka sayısına orantılı hale getiren stat = "count" kullanır (veya ağırlık estetiği sağlanmışsa, ağırlıkların toplamı). Çubukların yüksekliklerinin verilerdeki değerleri temsil etmesini istiyorsanız, stat = "kimlik" kullanın ve bir değişkeni y estetiğine eşleyin.

Çubuğun yüksekliğinin değerine eşit olduğu ikinci durumu istiyorsunuz. conversion_rateYani istediğiniz şey ...

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

Sonuç:

görüntü açıklamasını buraya girin


1
Evet bu işe yaradı, açıkladığın için teşekkürler, yardımını takdir et
Uasthana

Açıklama aesaslında bir işlevdir. Argüman ggplotşudur mapping. Bu eşlemeyi aesişlev aracılığıyla sağlıyoruz , böylece deseni ggplot(df, aes(...))çok görürsünüz . Ancak ggplot (data_frame) + aes (x = X, y = Y) deseni de iyidir. Muhtemelen geliştirilmiş okunabilirliğin yanı sıra, aesönceden hazırlanmış bir arsa üzerinde estetiği değiştirmek için ayrı çağırmak da kullanılabilir: p <- ggplot (iris) + aes (x = Türler, y = Sepal.Length) + geom_point (); q <- p + aes (y = Petal.Length)
teofil

7

Veri çerçevenizde bulunan verilerinizi y değeri olarak kullanmak istediğinizde, mapping parametresine stat = "identity" eklemelisiniz. Geom_bar işlevinin varsayılan y değeri vardır. Örneğin,

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

6

Doğrudan geom_col () kullanabilirsiniz. Bu bağlantı https://ggplot2.tidyverse.org/reference/geom_bar.html'de geom_bar () ve geom_col () arasındaki farkları görün

geom_bar (), çubuğun yüksekliğini her gruptaki vaka sayısıyla orantılı yapar Çubukların yüksekliklerinin verilerdeki değerleri temsil etmesini istiyorsanız, bunun yerine geom_col () kullanın.

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

Bu sorunu yaşadığımı doğrulayabilir miyim ve bu en basit çözümdü.
Spence_p

0

Ben de aynısını arıyordum ve bu da işe yarayabilir

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

isimler (p.Wages.all.A_MEAN) [1] "Kariyer Kümesi" "Yıl" "YILLIK.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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.