2016-12-04 18 views
0

Ich versuche, ein Streudiagramm mit ggplot zu erstellen, mehrere Felder verwenden. Ich habe über diese Streudiagramme gelesen und für ein Feld gefärbt, aber ich habe mich gefragt, wie ich das für den Datensatz ggplot2movies machen würde. Ich wollte auf das Genre auf Farbe basiert, aber diese Genres sind alle aufgespalten:R ggplot Streudiagramm Farbe mehrere Spalten

> 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 

Was ist der beste Weg, um dies (Farbe auf Genre-basiert) zu nähern? Alle Hilfe wird wirklich geschätzt!

+2

Ich denke, Sie gehen die Daten (breit Langformat) zu haben, um aufzuräumen. Vielleicht mit 'tidyr :: gather()'. – hrbrmstr

Antwort

2

Wie @hrbrmstr angibt, müssen Sie die Daten von breit zu lang umwandeln. Sie können dazu tidyr::gather() in Verbindung mit dplyr::filter() verwenden. Diese Kette:

  1. sammelt die Namen und Werte von Aktion zu kurz in die Spalten genre und flag. Dadurch werden die vielen Spalten (breit) in ein Schlüssel/Wert-Paar (lang) verschoben.
  2. Verwendet Filter, um die überflüssigen Werte für genre zu entfernen (diejenigen, bei denen das Flag == 0 ist).
  3. Speichert die resultierende Datenrahmen in plot_data

Der verbleibende Code ist ein einfacher ggplot2 Streudiagramm von length vs rating.

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

Sehr hilfreich, und genau das, was ich gesucht habe! Vielen Dank – dnsko

Verwandte Themen