18

Setting breakpoints for data with scale_fill_brewer() function in ggplot2のように、連続変数に適用cutして ggplot2 の Brewer カラー スケールで表示する必要があります。連続変数は相対的な差であり、データを「0.182」ではなく「18.2 %」として書式設定したいと考えています。これを達成する簡単な方法はありますか?

x <- runif(100)
levels(cut(x, breaks=10))

[1] "(0.0223,0.12]" "(0.12,0.218]"  "(0.218,0.315]" "(0.315,0.413]"
[5] "(0.413,0.511]" "(0.511,0.608]" "(0.608,0.706]" "(0.706,0.804]"
[9] "(0.804,0.901]" "(0.901,0.999]"

たとえば、最初のレベルを として表示したいと思います(2.23 %, 12 %]。より良い代替手段はありcutますか?

4

6 に答える 6

10

gsub元のデータに 100 を掛けた後、いくつかの正規表現で使用します。

gsub("([0-9.]+)","\\1%",levels(cut(x*100,breaks=10)))
 [1] "(0.449%,10.4%]" "(10.4%,20.3%]"  "(20.3%,30.2%]"  "(30.2%,40.2%]"  "(40.2%,50.1%]"  "(50.1%,60%]"    "(60%,69.9%]"    "(69.9%,79.9%]"  "(79.9%,89.8%]"  "(89.8%,99.7%]"
于 2013-01-22T10:43:52.457 に答える
6

のコードをコピーして、cut.defaultレベルを変更した独自のバージョンを作成してみませんか?この要点を参照してください。

2行が変更されました:

22行目:ch.br <- formatC(breaks, digits = dig, width = 1)に変更されましたch.br <- formatC(breaks*100, digits = dig, width = 1)

29行目:else "[", ch.br[-nb], ",", ch.br[-1L], if (right)に変更else "[", ch.br[-nb], "%, ", ch.br[-1L], "%", if (right)

残りは同じです。そして、ここでそれが実行されています:

library(devtools)
source_gist(4593967)

set.seed(1)
x <- runif(100)
levels(cut2(x, breaks=10))
#  [1] "(1.24%, 11%]"   "(11%, 20.9%]"   "(20.9%, 30.7%]" "(30.7%, 40.5%]" "(40.5%, 50.3%]"
#  [6] "(50.3%, 60.1%]" "(60.1%, 69.9%]" "(69.9%, 79.7%]" "(79.7%, 89.5%]" "(89.5%, 99.3%]"
于 2013-01-22T11:44:35.123 に答える
3

古い質問に対する新しい回答。

引数を使用してlabel、ラベルをフォーマットする関数を渡すことができます。私は使用gsubfnしますscales::percent

library(gsubfn)
library(scales)
pcut <- function(x) gsubfn('\\d\\.\\d+', function(x) percent(as.numeric(x)),xx)
d <- data.frame(x=runif(100))

ggplot(d,aes(x=x,y=seq_along(x))) + 
 geom_point(aes(colour = cut(x, breaks = 10))) + 
 scale_colour_brewer(name = 'x', palette = 'Spectral', label = pcut)

ここに画像の説明を入力

于 2013-07-03T02:07:06.093 に答える