[R-es] Gráfico von varias variables
Mauricio Monsalvo
m.monsalvo en gmail.com
Mie Oct 31 23:50:04 CET 2012
Hola de nuevo:
Un problema más que no logro saldar... Las líneas del primer y segundo eje
dibujan sus "puntos" en un lugar raro, sospechoso... como si estuviera
levemente corrido en relación al lugar que esperaba (la mitad de las
barras).- No se si se alcanza a ver en el adjunto. Las primeras están más
hacia la izquierda, los últimos más hacia la derecha. Probé eliminando los
NA (caps <- na.omit(caps)) como para ver si el problema era la diferencia
en la cantidad de observaciones, pero no lo resolvió.
Claro que puedo eliminar los puntos, pero en ese caso pierdo análisis
gráfico y puede que esté ocultando algún error.
Creo que si logro ajustar este gráfico, lo patento!!
Saludos.
Mauricio.
El 31 de octubre de 2012 11:30, Mauricio Monsalvo
<m.monsalvo en gmail.com>escribió:
> **
> Elemental...
> Gracias de nuevo.
> Mauricio
> ------------------------------
> *From: * Carlos Ortega <cof en qualityexcellence.es>
> *Date: *Wed, 31 Oct 2012 15:21:43 +0100
> *To: *Mauricio Monsalvo<m.monsalvo en gmail.com>
> *Cc: *r-help-es<r-help-es en r-project.org>
> *Subject: *Re: [R-es] Gráfico von varias variables
>
> Hola,
>
> Para ordenar todo por la columna "Con12Meses" se puede hacer ordenando
> inicialmente el data.frame "caps" y luego ya generar todos los gráficos.
> Adjunto el código. Tan sólo cambia una línea (la destaco en rojo):
>
>
> ##############################################
> *#ordeno por columna "Con12Meses"*
> *caps <- caps[order(caps$Con12Meses, decreasing=T),]*
>
> par(mar=c(4,4,4,4), #
> omi=c(0.1,0.1,0.1,0.1), #
> las=1, #
> mex=0.5, #
> cex.lab = 1, #
> cex.axis=0.7) # el tamaño de las leyendas
> barplot(
> caps$personas,
> names.ar=caps$CAPS,
> col="blue", border=F, space=.01, axes=F, ylim=c(0,
> 1.20*max(caps$personas))
> )
> axis(2, col.axis="blue")
> #par(new=T)
> # crea la barra de caps$PersonasRCGV, pero cambia los ejes porque el
> resultado gráfico no es
> # coherente con los valores (caps$PersonasRCVG siempre es un valor menor
> que caps$personas...)
> barplot(caps$PersonasRCVG, axes=F, ann=F,
> col="grey", border=F, space=.01, add=T)
> par(new=T)
> plot(caps$Con12Meses, axes=F, ann=F, type="n")
> points(caps$Con12Meses,type="l",col="black") # Crea la línea
> paracaps$Con12Meses (por la cual quiero ordenar)
> points(caps$Con12Meses, pch=16, col="black") # agrega puntos negros
> rellenos a la línea
> par(new=T)
> plot(caps$prevalencia, axes=F, ann=F, type="n")
> axis(4, col.axis="tomato", col.lab="black" ) #
> Crea el eje secundario
> #points(caps$prevalencia,type="l",col="red") # Crea la línea sobre
> el eje secundario
> #points(caps$prevalencia, pch=16, col="red") # agrega puntos rojos
> rellenos a la línea
> points(caps$prevalencia, type="b", pch=16, col="red")
> text(caps$prevalencia, labels=paste(caps$prevalencia), pos=3, col="red", )
> # si se quiere poner la prevalencia en el gráfico.
> box()
> ######################### FIN ######################
>
>
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
> El 31 de octubre de 2012 14:53, Mauricio Monsalvo <m.monsalvo en gmail.com>escribió:
>
>> Muchas gracias a todos!
>> Todas las soluciones me resultaron útiles. Comparto que la clave era el
>> add=T para la segunda barra. Me quedó pendiente ordenar el gráfico por la
>> línea de Con12Meses (que va sobre el primer eje) y ahora noto que me faltan
>> las referencias. ¿Es lo mismo que ponerlas en uno? ¿Pero en cuál?
>> Mauricio
>>
>>
>>
>> El 31 de octubre de 2012 06:52, Carlos Ortega <cof en qualityexcellence.es>escribió:
>>
>> Hola,
>>>
>>> Incluyo todo el código destacando algunas mejoras que creo que añaden
>>> coherencia a lo que se representa en cada eje, además de alguna mejora
>>> estética.
>>>
>>> ########################################################
>>> par(*mar=c(4,4,4,4)*, #
>>> omi=c(0.1,0.1,0.1,0.1), #
>>> las=1, #
>>> mex=0.5, #
>>> cex.lab = 1, #
>>> cex.axis=0.7) # el tamaño de las leyendas
>>>
>>> ########################
>>> # Barplots - Eje Primario
>>> barplot(
>>> caps$personas,
>>> names.ar=caps$CAPS,
>>> col="blue", border=F, space=.01,* axes=F, ylim=c(0,
>>> 1.20*max(caps$personas)*)
>>> )
>>> *axis(2, col.axis="blue") # Separo el eje para darle color azul como el
>>> del barplot.1*
>>> *#*par(new=T)
>>>
>>> # crea la barra de caps$PersonasRCGV, pero cambia los ejes porque el
>>> resultado gráfico no es
>>> # coherente con los valores (caps$PersonasRCVG siempre es un valor menor
>>> que caps$personas...)
>>> barplot(caps$PersonasRCVG, axes=F, ann=F,
>>> col="grey", border=F, space=.01, *add=T)*
>>>
>>> #######################
>>> # Líneas - Eje Secundario
>>> par(new=T)
>>> plot(caps$Con12Meses, axes=F, ann=F, type="n")
>>> *#*points(caps$Con12Meses,type="l",col="black") # Crea la línea
>>> paracaps$Con12Meses (por la cual quiero ordenar)
>>> *#*points(caps$Con12Meses, pch=16, col="black")* * # agrega puntos
>>> negros rellenos a la línea
>>> *points(caps$Con12Meses, pch=16, col="black") # Los dos pasos
>>> anteriores los puedo hacer en uno.*
>>> par(new=T)
>>> plot(caps$prevalencia, axes=F, ann=F, type="n")
>>> *axis(4, col.axis="tomato", col.lab="black" ) *
>>> # Crea el eje secundario *y le doy color rojo como una de las líneas. *
>>> *#*points(caps$prevalencia,type="l",col="red") # Crea la línea
>>> sobre el eje secundario
>>> #points(caps$prevalencia, pch=16, col="red") # agrega puntos
>>> rojos rellenos a la línea
>>> *points(caps$prevalencia, type="b", pch=16, col="red") **# Los dos
>>> pasos anteriores los puedo hacer en uno.*
>>> text(caps$prevalencia, labels=paste(caps$prevalencia), pos=3,
>>> col="red", )
>>> # si se quiere poner la prevalencia en el gráfico.
>>> *box()*
>>>
>>> ########################################################
>>>
>>>
>>> Saludos,
>>> Carlos Ortega
>>> www.qualityexcellence.es
>>>
>>> El 31 de octubre de 2012 10:24, Xavi de Blas <xaviblas en gmail.com>escribió:
>>>
>>> Perdón por el autobombo pero aquí tengo un gráfico con 4 variables que
>>>> me satisface:
>>>>
>>>> http://chronojump.org/server/images/tf_by_level_sex_jumptype.png
>>>>
>>>> el código está aquí:
>>>>
>>>>
>>>> http://git.gnome.org/browse/chronojump/tree/chronojump_server/r-sqlite/tf_by_level_sex_jumptype.R
>>>>
>>>> A ver si te sirve. Saludos
>>>>
>>>>
>>>>
>>>> 2012/10/31 Carlos Ortega <cof en qualityexcellence.es>:
>>>> > Hola,
>>>> >
>>>> > La clave está destacada en utilizar "*add=T*" en el segundo barplot
>>>> para
>>>> > superponerle al primero en vez de utilizar "par(new=T)".
>>>> > El destaco los cambios en tu mismo código:
>>>> >
>>>> > par(mar=c(4,4,3,1), #
>>>> > omi=c(0.1,0.1,0.1,0.1), #
>>>> > las=1, #
>>>> > mex=0.5, #
>>>> > cex.lab = 1, #
>>>> > cex.axis=0.7) # el tamaño de las leyendas
>>>> > barplot(caps$personas,
>>>> > names.ar=caps$CAPS,
>>>> > col="blue", border=F, space=.01)
>>>> > *#par(new=T)*
>>>> > barplot(caps$PersonasRCVG, axes=F, ann=F, type="n",
>>>> > # crea la barra de caps$PersonasRCGV, pero cambia los ejes
>>>> porque
>>>> > el resultado gráfico no es
>>>> > # coherente con los valores (caps$PersonasRCVG siempre es un
>>>> valor
>>>> > menor que
>>>> > # caps$personas...)
>>>> > col="grey", border=F, space=.01*, add=T*)
>>>> >
>>>> > Saludos,
>>>> > Carlos Ortega
>>>> > www.qualityexcellence.es
>>>> >
>>>> > El 31 de octubre de 2012 05:32, Mauricio Monsalvo
>>>> > <m.monsalvo en gmail.com>escribió:
>>>> >
>>>> >> Estimados amigos,
>>>> >> Tengo el siguiente set de datos:
>>>> >> caps <- datos[datos$NombreDepartamento=="LANUS", c("CAPS",
>>>> "personas",
>>>> >> "PersonasRCVG", "Con12Meses")]
>>>> >> caps$prevalencia <- round(caps$PersonasRCVG/caps$personas*100,1)
>>>> >> caps
>>>> >>
>>>> >> CAPS personas PersonasRCVG Con12Meses prevalencia
>>>> >> 2345 2345 1347 132 211 9.8
>>>> >> 2363 2363 17272 1602 2320 9.3
>>>> >> 2341 2341 1771 241 220 13.6
>>>> >> 2361 2361 2725 371 466 13.6
>>>> >> 2342 2342 4590 538 3615 11.7
>>>> >> 2347 2347 16610 1678 5884 10.1
>>>> >> 2348 2348 2961 373 883 12.6
>>>> >> 2350 2350 8132 990 1180 12.2
>>>> >> 2351 2351 2205 332 208 15.1
>>>> >> 2355 2355 4059 409 548 10.1
>>>> >> 2364 2364 5175 517 696 10.0
>>>> >> 2349 2349 1111 158 459 14.2
>>>> >> 2360 2360 809 127 190 15.7
>>>> >> 2362 2362 3112 358 754 11.5
>>>> >> 2365 2365 2522 340 271 13.5
>>>> >> 2343 2343 12136 1112 5016 9.2
>>>> >> 2344 2344 20956 2365 4161 11.3
>>>> >> 2346 2346 2640 273 1062 10.3
>>>> >> 2357 2357 3143 458 682 14.6
>>>> >> 2358 2358 3432 337 532 9.8
>>>> >> 2340 2340 1733 288 384 16.6
>>>> >> 2352 2352 17358 1694 3511 9.8
>>>> >> 2356 2356 15034 1780 10990 11.8
>>>> >> 2359 2359 15907 1731 6464 10.9
>>>> >> 8924 8924 639 160 103 25.0
>>>> >> 8929 8929 734 107 66 14.6
>>>> >> 8937 8937 2688 527 414 19.6
>>>> >> 8932 8932 858 93 96 10.8
>>>> >>
>>>> >> Y quiero graficar las 4 variables juntas. Creo que casi casi casi lo
>>>> logro,
>>>> >> salvo por (a) la barra de caps$PersonasRCVG, que pareciera cambia los
>>>> >> valores del eje Y a otra escala... creo... y (b) porque me falta
>>>> ordenar el
>>>> >> gráfico por la línea de caps$Con12Meses (de mayor a menor).
>>>> >> Va mi mejor intento:
>>>> >> par(mar=c(4,4,3,1), #
>>>> >> omi=c(0.1,0.1,0.1,0.1), #
>>>> >> las=1, #
>>>> >> mex=0.5, #
>>>> >> cex.lab = 1, #
>>>> >> cex.axis=0.7) # el tamaño de las leyendas
>>>> >> barplot(caps$personas,
>>>> >> names.ar=caps$CAPS,
>>>> >> col="blue", border=F, space=.01)
>>>> >> par(new=T)
>>>> >> barplot(caps$PersonasRCVG, axes=F, ann=F, type="n", # crea la barra
>>>> de
>>>> >> caps$PersonasRCGV, pero cambia los ejes porque el resultado gráfico
>>>> no es
>>>> >> coherente con los valores (caps$PersonasRCVG siempre es un valor
>>>> menor que
>>>> >> caps$personas...)
>>>> >> col="grey", border=F, space=.01)
>>>> >> par(new=T)
>>>> >> plot(caps$Con12Meses, axes=F, ann=F, type="n")
>>>> >> points(caps$Con12Meses,type="l",col="black") # Crea la línea
>>>> para
>>>> >> caps$Con12Meses (por la cual quiero ordenar)
>>>> >> points(caps$Con12Meses, pch=16, col="black") # agrega puntos
>>>> negros
>>>> >> rellenos a la línea
>>>> >> par(new=T)
>>>> >> plot(caps$prevalencia, axes=F, ann=F, type="n")
>>>> >> axis(4) # Crea el eje
>>>> secundario
>>>> >> points(caps$prevalencia,type="l",col="red") # Crea la línea
>>>> sobre el
>>>> >> eje secundario
>>>> >> points(caps$prevalencia, pch=16, col="red") # agrega puntos
>>>> rojos
>>>> >> rellenos a la línea
>>>> >> text(caps$prevalencia, labels=paste(caps$prevalencia), pos=3,
>>>> col="red", )
>>>> >> # si se quiere poner la prevalencia en el gráfico.
>>>> >> ¿Podrían por favor ayudarme con la solución? Les juro que renegué
>>>> como loco
>>>> >> para llegar a este punto y creo que ya no "veo" más nada en las
>>>> ayudas!
>>>> >> Además, ¿no hay una forma más "simple" de hacerlo?
>>>> >> Muchas gracias, como siempre. (Algún día aprenderé...)
>>>> >> --
>>>> >> Mauricio
>>>> >>
>>>> >> [[alternative HTML version deleted]]
>>>> >>
>>>> >>
>>>> >> _______________________________________________
>>>> >> R-help-es mailing list
>>>> >> R-help-es en r-project.org
>>>> >> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>>> >>
>>>> >>
>>>> >
>>>> >
>>>> > --
>>>> > Saludos,
>>>> > Carlos Ortega
>>>> > www.qualityexcellence.es
>>>> >
>>>> > [[alternative HTML version deleted]]
>>>> >
>>>> >
>>>> > _______________________________________________
>>>> > R-help-es mailing list
>>>> > R-help-es en r-project.org
>>>> > https://stat.ethz.ch/mailman/listinfo/r-help-es
>>>> >
>>>>
>>>
>>>
>>>
>>> --
>>> Saludos,
>>> Carlos Ortega
>>> www.qualityexcellence.es
>>>
>>
>>
>>
>> --
>> Mauricio
>>
>
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
--
Mauricio
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20121031/223d9f55/attachment-0001.html>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: Lanus según CAPS.png
Type: image/png
Size: 14834 bytes
Desc: no disponible
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20121031/223d9f55/attachment-0001.png>
Más información sobre la lista de distribución R-help-es