2013-08-10 12 views
38

Ich habe eine Umfrage-Datei, in der Reihe sind Beobachtung und Spalte Frage.gruppierte Bar Grundstück in ggplot

Hier sind einige fake data sie wie folgt aussehen:

People,Food,Music,People 
P1,Very Bad,Bad,Good 
P2,Good,Good,Very Bad 
P3,Good,Bad,Good 
P4,Good,Very Bad,Very Good 
P5,Bad,Good,Very Good 
P6,Bad,Good,Very Good 

Mein Ziel ist es, diese Art von Handlung mit ggplot2 zu erstellen.

  • ich absolut nicht die Farben, Designs egal, usw.
  • Die Handlung entspricht nicht die gefälschten Daten

enter image description here

Hier sind meine Fälschung Daten:

raw <- read.csv("http://pastebin.com/raw.php?i=L8cEKcxS",sep=",") 
raw[,2]<-factor(raw[,2],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE) 
raw[,3]<-factor(raw[,3],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE) 
raw[,4]<-factor(raw[,4],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE) 

Aber wenn ich c wähle Y als Zählung, dann habe ich ein Problem bezüglich der Auswahl der X- und der Gruppenwerte ... Ich weiß nicht, ob ich Erfolg haben kann, ohne reshape2 zu verwenden ... Ich bin auch müde, Umformungen mit der Schmelzfunktion zu verwenden. Aber ich verstehe nicht, wie man es benutzt ...

Antwort

65

Zuerst müssen Sie die Zählungen für jede Kategorie, d. H. Wie viele Bads und Waren und so weiter gibt es für jede Gruppe (Essen, Musik, Menschen). Dies würde wie so geschehen:

raw <- read.csv("http://pastebin.com/raw.php?i=L8cEKcxS",sep=",") 
raw[,2]<-factor(raw[,2],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE) 
raw[,3]<-factor(raw[,3],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE) 
raw[,4]<-factor(raw[,4],levels=c("Very Bad","Bad","Good","Very Good"),ordered=FALSE) 

raw=raw[,c(2,3,4)] # getting rid of the "people" variable as I see no use for it 

freq=table(col(raw), as.matrix(raw)) # get the counts of each factor level 

Dann müssen Sie daraus einen Datenrahmen erstellen, es schmelzen und plotten es:

Names=c("Food","Music","People")  # create list of names 
data=data.frame(cbind(freq),Names) # combine them into a data frame 
data=data[,c(5,3,1,2,4)]    # sort columns 

# melt the data frame for plotting 
data.m <- melt(data, id.vars='Names') 

# plot everything 
ggplot(data.m, aes(Names, value)) + 
    geom_bar(aes(fill = variable), position = "dodge", stat="identity") 

Ist das, was Sie nach?

> head(df) 
    ID Type Annee X1PCE X2PCE X3PCE X4PCE X5PCE X6PCE 
1 1 A 1980 450 338 154 36 13  9 
2 2 A 2000 288 407 212 54 16 23 
3 3 A 2020 196 434 246 68 19 36 
4 4 B 1980 111 326 441 90 21 11 
5 5 B 2000 63 298 443 133 42 21 
6 6 B 2020 36 257 462 162 55 30 

Da Sie 4-9 numerische Werte in Spalten, die später aufgetragen werden würde:

enter image description here

Um ein wenig, in ggplot multiple grouping bar Sie einen Datenrahmen hatte, dass diese aussah zu klären auf der Y-Achse kann dies einfach mit reshape transformiert und geplottet werden.

Für unsere aktuellen Datensatz, brauchten wir etwas ähnliches, und so nahmen wir freq=table(col(raw), as.matrix(raw)) dies zu erhalten:

> data 
    Names Very.Bad Bad Good Very.Good 
1 Food  7 6 5   2 
2 Music  5 5 7   3 
3 People  6 3 7   4 

Stellen Sie sich vor Sie haben Very.Bad, Bad, Good und so weiter statt X1PCE, X2PCE, X3PCE. Siehst du die Ähnlichkeit? Aber wir mussten solche Struktur zuerst erstellen. Daher die freq=table(col(raw), as.matrix(raw)).

+0

Hallo danke, ist genau was ich will. Vielen Dank. Ich habe nur eine Frage, ist es auch möglich zu vermeiden ' 'rohe = rohe [, c (2,3,4)] Freq = Tabelle (col (roh), as.matrix (roh))' und alles tun mit Umformen? Weil ich das gleiche Problem hatte http://stackoverflow.com/questions/17303573/ggplot-multiple-grouping-bar und in diesem Beitrag habe ich nur Umformungen verwendet. Ich bin verwirrt darüber ... – S12000

+0

Nun, ich bin mir nicht sicher.Das 'rohe = rohe [, c (2,3,4)]' ist nur deshalb vorhanden, weil es keinen Sinn hat, den Beobachtungsindikator einzubeziehen (da Sie in der nachfolgenden Darstellung keine einzelnen Beobachtungen plotten). Daher zählt nur die Anzahl. Ob du alles mit "Umformen" machen kannst, weiß ich nicht. Meine Vermutung ist, dass Sie nicht können. – jakub

+0

Nun, eigentlich sind die Daten in diesem aktuellen Beitrag anders, da sie nicht die numerischen Zählungen enthalten. Sehen Sie sich die Spalten 4-9 im Datenrahmen von dem Post an, mit dem Sie verlinken: Sie enthalten numerische Werte, die anschließend von Didzis geschmolzen wurden, um die Variable 'Wert' im geschmolzenen Datenrahmen zu erzeugen. Wir hatten keine Werte, also mussten wir sie zuerst erstellen. Daher 'freq = Tabelle (col (roh), as.matrix (roh)). (Ich fügte am Ende meiner Antwort ausführlichere Erklärungen hinzu). – jakub

Verwandte Themen