Evite ggplot classificar o eixo x ao plotar geom_bar ()

Eu tenho os seguintes dados que eu quero traçar com 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 

O que eu quero fazer é fazer um gráfico de barras e manter a ordem da barra, (isto é, começando com SC_LTSL_BM ...B_GC_Sp ). Mas o comportamento padrão do ggplot geom_bar é classificá-los. Como posso evitar isso?

  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() 

A figura atual é assim: insira a descrição da imagem aqui

Você precisa dizer ao ggplot que você já tem um fator ordenado, então ele não faz o pedido automaticamente para você.

 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") 

insira a descrição da imagem aqui

Aqui está uma abordagem que não modifica os dados originais, mas usa scale_x_discrete. De? Scale_x_discrete “Use limites para ajustar quais níveis (e em qual ordem) são exibidos” Por exemplo:

 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) 

insira a descrição da imagem aqui

Você também pode apenas reordenar o fator correspondente conforme descrito aqui

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