Reprezentați datele în ordine descrescătoare așa cum apar în cadrul de date [duplicat] (Programare, R, Ggplot2)

Ben G Small a intrebat.

M-am luptat pentru a ordona și a trasa un simplu cadru de date ca un grafic de bare în ggplot2.

Vreau să reprezint datele așa cum apar, astfel încât valorile (variabila „count”) pentru categoriile corespunzătoare (de exemplu, „humans”, „male”) să fie reprezentate de la mare la mic.

Am urmărit alte discuții pe acest site care pun întrebări similare, dar nu reușesc să fac să funcționeze acest lucru!

## Dataset (mesh2)

#Category                   Count

#Humans             62

#Male               40

#Female             38

#Adult              37

#Middle Aged            30

#Liver/anatomy & histology          29

#Organ Size                 29

#Adolescent                 28

#Child              21

#Liver/radiography*             20

#Liver Transplantation*     20

#Tomography, X-Ray Computed         20

#Body Weight            18

#Child, Preschool               18

#Living Donors*         18

#Infant             16

#Aged               14

#Body Surface Area              14

#Regression Analysis        11

#Hepatectomy            10

## read in data (mesh2) as object (mesh2)

mesh2 <- read.csv("mesh2.csv", header = T)

## order data by count of mesh variable

mesh2$cat2 <- order(mesh2$Category, mesh2$Count, decreasing=TRUE)

## Barplot created in ggplot2

library(ggplot2)

mesh2p <- ggplot(mesh2, aes(x=cat2, y=Count)) + geom_bar (stat="identity") +     scale_x_continuous(breaks=c(1:20), labels=c("Humans", "Male", "Female", "Adult", "MAged",   "Liver anat & hist", "Organ Size", "Adolescent",   "Child", "Liver radiog", "Liver Transplnt", "Tomog X-Ray Computed", "Body Weight", "Child Preschool", "Living Donors", "Infant", "Aged", "BSA", "Regression Analysis", "Hepatectomy"))+ theme (axis.text.x=element_text(angle=45, hjust=1))

Comentarii

  • Realizați Category un factor ordonat. Consultați ?factor pentru a învăța cum se face acest lucru. –  > Por Roland.
  • @Roland Nu, asta este nu cum se face acest lucru în general. Care este ordinea implicită în setul c("human","male","female","cat")? Un factor ordonat este pentru datele în care nivelurile în sine transmit anumite informații cantitative, de exemplu, setul c("wet","moist","dry"). Motivul pentru care vă înșelați în această privință este că stocarea acestor date ca factor ordonat va face un lucru greșit dacă este utilizat într-un model în R (constrângeri polinomiale) pentru date neordonate. Ceea ce se dorește este reorder() funcție. –  > Por Gavin Simpson.
  • s/your/you’re/you’re/ fingers… –  > Por Gavin Simpson.
1 răspunsuri
Gavin Simpson

Vrei reorder(). Iată un exemplu cu date fictive

set.seed(42)
df <- data.frame(Category = sample(LETTERS), Count = rpois(26, 6))

require("ggplot2")

p1 <- ggplot(df, aes(x = Category, y = Count)) +
         geom_bar(stat = "identity")

p2 <- ggplot(df, aes(x = reorder(Category, -Count), y = Count)) +
         geom_bar(stat = "identity")

require("gridExtra")
grid.arrange(arrangeGrob(p1, p2))

Dând:

Utilizați reorder(Category, Count) pentru a avea Category ordonat de la mic la mare.

Comentarii

  • Bună, Gavin. Mulțumesc v.mult pentru acest lucru. Tocmai m-am logat, după ce am petrecut ultima oră încercând să găsesc o soluție și am ajuns și eu la soluția pe care o prezinți! Cu toate acestea, explicația ta despre faptul că nivelurile transmit sau nu informații cantitative și despre utilizarea adecvată a funcției factor sau a funcției de reordonare este foarte utilă. Vă mulțumesc din nou. –  > Por Ben G Small.
  • Nu-mi dau seama de ce nu funcționează dacă aveți mai multe umpleri, pe categorii în acest caz. –  > Por JHo.
  • Cred că codul dvs. nu va funcționa cu valori negative, vă rugăm să vedeți dpaste.com/0Y5T182 În acest caz, graficul dvs. nu va fi în ordine descrescătoare după trasare. Codul și aici dat.m <- structure(list(Date = c("1.5.2017", "1.3.2017", "1.5.2017", "1.3.2017"), variable = structure(c(1L, 1L, 2L, 2L), .Label = c("Total", "Area"), class = "factor"), value = c(110, -90, 700, 880)), row.names = c(NA, -4L), .Names = c("Date", "variable", "value"), class = "data.frame"); library(ggplot2); ggplot(dat.m, aes(x = reorder(Date, -value), y = value, fill=variable)) + geom_bar(stat='identity'). –  > Por Léo Léopold Hertz 준영.
  • @LéoLéopoldHertz준영 Acest lucru nu este corect; verificați singur folosind codul din exemplul meu care înlocuiește df cu df <- data.frame(Category = sample(LETTERS), Count = rnorm(26)). Exemplul dvs. eșuează deoarece value nu poate ordona nivelele în mod unic, în exemplu există două valori de value pentru fiecare nivel de Date. –  > Por Gavin Simpson.
  • @Mel ah ok; vrei să ordonezi factorul x. în cadrul nivelurile factorului de fațetă, dar acest lucru nu este ceva ce permit factorii. Reamintim că se ordonează nivelurile întregii variabile factoriale. Acest lucru ar putea justifica o întrebare proprie pe Stack Overflow –  > Por Gavin Simpson.

Tags:,