2015-05-21 60 views
0

我想产生的存储在数据帧10项barplot:[R barplot具有非常长的名字

df <- structure(list(v = structure(c(0.133177575198731, 0.048416489312887, 
0.0323328322269662, 0.0257842168974815, 0.0207946396185765, 0.0157952295839215, 
0.015414483430714, 0.0138292246981344, 0.0136598827935515, 0.8536143025 
), .Dim = 10L, .Dimnames = structure(list(c("HIPERTENSION ESENCIAL (PRIMARIA)", 
"RINOFARINGITIS AGUDA", "DIARREA Y GASTROENTERITIS DE PRESUNTO ORIGEN INFECCIOSO", 
"LUMBAGO NO ESPECIFICADO", "INFECCION DE VIAS URINARIAS, SITIO NO ESPECIFICADO", 
"AMIGDALITIS AGUDA, NO ESPECIFICADA", "FIEBRE, NO ESPECIFICADA", 
"CEFALEA", "DOLOR EN ARTICULACION", "HIPOTIROIDISMO, NO ESPECIFICADO" 
)), .Names = "")), names = c("HIPERTENSION ESENCIAL (PRIMARIA)", 
"RINOFARINGITIS AGUDA", "DIARREA Y GASTROENTERITIS DE PRESUNTO ORIGEN INFECCIOSO", 
"LUMBAGO NO ESPECIFICADO", "INFECCION DE VIAS URINARIAS, SITIO NO ESPECIFICADO", 
"AMIGDALITIS AGUDA, NO ESPECIFICADA", "FIEBRE, NO ESPECIFICADA", 
"CEFALEA", "DOLOR EN ARTICULACION", "HIPOTIROIDISMO, NO ESPECIFICADO" 
)), .Names = c("v", "names"), row.names = c("HIPERTENSION ESENCIAL (PRIMARIA)", 
"RINOFARINGITIS AGUDA", "DIARREA Y GASTROENTERITIS DE PRESUNTO ORIGEN INFECCIOSO", 
"LUMBAGO NO ESPECIFICADO", "INFECCION DE VIAS URINARIAS, SITIO NO ESPECIFICADO", 
"AMIGDALITIS AGUDA, NO ESPECIFICADA", "FIEBRE, NO ESPECIFICADA", 
"CEFALEA", "DOLOR EN ARTICULACION", "HIPOTIROIDISMO, NO ESPECIFICADO" 
), class = "data.frame") 

我用标准barplot去了,它工作得很好,除了名称太长,因而不适合任何合理的框架。

barplot(df$v,names = rownames(df),las=3,cex.names=0.5) 

足够接近,但还是名字都这么久他们不适合(如果我尝试cex.names低于0.5就变得不可读)。 我也试图与ggplot

library(ggplot2) 

ggplot(df,aes(x=names,y=v))+ 
    geom_bar(stat="identity") 

ggplot(df,aes(x=names,y=v))+ 
    geom_bar(stat="identity")+ 
    theme(text = element_text(size=12), 
     axis.text.x = element_text(angle=90, vjust=2)) 

这给出了一个非常近似的结果,但我一直没能找到如何保持递减的顺序(ggplot订单的名字在X,而不是维持秩序在df)。

我会明白,如果你能为我提供双面回答:

  • 如何把标签标准barplot和酒吧
  • 如何保持df秩序项目ggplot

在此先感谢! -

回答

1

片面的答案,

at <- barplot(df$v,names="",axes=2) 
text(at,rep(0.001,length(df$v)),rownames(df),srt=90,cex = 0.5,adj = c(0,0)) 

然而,一些酒吧对小含的名字。

1

ggplot并不真正对事物进行重新排序,它将其强制为一个因子,并且factor(默认情况下)按字母顺序排列事物。解决方法是创建一个指定级别顺序的因子:

df$id = factor(row.names(df), levels = row.names(df)) 

ggplot(df, aes(x = id, y = v)) + geom_bar(stat = "identity") + 
    theme(text = element_text(size=12), 
      axis.text.x = element_text(angle=90, vjust=0.5, hjust = 1))