2015-06-28 4 views
5

Ich bin dabei, eine glänzende App mit ggvis zu erstellen. Dafür verwende ich einen kleinen Datensatz namens "Firma". Es enthält Mitarbeiterdaten, wo jede Linie darstellt und Mitarbeiter.ggvis - Interaktive X-Achse für Balkendiagramm

Aus ggvis Perspektive versuche ich folgendes: ein Balkendiagramm erstellen, die Verteilung für die folgenden Variablen zeigt:

  • Alter
  • Rolle
  • Sex

Statt Erstellen von drei verschiedenen Balkendiagrammen mit dem folgenden Code:

#Barcharts - Role 
company %>% ggvis(~Role,opacity := 0.8, fill:= "firebrick") %>% 
    layer_bars() %>% 
    scale_ordinal('x', domain=c('Analyst','Consultant','Software Engineer','Manager','Director')) 

#Barcharts - Age 
company %>% ggvis(~Age,opacity := 0.8, fill:= "firebrick") %>% 
    layer_bars() 

#Barcharts - Sex 
company %>% ggvis(~Sex,opacity := 0.8, fill:= "firebrick") %>%  
    layer_bars() 

Ich möchte ein GGVIS-Balkendiagramm erstellen, das eine Eingabeauswahl ermöglicht.

Ich habe den folgenden Code versucht:

company %>% ggvis(input_select(c("Sex","Role","Age"), map = as.name)) %>% layer_bars() 

Der folgende Fehler zurückgegeben:

Error: Visual property x.update is not a variable 

Die verwendeten Daten wäre:

raw <- "Age Sex Role 
35 M   Director 
37 M   Director 
30 M   Manager 
28 M   Manager 
28 F   Manager 
27 M Software_Engineer 
25 M  Consultant 
26 M  Consultant 
25 F   Analyst 
25 M   Analyst 
25 M   Analyst 
25 M   Analyst 
25 M   Analyst 
25 M   Analyst 
25 F   Analyst 
25 F   Analyst 
25 F   Analyst 
24 F   Analyst 
25 M   Analyst" 


company = read.table(textConnection(raw), header=TRUE) 

Das macht mich glauben, dass ggvis lässt nicht zu, dass die Variable x ein Eingabeauswahlelement ist. Ist das richtig? Gibt es dafür eine Lösung?

Vielen Dank im Voraus. Mit freundlichen Grüßen

+0

Sie müssen ein reproduzierbares Beispiel bereitstellen. Verwenden Sie 'dput', um ein Stück Ihres Firmendatenrahmens (oder andere Beispieldaten) zur Verfügung zu stellen, damit wir es testen können. – LyzandeR

+0

Ich habe die Spalten angegeben, die ich für das Beispiel verwende. Geht das für dich? – glnvdl

+0

Ja, tut es, danke. Ich habe eine Antwort hinzugefügt. – LyzandeR

Antwort

7

Zunächst einmal müssen Sie Ihre data.frame so melt:

library(reshape2) 
company <- melt(company, measure.vars=c('Role','Age','Sex')) 

Und dann die für mich gearbeitet folgende:

#Barcharts - Age 
company %>% ggvis(~value, opacity := 0.8) %>% 
    #use filter to pick only the category you want 
    filter(variable == eval(input_select(choices=c('Role','Age','Sex')))) %>% 
    layer_bars() 

Ich kann die interaktive Version laden aber Das Diagramm sieht so aus:

enter image description here

Und Sie können wählen Sie die Kategorie, die Sie mögen

+0

Zunächst einmal, vielen Dank für diese Lösung! Ich habe zwei Fragen zu Ihrer Antwort: * Warum schmelzen Sie den Datenrahmen? * Gibt es nun eine Möglichkeit, die x-Achse zurück zu ‚Analyst‘ zu bestellen, ‚Berater‘, ‚Software Engineer‘, ‚Manager‘, ‚Direktor‘ eher als die alphabetische Reihenfolge? Vielen Dank im Voraus. – glnvdl

+0

Kein Problem :), froh, dass ich helfen könnte. Wir schmelzen den data.frame, so dass wir alle unsere Daten in einem langen Format haben, d.h.habe alle Kategorien in Reihen. Auf diese Weise können wir dann Filter verwenden und im Wesentlichen nur die Kategorie auswählen, die wir jedes Mal möchten (aus der Dropdown-Box). Leider können wir in diesem Fall 'scale_ordinal ('x', domain = c ('Analyst', 'Berater', 'Software_Engineer', 'Manager', 'Director') 'nicht verwenden, denn wenn Sie zu Geschlecht oder Alter wechseln Grafiken werden schlecht aussehen. Die einzige Lösung, die ich mir vorstellen kann, ist Shiny mit ggvis. – LyzandeR

+0

Genauer gesagt: 'filter' wird nur die Zeilen auswählen, in denen die Spaltenvariable den Wert der Dropdown-Box hat. Und wir verwenden Schmelze, um die variable Spalte im benötigten Format zu erstellen. – LyzandeR