2015-05-21 4 views
0

Я хочу, чтобы произвести barplot 10 элементов, хранящихся в кадре данных: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 заказов имена в х, вместо того чтобы держать заказ в 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)) 
Смежные вопросы