2017-05-02 9 views
1

Ich habe einen Datenrahmen namens mydata mit einer Spalte namens "Tm" mit Namen von Teams und 10 anderen mit statistischen Informationen. Einer von ihnen (PTS) hat die Punkte jedes Spielers. Ich benutze diesen Code einen neuen Datenrahmen mit den Punkten von jeder Mannschaft auf den Spielern und den Mittelwert der PunkteHorizontal Barplot aus Datenframe in R

+0

Bitte geben Sie einige Beispieldaten, die Kopie sein kann/eingefügt; z. B. die Ausgabe von 'dput (mydata)' oder eine Teilmenge von 'mydata'. – neilfws

+0

@neilfws ich bearbeite es, ist das hilfreicher? –

+0

Ja, das ist gut. Aber aus der Beschreibung der Daten klingt es so, als ob der 'tapply'-Schritt unnötig ist _i.e._ Sie könnten einfach direkt mit' mydata' arbeiten. Und es ist am besten, keine Funktionsnamen _e._ 'mean' als Variablennamen zu verwenden. – neilfws

Antwort

2

Unter der Annahme, dass Datenrahmen mydata wie folgt aussieht:

mydata <- data.frame(Tm = c("ATL", "BOS", "BRK", "CHI", "CHO", "CLE", "DAL", "DEN", 
          "DET", "GSW", "HOU", "IND", "LAC", "LAL", "MEM", "MIA", 
          "MIL", "MIN", "NOP", "NYK", "OKC", "ORL", "PHI", "PHO", 
          "POR", "SAC", "SAS", "TOR", "UTA", "WAS"), 
        PTS = c(8433, 8669, 7503, 8335, 8479, 8554, 8388, 8355, 8361, 9421, 
          8737, 7860, 8569, 7982, 8126, 8204, 8122, 8398, 8423, 8065, 
          9038, 8369, 7142, 8271, 8622, 8740, 7936, 8394, 8010, 8534), 
        stringsAsFactors = FALSE) 

Ich würde ggplot für das Balkendiagramm verwenden. Und ich würde keine zusätzliche Spalte für den Mittelwert erzeugen; Verwenden Sie einfach die Linie, um ihren Wert anzugeben.

ggplot(mydata, aes(reorder(Tm, PTS), PTS)) + 
    geom_col(fill = "grey70") + coord_flip() + 
    labs(x = "Team", y = "PTS") + 
    geom_hline(aes(yintercept = mean(PTS)), color = "red") 

Eine weitere Option: füllen die Bars je nachdem, ob ihr Wert fällt Mittelwert oben oder unten.

ggplot(mydata, aes(reorder(Tm, PTS), PTS)) + 
    geom_col(aes(fill = PTS > mean(PTS))) + coord_flip() + 
    labs(x = "Team", y = "PTS") + 
    geom_hline(aes(yintercept = mean(PTS)), color = "red") + 
    guides(fill = FALSE) 

Ergebnis: enter image description here

+0

die erste Arbeit ziemlich gut, nur zu Problemen, zuerst muss ich Eintrag in der Leiste die Spalte der Mittelwert so , wenn du den ersten Code editieren kannst, wäre ich begeistert und wenn ich ihn starte, geht die rote Linie des Mittelwerts in das Betteln und nicht in das Ende, wie es klingt, weißt du warum? –

+0

Am besten keine Fragen in Antworten zu stellen :) jemand wird das wahrscheinlich entfernen. Aber ich sehe in diesem Bild, dass die Balken nicht geordnet sind, so dass Sie den von mir bereitgestellten Code nicht verwenden konnten. – neilfws

+0

ich repariere es, vielen Dank, es hat perfekt funktioniert, ich lösche es bereits. !!!!!! –

0

Hier eine Möglichkeit, auf Basis zu schaffen, um diese Art von Handlung zu machen, den diamonds Beispiel-Datensatz in R mit:

library(dplyr) 
library(ggplot2) 

bind_rows(diamonds %>% 
       group_by(color) %>% 
       summarise(price = mean(price)) %>% 
       mutate(average = FALSE), 
      data_frame(color = "mean", 
        price = mean(diamonds$price), 
        average = TRUE)) %>% 
    arrange(desc(price)) %>% 
    mutate(color = reorder(color, price)) %>% 
    ggplot(aes(color, price, fill = average)) + 
    geom_col(show.legend = FALSE) + 
    coord_flip() + 
    scale_fill_manual(values = c("gray80", "red")) + 
    theme_minimal() 

+0

danke dafür, ich werde versuchen, es zu verwenden, aber ich bin auf der Suche nach etwas einfacher, nicht so kompliziert –