web-dev-qa-db-fra.com

Eviter que ggplot trie l’axe des x tout en traçant geom_bar ()

J'ai les données suivantes que je veux tracer avec ggplot:

SC_LTSL_BM    16.8275
SC_STSL_BM    17.3914
proB_FrBC_FL   122.1580
preB_FrD_FL    18.5051
B_Fo_Sp    14.4693
B_GC_Sp    15.4986

Ce que je veux faire est de faire un diagramme en barres et de maintenir l’ordre des barres (c’est-à-dire en commençant par SC_LTSL_BM ...B_GC_Sp). Mais le comportement par défaut de ggplot geom_bar est de les trier. Comment puis-je éviter cela?

  library(ggplot2)
  dat <- read.table("http://dpaste.com/1469904/plain/")
  pdf("~/Desktop/test.pdf")
  ggplot(dat,aes(x=V1,y=V2))+geom_bar()
  dev.off()

Le chiffre actuel ressemble à ceci: enter image description here

55
neversaint

Vous devez dire à ggplot que vous avez déjà un facteur ordonné afin qu'il ne le commande pas automatiquement pour vous.

dat <- read.table(text=
"SC_LTSL_BM    16.8275
SC_STSL_BM    17.3914
proB_FrBC_FL   122.1580
preB_FrD_FL    18.5051
B_Fo_Sp    14.4693
B_GC_Sp    15.4986", header = FALSE, stringsAsFactors = FALSE)

# make V1 an ordered factor
dat$V1 <- factor(dat$V1, levels = dat$V1)

# plot
library(ggplot2)
ggplot(dat,aes(x=V1,y=V2))+geom_bar(stat="identity")

enter image description here

71
Ben

Voici une approche qui ne modifie pas les données d'origine, mais utilise scale_x_discrete. De? Scale_x_discrete "Utilisez des limites pour ajuster les niveaux (et dans quel ordre) affichés" Par exemple:

dat <- read.table(text=
                "SC_LTSL_BM    16.8275
              SC_STSL_BM    17.3914
              proB_FrBC_FL   122.1580
              preB_FrD_FL    18.5051
              B_Fo_Sp    14.4693
              B_GC_Sp    15.4986", header = FALSE, stringsAsFactors = FALSE)
# plot
library(ggplot2)
ggplot(dat,aes(x=V1,y=V2))+
  geom_bar(stat="identity")+
  scale_x_discrete(limits=dat$V1)

enter image description here

20
Alex Thomas

Vous pouvez également réorganiser le facteur correspondant comme décrit ici

x$name <- factor(x$name, levels = x$name[order(x$val)])
6
Romeo Kienzler

dplyr vous permet de créer facilement une colonne row que vous pouvez réorganiser par ggplot.

library(dplyr)
dat <- read.table("...") %>% mutate(row = row_number())
ggplot(df,aes(x=reorder(V1,row),y=V2))+geom_bar()
2
Thomas Luechtefeld