2012-04-05 114 views
17

私はループ内でいくつかのggplotグラフをプロットしています(私は知っている、私はループを使用しないことを知っている...)しかし、小数精度を設定する方法があった1小数点(すなわち0.0)。私は以下のスケール変換を使用しています。ggplot2 y軸ラベル小数精度

p <- p + scale_y_log10() 

助けてください。

私は一種の小数点以下(すなわち1.2)がデフォルトでしたが、あなたはより多くの小数点以下を見ているならば、あなたはスケールに独自の書式を渡すことができるという印象の下にあった

答えて

20

fmt_dcimals <- function(decimals=0){ 
    # return a function responpsible for formatting the 
    # axis labels with a given number of decimals 
    function(x) as.character(round(x,decimals)) 
} 
その後、

そして、あなたのプロットにスケールを追加します。

ggplot(...) + scale_y_log10(labels = fmt_dcimals(2)) 

今、私はこのことについて考えていることを、私はあなたが本当にあなた自身のフォーマッタを書くつもりなら、あなたはおそらくにformat機能を使用してに固執する必要があることを追加する必要があります丸めたり強要するのではなく、仕事をしてください。それはおそらくより安全で「より良い」でしょう。

例として、小数点以下2桁を強制するために、あなたはこのような何かにこのフォーマット機能を変更することができます:

fmt_dcimals <- function(decimals=0){ 
    function(x) format(x,nsmall = decimals,scientific = FALSE) 
} 

、あなたはさらに何を得るためにformatnsmalldigits引数で遊ぶことができますあなたが欲しい、と思う。それの使用例:

df <- data.frame(x = 1:5,y = rexp(5)) 
ggplot(df,aes(x = x,y=y)) + 
    geom_point() + 
    scale_y_log10(labels = fmt_dcimals(2)) 

enter image description here

+0

はありがとうございます。軸の外観の一貫性のために、数字が1小数に均等に丸められても常に2小数点以下を持ちたいと思います。ラウンド関数を常に2小数点以下を返すようにする方法はありますか?つまり、round(22.50,2)は22.50ではなく22.5を返します。 – MikeTP

+0

@MikeTP遅れて申し訳ありません。私の編集はあなたの質問に答えると思う。 – joran

+0

なぜ関数内に関数がありますか? – naught101

関連する問題