2016-12-04 18 views
0

複数のフィールドを使用してggplotの散布図を作成しようとしています。私はこれらの散布図とフィールドの色付けについて読んだことがありますが、ggplot2moviesデータセットでこれをどうやって行うのだろうと思いましたか?私はジャンルに基づいて色を望んでいたが、これらのジャンルは、すべての分割されていますR ggplot散布図の色複数の列

> movies <- ggplot2movies::movies 
> head(movies) 
      title year length budget rating votes r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 mpaa Action Animation Comedy Drama Documentary Romance Short 
        <chr> <int> <dbl> <int> <dbl> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <int>  <int> <int> <int>  <int> <int> <int> 
1      $ 1971 121  NA 6.4 348 4.5 4.5 4.5 4.5 14.5 24.5 24.5 14.5 4.5 4.5   0   0  1  1   0  0  0 
2  $1000 a Touchdown 1939  71  NA 6.0 20 0.0 14.5 4.5 24.5 14.5 14.5 14.5 4.5 4.5 14.5   0   0  1  0   0  0  0 
3 $21 a Day Once a Month 1941  7  NA 8.2  5 0.0 0.0 0.0 0.0 0.0 24.5 0.0 44.5 24.5 24.5   0   1  0  0   0  0  1 
4     $40,000 1996  70  NA 8.2  6 14.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 34.5 45.5   0   0  1  0   0  0  0 
5 $50,000 Climax Show, The 1975  71  NA 3.4 17 24.5 4.5 0.0 14.5 14.5 4.5 0.0 0.0 0.0 24.5   0   0  0  0   0  0  0 
6     $pent 2000  91  NA 4.3 45 4.5 4.5 4.5 14.5 14.5 14.5 4.5 4.5 14.5 14.5   0   0  0  1   0  0  0 

(ジャンルに基づいて色を)これにアプローチする最良の方法は何ですか?すべてのヘルプは本当に感謝しています!

+2

私はあなたが(長い形式に広い)のデータを整理する必要があるとしていると思います。おそらく 'tidyr :: gather()'と一緒に。 – hrbrmstr

答えて

2

@hrbrmstrでは、データをワイドからロングに変換する必要があります。これを実現するには、dplyr::filter()と組み合わせてtidyr::gather()を使用できます。このチェーン:

  1. は、列genreflagにショートへのアクションから名前と値を収集します。これにより、多くの列(幅)をキーと値のペア(long)に移動します。
  2. フィルタを使用して、genre(フラグ== 0の場合)の余分な値を削除します。
  3. 格納plot_data

残りのコードで得られたデータフレームは、ratinglengthの単純ggplot2散布図です。

library(dplyr) 
library(tidyr) 
library(ggplot2) 
library(ggplot2movies) 

plot_data <- movies %>% 
    gather(genre, flag, Action:Short) %>% 
    filter(flag != 0) 

ggplot(plot_data, aes(x = rating, y = length)) + 
    geom_point(aes(color = genre), alpha = 0.4) 

enter image description here

+0

非常に役に立ちました、ちょうど私が探していたもの!ありがとう – dnsko