4

今のところ、私は次のようなものを使用しています:

test_data$level <- rep("", nrow(test_data))
test_data[test_data$value <= 1, ]$level <- "1"
test_data[test_data$value > 1 & test_data$value <= 2, ]$level <- "2"
...
test_data[test_data$value > 4 & test_data$value <= 5, ]$level <- "5"

Rでこれを行うためのより良い方法があるのか​​、それとも単に分類を行うために何らかのscale引数を適用する方法があるのか​​疑問に思っggplot2ています。


これにはいくつかのアプローチがある可能性があるため、私の質問を正確に表現することは困難でした。ここに要点があります...私はそのようなデータを持っています:

 set.seed(123)
 test_data <- data.frame(var1 = rep(LETTERS[1:3], each = 5),
   var2 = rep(letters[1:5], 3),
   value = runif(30, 1, 5))
 test_data
   var1    value
1     A 2.150310
2     B 4.153221
3     C 2.635908
4     D 4.532070
5     E 4.761869
6     F 1.182226
7     G 3.112422
8     H 4.569676
9     I 3.205740
10    J 2.826459

私はもっ​​とたくさんのデータポイントを持っていて、次のようなものをプロットしています:

library(ggplot2)
p <- ggplot(test_data, aes(x = var1, y = var2, colour = value))
p <- p + geom_jitter(position = position_jitter(width = 0.1, heigh = 0.1))
p

これはそのようなものを与えます:

ここに画像の説明を入力してください

私の実際のデータは、1〜5の評価による主観的な評価からのものですが、同様の質問をまとめて平均したため、整数ではなくなりました。

因子の組み合わせごとの評価をプロットして、どの組み合わせがより高い評価をもたらしたかを視覚化します。デフォルトの連続スケールは実際には「ポップ」ではないので、これらの値(0-1、1-2、... 4-5)の「ビン」を次のように色付けするようにカラースケールを取得したいと思いますscale_colour_discrete。要因のため。

だから、私の質問:

1)ggplot2を使用して、これらを何らかの方法で「ビン化」しscale_colour_continuousて、これが連続データであっても、デフォルトの因子レベルの色付けスキームを適用できるようにすることは可能ですか?

2)そうでない場合、基準に基づいて値を数字/文字に置き換える新しいベクトルを作成する簡単な方法はありますか?私は少しR初心者なので、たくさんのif()条件文(test_data[test_data > 0 & test_data < 1, "values"] <- "a"またはそのようなもの)を除いてはわかりませんでした。

4

3 に答える 3

5

最も簡単な解決策は、

ggplot(transform(test_data, Discrete=cut(values, seq(0,5,1), include.lowest=T),...

これdata.frameで、列に基づいて要因の列が含まれるvaluesようになるためaes(..., color=Discrete,...)ggplot. test_dataプロットが完了すると、 の形式が保持されます。

もちろん、個別の列を保持するには、次の方法が最適です。

test_data$Discrete <- cut(values, seq(0,5,1), include.lowest=T)
于 2013-02-08T00:12:17.047 に答える
2

カラー バーの凡例からdiscreteスタイルの凡例に切り替えることができます。

library(RColorBrewer) # for brewer.pal
ggplot(test_data, aes(x = var1, y = var2, colour = value)) +
   geom_jitter(position = position_jitter(width = 0.1, heigh = 0.1)) + 
    scale_colour_gradientn(guide = 'legend', colours = brewer.pal(n = 5, name = 'Set1'))

ここに画像の説明を入力

于 2013-02-08T00:15:56.220 に答える
1

文字通り、現在の方法で更新を投稿したときに、これを行う別の方法を考えました...

p <- ggplot(test_data, aes(x = var1, y = var2, colour = factor(value)))
p <- p + geom_jitter(position = position_jitter(width = 0.1, height = 0.1))
p <- p + scale_colour_discrete(breaks = 1:5)
p

ばかげてシンプル。連続値を個々の因子レベルのように処理するように強制しbreaks、ggplot2を使用してカラースケールを制御するだけです。方法はよくわからないのですが、他にもいくつか答えがあると思いますので、賛成票に決めさせていただきたいと思います。

于 2013-02-08T00:19:55.353 に答える