R ggplot2:stat_count()を棒グラフの美的エラーとともに使用してはなりません


89

棒グラフのプロット中にこのエラーが発生し、それを取り除くことができません。qplotとggplotの両方を試しましたが、それでも同じエラーが発生しました。

以下は私のコードです:

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

エラー:

  stat_count() must not be used with a y aesthetic

data_countryのデータ:

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

エラーは、点線グラフではなく棒グラフで表示されます。

回答:


147

まず、コードが少しずれています。aes()の引数でありggplot()ggplot(...)+ は使用しませんaes(...) + layers

次に、ヘルプファイルから?geom_bar

デフォルトでは、geom_barはstat = "count"を使用します。これにより、バーの高さが各グループのケースの数に比例します(または、ウェイトエーテティックが指定されている場合は、ウェイトの合計)。バーの高さでデータの値を表す場合は、stat = "identity"を使用して、変数をy美観にマッピングします。

バーの高さがに等しい2番目のケースが必要なので、conversion_rate必要なのは...

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

結果:

ここに画像の説明を入力してください


1
はい、それはそれを説明してくれて感謝しました。私はこれに少しも新しくありません。あなたの助けに感謝します
Uasthana

明確化aesは、実際には機能です。の引数ggplotmappingです。このマッピングはaes関数を介して提供されるため、パターンggplot(df, aes(...))がよくわかります。しかし、パターンggplot(data_frame)+ aes(x = X、y = Y)も問題ありません。可読性が向上する可能性aesがあるだけでなく、個別に呼び出すことで、事前に作成されたプロットの美観を変更することもできます。q <-p + aes(y = Petal.Length)
teofil

7

データフレームに存在するデータをy値として使用する場合は、マッピングパラメータにstat = "identity"を追加する必要があります。関数geom_barにはデフォルトのy値があります。例えば、

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

5

geom_col()を直接使用できます。このリンクhttps://ggplot2.tidyverse.org/reference/geom_bar.htmlでgeom_bar()とgeom_col()の違いを確認してください

geom_bar()は、バーの高さを各グループのケースの数に比例させます。バーの高さでデータ内の値を表す場合は、代わりにgeom_col()を使用します。

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

私がこの問題を抱えていたことが確認でき、これが最も簡単な解決策でした。
Spence_p

0

私は同じものを探していましたが、これもうまくいくかもしれません

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

names(p.Wages.all.A_MEAN)[1]「キャリアクラスター」「年」「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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.