1. ホーム
  2. r

[解決済み] カテゴリ変数のグラフで、カウントの代わりにパーセント % を表示する。

2022-04-28 18:13:16

質問

カテゴリ変数をプロットしているのですが、各カテゴリ値のカウントを表示するのではなく、カテゴリ値を表示するようにしています。

を取得する方法を探しています。 ggplot に、そのカテゴリに含まれる値のパーセンテージを表示するようにしました。もちろん、算出されたパーセンテージで別の変数を作り、そちらをプロットすることも可能ですが、数十回行わなければならないので、1コマンドで実現できればと思っています。

のようなものを実験していました。

qplot(mydataf) +
  stat_bin(aes(n = nrow(mydataf), y = ..count../n)) +
  scale_y_continuous(formatter = "percent")

が、エラーが出たので、使い方が間違っているのでしょう。

設定を簡単に再現するために、簡略化した例を紹介します。

mydata <- c ("aa", "bb", NULL, "bb", "cc", "aa", "aa", "aa", "ee", NULL, "cc");
mydataf <- factor(mydata);
qplot (mydataf); #this shows the count, I'm looking to see % displayed.

実際のケースでは、おそらく ggplot の代わりに qplot が、正しい使い方は stat_bin は、まだ解明されていません。

この4つのアプローチも試してみました。

ggplot(mydataf, aes(y = (..count..)/sum(..count..))) + 
  scale_y_continuous(formatter = 'percent');

ggplot(mydataf, aes(y = (..count..)/sum(..count..))) + 
  scale_y_continuous(formatter = 'percent') + geom_bar();

ggplot(mydataf, aes(x = levels(mydataf), y = (..count..)/sum(..count..))) + 
  scale_y_continuous(formatter = 'percent');

ggplot(mydataf, aes(x = levels(mydataf), y = (..count..)/sum(..count..))) + 
  scale_y_continuous(formatter = 'percent') + geom_bar();

が、4つとも与える。

<ブロッククオート
Error: ggplot2 doesn't know how to deal with data of class factor

という単純なケースでも同じエラーが表示されます。

ggplot (data=mydataf, aes(levels(mydataf))) +
  geom_bar()

ということで、明らかに ggplot は単一のベクトルと相互作用します。頭を悩ませています。このエラーについてググると、1つの 結果 .

解決方法は?

この回答がなされてから、いくつかの有意義な変更がありました。 ggplot の構文があります。 上のコメントでの議論をまとめると

 require(ggplot2)
 require(scales)

 p <- ggplot(mydataf, aes(x = foo)) +  
        geom_bar(aes(y = (..count..)/sum(..count..))) + 
        ## version 3.0.0
        scale_y_continuous(labels=percent)

を使った再現例です。 mtcars :

 ggplot(mtcars, aes(x = factor(hp))) +  
        geom_bar(aes(y = (..count..)/sum(..count..))) + 
        scale_y_continuous(labels = percent) ## version 3.0.0

この質問は現在googleで「ggplot count vs percentage histogram」で1番目にヒットします。したがって、これが現在受け入れられた答えのコメントに収容されているすべての情報を抽出するのに役立つことを望みます。

備考 もし hp がファクターとして設定されていない場合、ggplotは返ります。