Actualmente estoy usando scale_brewer()
para relleno y estos se ven hermosos en color (en la pantalla y a través de la impresora a color) pero se imprimen de manera relativamente uniforme como grises cuando se usa una impresora en blanco y negro. Busqué en la ggplot2
documentación en línea pero no vi nada sobre cómo agregar texturas para rellenar colores. ¿Existe una ggplot2
forma oficial de hacer esto o alguien tiene un truco que usa? Por texturas me refiero a cosas como barras diagonales, barras diagonales inversas, patrones de puntos, etc. que diferencian los colores de relleno cuando se imprimen en blanco y negro.
103
Respuestas:
ggplot puede usar paletas de colorbrewer. Algunos de estos son compatibles con las "fotocopias". Entonces, ¿tal vez algo como esto funcione para ti?
en este caso, OrRd es una paleta que se encuentra en la página web de colorbrewer: http://colorbrewer2.org/
fuente
Hola amigos, aquí hay un pequeño truco que aborda el problema de la textura de una manera muy básica:
ggplot2: haz que el borde de una barra sea más oscuro que las otras usando R
EDITAR: Finalmente encontré tiempo para dar un breve ejemplo de este truco que permite al menos 3 tipos de patrones básicos en ggplot2. El código:
Produce esto:
No es muy bonito, pero es la única solución en la que puedo pensar.
Como puede verse, produzco algunos datos muy básicos. Para obtener las líneas verticales, simplemente creo un marco de datos para contener la variable a la que quería agregar líneas verticales y redibujé los bordes del gráfico varias veces, reduciendo el ancho cada vez.
Se hace algo similar para las líneas horizontales, pero se necesita un nuevo marco de datos para cada redibujo en el que he restado un valor (en mi ejemplo '5') del valor asociado con la variable de interés. Bajando efectivamente la altura de la barra. Esto es complicado de lograr y puede haber enfoques más simplificados, pero esto ilustra cómo se puede lograr.
El patrón de malla es una combinación de ambos. Primero dibuje las líneas verticales y luego agregue la configuración de líneas horizontales
fill
comofill='transparent'
para asegurar las líneas verticales no están dibujados sobre.Hasta que haya una actualización del patrón, espero que algunos de ustedes lo encuentren útil.
EDITAR 2:
Además, también se pueden agregar patrones diagonales. Agregué una variable adicional al marco de datos:
Luego creé un nuevo marco de datos para contener las coordenadas de las líneas diagonales:
A partir de ahí, agregué geom_paths al ggplot de arriba con cada uno llamando a diferentes coordenadas y dibujando las líneas sobre la barra deseada:
Esto da como resultado lo siguiente:
Es un poco descuidado, ya que no invertí demasiado tiempo en conseguir que las líneas estuvieran perfectamente en ángulo y espaciadas, pero esto debería servir como prueba de concepto.
Obviamente, las líneas pueden inclinarse en la dirección opuesta y también hay espacio para mallas diagonales como las mallas horizontales y verticales.
Creo que eso es todo lo que puedo ofrecer en el frente del patrón. Espero que alguien pueda encontrarle un uso.
EDITAR 3: Últimas palabras famosas. Se me ocurrió otra opción de patrón. Esta vez usando
geom_jitter
.Nuevamente agregué otra Variable al marco de datos:
Y ordené cómo quería que se presentara cada patrón:
A continuación, creé una columna para contener el número asociado con la barra de destino prevista en el eje x:
Seguido de columnas para contener las posiciones en el eje y de las 'burbujas':
Finalmente agregué
geom_jitter
s al ggplot anterior usando las nuevas columnas para posicionar y reutilizar 'Puntos' para variar el tamaño de las 'burbujas':Cada vez que se ejecuta el gráfico, el jitter posiciona las 'burbujas' de manera diferente, pero aquí está uno de los resultados más agradables que tuve:
A veces, las 'burbujas' se agitarán fuera de las fronteras. Si esto sucede, vuelva a ejecutar o simplemente exporte en dimensiones más grandes. Se pueden trazar más burbujas en cada incremento en el eje y, lo que llenará más espacio en blanco si así lo desea.
Eso hace hasta 7 patrones (si incluye líneas diagonales inclinadas opuestas y malla diagonal de ambas) que se pueden piratear en ggplot.
No dude en sugerir más si alguien puede pensar en alguno.
EDITAR 4: He estado trabajando en una función de envoltura para automatizar el rayado / patrones en ggplot2. Publicaré un enlace una vez que haya expandido la función para permitir patrones en gráficos facet_grid, etc. Aquí hay un resultado con la entrada de la función para un gráfico simple de barras como ejemplo:
Agregaré una última edición una vez que tenga la función lista para compartir.
EDITAR 5: Aquí hay un enlace a la función EggHatch que escribí para facilitar un poco el proceso de agregar patrones a los gráficos geom_bar.
fuente
Actualmente no es posible porque la cuadrícula (el sistema de gráficos que usa ggplot2 para hacer el dibujo real) no admite texturas. ¡Lo siento!
fuente
Puede usar el paquete ggtextures de @claus wilke para dibujar rectángulos y barras con textura
ggplot2
.También puedes combinarlo con otras geoms:
fuente
Creo que el trabajo de Docconcoct es genial, pero ahora de repente busqué en Google un paquete especial: Patternplot . No vi el código interno, pero la viñeta parece útil.
fuente
ggrough
puede ser de interés: https://xvrdm.github.io/ggrough/fuente
Acabo de descubrir un paquete llamado
ggpattern
( https://github.com/coolbutuseless/ggpattern ) que parece ser una buena solución para este problema y se integra muy bien con el flujo de trabajo de ggplot2. Si bien las soluciones que usan texturas pueden funcionar bien para barras diagonales, no producirán gráficos vectoriales y, por lo tanto, no son óptimas.Aquí hay un ejemplo tomado directamente del repositorio de github de ggpattern:
lo que da como resultado este gráfico:
Si solo algunas barras deben tener rayas,
geom_col_pattern()
tiene unpattern_alpha
argumento que podría usarse para hacer que ciertas rayas no deseadas sean completamente transparentes.fuente
Puede ser útil crear un marco de datos ficticio cuyos contornos correspondan a "texturas" y luego usar geom_contour. Aquí está mi ejemplo:
Y aquí está el resultado: gráfico sombreado con líneas
(las líneas deben suavizarse)
fuente