[解決済み] カテゴリ変数のグラフで、カウントの代わりにパーセント % を表示する。
質問
カテゴリ変数をプロットしているのですが、各カテゴリ値のカウントを表示するのではなく、カテゴリ値を表示するようにしています。
を取得する方法を探しています。
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は返ります。
関連
-
R: 環境と変数のスコープ問題
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
R - ユークリッド距離の計算を簡単にする方法
-
Rの警告 "条件の長さが1より大きいので、最初の要素しか使えない "に対する解決策
-
[解決済み] データフレームの行を複数の列でソート(並び替え)する。
-
[解決済み] グループ化関数(tapply、by、aggregate)と*applyファミリ
-
[解決済み] リストをデータフレームに変換する
-
[解決済み] なぜ `[`] は `subset` よりも優れているのですか?
-
[解決済み] 不足しているパッケージをチェックし、インストールするためのエレガントな方法?
-
[解決済み] Rで文字列から最後のn文字を抽出する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン