Gráfico de círculos
Autor: Antonio Olinto Ávila da Silva | Publicado: 2011-12-14T14:30:00-02:00

Elaborei um gráfico para a representação do número relativo de observações por categoria de determinadas variáveis registradas em diferentes pontos de coleta. No exemplo abaixo, eu tenho o número de embarcações observadas por classe de comprimento total nos municípios de São Paulo (dados são fictícios).
Nesta rotina a relativização é feita por ponto de coleta (município).

Dados (fictícios)

             
  <!-- 
  BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"Arial"; font-size:x-small }
   -->
 
        
    Município    0 ˫ 6    6 ˫ 9    9 ˫ 12    12 ˫ 15    15 ˫ 18    ≥ 18   
    Ubatuba    37    46    7    7    0    0   
    Caraguatatuba    41    41    15    2    0    0   
    Ilhabela    50    39    9    0    0    0   
    São Sebastião    43    40    14    1    0    0   
    Bertioga    0    52    28    18    0    0   
    Santos/Guarujá    6    27    16    16    4    28   
    São Vicente    75    12    12    0    0    0   
    Praia Grande    60    39    0    0    0    0   
    Mongaguá    16    83    0    0    0    0   
    Itanhaém    0    85    14    0    0    0   
    Peruíbe    31    43    25    0    0    0   
    Iguape    38    60    0    0    0    0   
    Ilha Comprida    66    34    0    0    0    0   
    Cananéia    34    40    10    11    2    0   
    Total    497    641    150    55    6    28   
      

# importa dados da área de transferênciadat.graf &lt;- t(read.delim("clipboard",dec=",",row.names=1))dat.graf

# indica o valor da variáveis que serão utilizadas NCATY&lt;-nrow(dat.graf)NCATX&lt;-ncol(dat.graf)MARX&lt;-10 # margem da abcissaMARY&lt;-5 # margem da ordenadaCIRC&lt;-13 # tamanho máximo do círculoCOR&lt;-"blue" # cor do círculo

# plota o gráfico par(mar=c(MARX,MARY,2,2))
plot(c(1:NCATX),rep(0,NCATX),xlab="",ylab="",
xaxp=c(1,NCATX,NCATX-1),yaxp=c(1,NCATY+1,NCATY),
ylim=c(0,NCATY+1),xaxt="n",yaxt="n",type="n")
axis(1,at=c(1:NCATX),labels=colnames(dat.graf),las=2,cex.axis=1.5)
axis(2,at=c(1:NCATY),labels=rownames(dat.graf),las=2,cex.axis=1.5)
for (x in 1:NCATX) {
&nbsp; for(y in 1:NCATY) {
&nbsp;&nbsp;&nbsp; points(x,y,col=COR,pch=19,cex=dat.graf[y,x]*CIRC/sum(dat.graf[,x]))
&nbsp; }
}
# caso a última linha da tabela seja uma totalização e deva ficar em destaque.
abline(v=NCATX-0.5,lty=2)
















-------------
Algumas pessoas tiveram problemas com a visualização, compreensão e  inserção do símbolos matemáticos de indicação dos intervalos de classe.6 ˫ 9, 6 |- 9, [6,9[ ou [6,9) indica um intervalo de classe que inclui o limite inferior (6) e exclui o superior (9)No Linux Ubuntu a forma correta de indicar o símbolo "|-" (˫) é Shift+Ctrl+U 02EB e o código para "&gt;=" (≥) é Shift+Ctrl+U 2265, , como podemos ver na figura. Dependendo no navegador e do sistema operacional estes símbolos podem não ser visualizados corretamente no blog.Caso  os símbolos matemáticos e as acentuações não sejam corretamente  importados pelo R através área de transferência (clipboard) podemos  gravar a tabela de dados e importa-la como comando read.csv.Se mesmo assim os probelmas continuarem podemos re-escrever os nomes de colunas e linhas com colnames e rownames:colnames(dat.graf)
colnames(dat.graf)[4]&lt;-"São Sebastião"
colnames(dat.graf)[6]&lt;-"Santos/Guarujá"rownames(dat.graf) rownames(dat.graf)&lt;-c("0 ˫ 6","6 ˫ 9","9 ˫ 12","12 ˫ 15","15 ˫ 18","≥ 18")