How to properly position the labels in the barplot?

9

I can not correctly position the names in an R barplot because they are too long. My data looks like this:

Thenamesendupappearingthisway:

fator_tecnologico_labels <- c(
  "Facilidade de testar\n e de ser avaliado\n por usuários\n de um modo geral",
  "Utilização de\n desenvolvimento\n e de qualidade\n bem definidos\n por parte\n do fabricante",
  "Compatibilidade\n com a\n infraestrutura\n existente,\n com os\n requisitos/\nnecessidades/\ndemandas,\n e/ou com a\n tecnologia\n em vigor",
  "Facilidade de\n entender,\n utilizar\n e/ou adaptar",
  "Vantagem(ns)\n em relação a\n custos com\n hardware,\n requisitos mínimos\n menos exigentes,\n custos com\n licença ou suporte,\n etc",
  "Maior\n eficiência\n em relação\n à solução,\n livre ou não,\n utilizada\n atualmente",
  "Maior\n confiabilidade\n em relação\n à solução,\n livre ou não,\n utilizada\n atualmente"  
)

How can I make names that are overwriting the bars appear correctly?

    
asked by anonymous 14.01.2014 / 19:09

2 answers

5

A solution with ggplot2 :

dados <- read.table(text='8 5 4 6 4 4 2
41 58 15 19 19 33 30
60 59 67 54 49 59 56
43 30 66 73 80 56 64', header=F, sep=' ')

fator_tecnologico_labels <- c(
  "Facilidade de testar e de ser avaliado\n por usuários de um modo geral",
  "Utilização de desenvolvimento e de qualidade\n bem definidos por parte do fabricante",
  "Compatibilidade com a infraestrutura existente,\n com os requisitos/necessidades/demandas, e/ou com a tecnologia\n em vigor",
  "Facilidade de entender, utilizar\n e/ou adaptar",
  "Vantagem(ns) em relação a custos com hardware,\n requisitos mínimos menos exigentes, custos com licença ou suporte, etc",
  "Maior eficiência em relação à solução,\n livre ou não, utilizada atualmente",
  "Maior confiabilidade em relação\n à solução, livre ou não, utilizada\n atualmente"  
)

# Até aqui tu tem.

dados <- cbind(dados, Label=c('Nenhuma influência', 'Pouca influência', 'Influência considerável', 'Muita influência')) 

dados <- reshape(dados, varying = list(c('V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7')), direction='long', idvar='Label', times=fator_tecnologico_labels) # Para usar o ggplot2 os dados precisam estar nesse formato.

require(ggplot2)

grafico <- ggplot(aes(x=time, y=V1, fill=Label), data=dados) + # Informa os dados
geom_bar(stat='identity', position='dodge') + # Informa que tu quer um gráfico de barras
coord_flip() + # Inverte os eixos X e Y
xlab('Frequencia') + # Coloca titulo no eixo X
ylab('Fatores') +  # Coloca titulo do eixo Y
ggtitle("Na sua opinião, em que grau estes fatores influenciam\n a adoção de software livre do ponto de vista tecnológico?") + # Coloca titulo no grafico
scale_fill_hue('Legenda') # Coloca titulo na legenda

grafico

EDIT:

Usingstrwrap()tobreakthetext.

dados<-read.table(text='8546442415815191933306059675449595643306673805664',header=F,sep='')fator_tecnologico_labels<-c("Facilidade de testar e de ser avaliado por usuários de um modo geral",
  "Utilização de desenvolvimento e de qualidade bem definidos por parte do fabricante",
  "Compatibilidade com a infraestrutura existente, com os requisitos/necessidades/demandas, e/ou com a tecnologia em vigor",
  "Facilidade de entender, utilizar e/ou adaptar",
  "Vantagem(ns) em relação a custos com hardware, requisitos mínimos menos exigentes, custos com licença ou suporte, etc",
  "Maior eficiência em relação à solução, livre ou não, utilizada atualmente",
  "Maior confiabilidade em relação à solução, livre ou não, utilizada atualmente"  
)

# Quebrando o texto automaticamente (Só tirei os \n do vetor de cima e acrescentei as 3 linhas abaixo)
tamanho <- 40 # O limite de caracteres (ele vai quebrar no espaço anterior a palavra que ultrapassa o limite)
(fator_tecnologico_labels <- strwrap(fator_tecnologico_labels, tamanho, simplify=F)) # Cria uma lista onde cada elemento é um vetor com até 40 caracteres. 
(fator_tecnologico_labels <- mapply(paste, fator_tecnologico_labels, collapse='\n')) # Monta o vetor com as labels.


# Até aqui tu tem.

dados <- cbind(dados, Label=c('Nenhuma influência', 'Pouca influência', 'Influência considerável', 'Muita influência')) 
dados <- reshape(dados, varying = list(c('V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7')), direction='long', idvar='Label', times=fator_tecnologico_labels) # Para usar o ggplot2 os dados precisam estar nesse formato.



require(ggplot2)

grafico <- ggplot(aes(x=time, y=V1, fill=Label), data=dados) + # Informa os dados
geom_bar(stat='identity', position='dodge') + # Informa que tu quer um gráfico de barras
coord_flip() + # Inverte os eixos X e Y
xlab('Frequencia') + # Coloca titulo no eixo X
ylab('Fatores') +  # Coloca titulo do eixo Y
ggtitle("Na sua opinião, em que grau estes fatores influenciam a adoção de software livre do ponto de vista tecnológico?") + # Coloca titulo no grafico
scale_fill_hue('Legenda') # Coloca titulo na legenda
grafico
    
09.02.2014 / 22:58
10

First I inverted the orientation of the chart by placing the bars horizontally:

fator_tecnologico_graph <- barplot(
  fator_tecnologico,
  beside = TRUE, 
  horiz=TRUE, 
  las=1,  
  xlim=c(0,110),
  cex.axis = 0.7,  
  cex.names = 0.6,  
  legend.text = rownames(fator_tecnologico),
  args.legend = list("bottom", bty="n", cex = 0.7),
  col=rainbow(4),
  xpd=FALSE,
  cex.main = 0.9,
  main="Na sua opinião, em que grau estes fatores influenciam\n a adoção de software livre do ponto de vista tecnológico?"
)

Then I increased the left margin of the graph

par(mar=c(5, 18, 4, 2))

And then I got something right for me

    
15.01.2014 / 00:09