2017-11-23 19 views
0

Ich habe einen sortierten Rahmen, aber wenn ich ggplot zum Plotten verwende, erscheinen die Wörter nicht in der richtigen Reihenfolge, wie sie im Datenrahmen sind. Der Code ist der folgende:Ich habe einen sortierten Datenrahmen, aber wenn ich es plotte, ist die Reihenfolge weg. [in R]

library(ggplot2) 

df<-data.frame(word=c("play","win","offer","http","right","internet"),frequency=c(321,355,123,899,564,433),type=c("nonspam","nonspam","spam","spam","spam","spam")) 
df=df[order(df$type, df$frequency, decreasing = TRUE),] 

ggplot(df, aes(x=frequency, y=word)) + 
    geom_segment(aes(yend=word), xend=0, color='grey50') + 
    geom_point(size=3, aes(color=type)) + 
    scale_color_brewer(palette='Set1', limits=c('Spam', 'non-Spam'), guide=F) + 
    theme_bw() + 
    theme(panel.grid.major.y = element_blank()) + 
    facet_grid(type ~ ., scales='free_y', space='free_y') 
+0

ich es geändert, aber wieder das gleiche Problem .. – toumperlekis

+0

Siehe hier: https://stackoverflow.com/questions/3744178/ggplot2-sorting-a-plot?answertab=active#tab-top – markus

Antwort

0

Wie bereits erwähnt, müssen Sie Faktoren:

df <- data.frame(word=c("play","win","offer","http","right","internet"), 
       frequency=c(321,355,123,899,564,433), 
       type=c("nonspam","nonspam","spam","spam","spam","spam")) 

your_order <- order(df$frequency) 
df$word <- factor(df$word, levels = df$word[your_order]) 

ggplot(df, aes(x=frequency, y=word)) + 
    geom_segment(aes(yend=word), xend=0, color='grey50') + 
    geom_point(size=3, aes(color=type)) + 
    scale_color_brewer(palette='Set1', limits=c('Spam', 'non-Spam'), guide=F) + 
    theme_bw() + 
    theme(panel.grid.major.y = element_blank()) + 
    facet_grid(type ~ ., scales='free_y', space='free_y') 

Mit diesen Befehlen Ihr Grundstück sollte wie erwartet angezeigt.

enter image description here

0

Sie müssen die Ebenen der Variablen bestellen. Es spielt keine Rolle in der Reihenfolge in Ihrem Datenframe, wenn Sie etwas mit ggplot plotten (es verwendet die Ebenenreihenfolge). Welche Reihenfolge willst du? Namentlich? Oder nach Häufigkeit?

+0

nach Häufigkeit, aber für jeden Typ. Die erste Zeile lautet nämlich 899 und die letzte 123 für die Spam-Nachrichten. Und dann 355 und 321 für die Nicht-Spam-Nachrichten. Aber ich habe versucht, neu zu ordnen und es hat versagt, kannst du mir bitte sagen, wie es geht? – toumperlekis

Verwandte Themen