[R-es] ggplot o lattice contra graficar de manera clasica.

Oscar Perpiñan oscar.perpinan en upm.es
Mar Nov 26 10:28:03 CET 2013


Hola,

La ventaja esencial de los gráficos "grid" (lattice y ggplot2) frente
a los gráficos "base" es su mayor flexibilidad para añadir o modificar
el contenido. Un gráfico "grid" es un objeto más en R y, como tal,
puede ser manipulado con los métodos que cada paquete define.
Existen dos librerías fundamentales en el mundo "grid", lattice y ggplot2.

lattice es una implementación de los gráficos Trellis propuestos por
Cleveland y otros (una matriz rectangular de paneles). Usa una
interfaz basada en las fórmulas de R para especificar la relación
entre las variables que componen el gráfico. Por ejemplo, y ~ x | g1 *
g2 representa la variable y frente a x condicionada a las variables g1
y g2. Cada combinación de estas variables g1 y g2 determina un
subconjunto de x e y, y por tanto el contenido de cada panel de la
matriz del gráfico Trellis. Por ejemplo, el siguiente código
representa la variable "wt" frente a "mpg" usando los niveles de la
variable "cyl" para controlar el color y la variable "am" para definir
los paneles:

xyplot(wt ~ mpg | am, data = mtcars, groups = cyl)

En cierto sentido, este enfoque puede ser algo rígido para algunos
gráficos, sobre todo cuando se necesita superponer capas diferentes en
un mismo panel con datos que provienen de contenedores diferentes.
Aquí merece la pena destacar el paquete latticeExtra. Con él es
posible definir capas (layer) y superponer objetos trellis completos o
capas con la función +.trellis con mucha flexibilidad.

ggplot2 es una implementación de "La gramática de los gráficos"
propuesta por Wilkinson en 1999. Este esquema divide un gráfico en
componentes tales como escalas y capas. Por tanto, la definición de un
gráfico con este enfoque se realiza combinando varias funciones que
proporcionan la definición de cada componente implicado. Normalmente
un gráfico se construye de forma incremental a partir de la función
ggplot usando el operador + para añadir capas al objeto definido con
ggplot. Por ejemplo, para representar el mismo gráfico anterior (la
variable "wt" frente a "mpg" usando los niveles de la variable "cyl"
para controlar el color y la variable "am" para definir los paneles)
se usa este código:

ggplot(mtcars, aes(mpg, wt)) +
    geom_point(aes(colour=factor(cyl))) +
    facet_grid(. ~ am)

Como decía, la elección entre lattice o ggplot2 depende de los gustos
de cada uno para un rango muy amplio de aplicaciones. No me refiero a
los gustos estéticos sino de manejo (fórmula frente a definición
incremental). En general, salvo detalles muy específicos y de uso poco
frecuente, sabiendo usar adecuadamente los recursos que cada paquete
ofrece, los resultados gráficos son prácticamente idénticos y con la
misma calidad estética.

Las dos únicas diferencias relevantes que he encontrado son
(específicas de mi trabajo particular con R):

- Muchos paquetes definen métodos para gráficos "base" y "lattice",
pero con menor frecuencia y sofisticación para ggplot2. En esos casos
esto obliga a elaborar código propio y usar funciones auxiliares
(fortify) para transformar clases de ese paquete en data.frame
convencionales antes de usar ggplot.

- En su implementación actual, ggplot2 es sustancialmente más lento
para generar gráficos con contenedores de datos *muy* grandes. Esto es
destacable en el caso de datos espaciales y, sobre todo, cuando hay
que realizar el paso de conversión mencionado en el punto anterior.

Termino: hay una serie de artículos (algo antiguos pero igualmente
ilustrativos) que comparan código y resultados (sin optimizar) de
lattice y ggplot2 para una variedad amplia de gráficos:
http://learnr.wordpress.com/2009/06/28/ggplot2-version-of-figures-in-lattice-multivariate-data-visualization-with-r-part-1/.

En la variedad está el gusto :-)

Saludos.

Oscar.

-----------------------------------------------------------------
Oscar Perpiñán Lamigueiro
Dpto. Ingeniería Eléctrica (ETSIDI-UPM)
Grupo de Sistemas Fotovoltaicos (IES-UPM)
URL: http://oscarperpinan.github.io
Twitter: @oscarperpinan


El día 23 de noviembre de 2013 12:35, Carlos J. Gil Bellosta
<cgb en datanalytics.com> escribió:
> Hola, ¿qué tal?
>
> Yo suelo utilizar los gráficos básicos de R para hacer gráficos
> rápidos y, digámoslo así, para uso personal.
>
> Sin embargo, para crear gráficos para terceros con un poco más de
> "calidad" me decanto por ggplot2 (y sé que muchos otros usan lattice
> con el mismo fin e idénticos resultados).
>
> Un recurso fundamental (para mí) de ggplot2 (y lattice) es el de las
> "facetas" (véase http://www.cookbook-r.com/Graphs/Facets_(ggplot2)/).
>
> Un saludo,
>
> Carlos J. Gil Bellosta
> http://www.datanalytics.com
>
>
> El día 22 de noviembre de 2013 23:55, Freddy Omar López Quintero
> <freddy.vate01 en gmail.com> escribió:
>> Hola Javier,
>>
>> Yo no estoy entre la gente "pro", pero me atreveré a opinar jeje. En mi
>> caso particular, si dispusiera de mucho tiempo, me dedicaría a aprender lo
>> que pueda de todas las opciones para poder usarlas con criterio, para usar
>> cada cosa cuando mejor convenga. Creo que el tiempo es mi mayor limitante.
>>
>> Pienso como tú: con las herramientas gráficas que trae R por defecto se
>> puede lograr mucho pero con ggplot (que manejo un poco) se pueden lograr
>> también gráficos de un acabado muy bueno (directo a la editorial). ggplot,
>> a mí, sin embargo, me costó bastante tiempo manejarlo medianamente bien. Es
>> otra forma de concebir la graficación.
>>
>> De Lattice tampoco sé nada.
>>
>> ¡Salud!
>>
>> --
>> «No soy aquellas sombras tutelares
>> que honré con versos que no olvida el tiempo.»
>>
>> JL Borges
>>
>>         [[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
>>
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es



Más información sobre la lista de distribución R-help-es