[解決済み] ggplot2で1軸のみをlog10スケールに変換する
質問
離散変数と連続変数をボックスプロットで可視化したいのですが、後者に極端に高い値が数個あります。これはボックスプロットを無意味にし(ポイントやチャートの本体さえも小さすぎます)、それが私がこれをlog10スケールで表示したい理由です。視覚化から極端な値を除外することができることは承知していますが、私はそれを意図していません。
ダイヤモンドのデータで簡単な例を見てみましょう。
m <- ggplot(diamonds, aes(y = price, x = color))
<イグ
ここでは深刻な問題ではないのですが、なぜlog10のスケールで値を見たいのか、想像していただけたでしょうか。試してみましょう。
m + geom_boxplot() + coord_trans(y = "log10")
<イグ
見ての通り、y軸はlog10スケーリングされており、問題なく見えますが、x軸に問題があり、プロットが非常におかしくなっています。
で問題が発生することはありません。
scale_log
しかし
これは私にとってはオプションではありません
この方法では、カスタムフォーマッターを使用することができないからです。例えば
m + geom_boxplot() + scale_y_log10()
<イグ
質問:Y軸にlog10のスケールを持つboxplotをプロットするソリューションを知っている人はいますか?
formatter
のような関数があります。
スレッド
?
回答やコメントをもとに、回答者を支援するための質問を編集しています。
私が本当に求めているもの:科学的でないラベルを持つ1つのlog10変換された軸(y)。私はそれをドルのようにラベル付けしたいと思います
(formatter=dollar)
または任意のカスタムフォーマット。
ハドレーさんの提案を試すと、以下のような警告が表示されます。
> m + geom_boxplot() + scale_y_log10(formatter=dollar)
Warning messages:
1: In max(x) : no non-missing arguments to max; returning -Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
3: In max(x) : no non-missing arguments to max; returning -Inf
y軸のラベルを変更しない場合。
解決方法は?
一番簡単なのは、'trans' (旧 'formatter') 引数に
scale_x_continuous
または
scale_y_continuous
には、希望するログ関数の名前を指定します。
library(ggplot2) # which formerly required pkg:plyr
m + geom_boxplot() + scale_y_continuous(trans='log10')
EDIT もし、それが嫌なら、これらのどちらかは、異なるが有用な結果を与えるように見える。
m <- ggplot(diamonds, aes(y = price, x = color), log="y")
m + geom_boxplot()
m <- ggplot(diamonds, aes(y = price, x = color), log10="y")
m + geom_boxplot()
EDIT2 & 3: さらなる実験(ログ値の前に"$"記号を置くことに成功したものを破棄した後)。
# Need a function that accepts an x argument
# wrap desired formatting around numeric result
fmtExpLg10 <- function(x) paste(plyr::round_any(10^x/1000, 0.01) , "K $", sep="")
ggplot(diamonds, aes(color, log10(price))) +
geom_boxplot() +
scale_y_continuous("Price, log10-scaling", trans = fmtExpLg10)
<イグ
パッケージの構文変更に関するコメントで2017年半ばに追記。
<ブロッククオートscale_y_continuous(formatter = 'log10') は scale_y_continuous(trans = 'log10') に変更になりました (ggplot2 v2.2.1)
関連
-
[解決済み】"置換する項目数が置換長の倍数でない "と表示されるのはなぜですか?
-
[解決済み】基本 - T-検定 -> グループ化因子は正確に2水準でなければならない
-
[解決済み】model.frame.defaultでのエラー:変数の長さが異なる
-
[解決済み] 変数の型(リスト)が無効です
-
[解決済み】RでKNN。trainとclassは長さが違う」?
-
[解決済み】bstTreeの予測値の混乱行列、エラー:'The data must contain some levels that overlap reference'.
-
[解決済み】Rで文字ベクトルから引用符を削除する
-
[解決済み】R4DSのエラー比較(1)は、アトミック型とリスト型でのみ可能です
-
[解決済み] ggplot2 の軸ラベルを回転させ、間隔を空ける
-
[解決済み] ggplot を使ってプロットするとき、hjust と vjust は何をするのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】添え字付き代入でNAを使用することはできません
-
[解決済み】scale_color_manual()が動作しない件
-
[解決済み】ベースグラフィックスでプロットエリアの外側に凡例をプロットする?
-
[解決済み】「次のオブジェクトは 'package:xxx' からマスクされています」とはどういう意味ですか?
-
[解決済み】Rのメモリ管理/サイズn Mbのベクトルを割り当てられない
-
[解決済み】「'dimnames' [1]の長さが配列の範囲と等しくない」とはどういう意味ですか?
-
[解決済み】bstTreeの予測値の混乱行列、エラー:'The data must contain some levels that overlap reference'.
-
[解決済み】Rの整数オーバーフローとは何ですか、そしてどのように起こるのですか?
-
[解決済み】R 置換する項目数が置換長の倍数でない/しかし結果は正しい
-
[解決済み】 if/while (条件) {: TRUE/FALSEが必要な場所に値がない場合のエラー