J'utilise actuellement scale_brewer()
pour le remplissage et ceux-ci sont beaux en couleur (à l'écran et via une imprimante couleur) mais s'impriment de manière relativement uniforme en gris lorsque vous utilisez une imprimante noir et blanc. J'ai cherché dans la ggplot2
documentation en ligne mais je n'ai rien vu sur l'ajout de textures pour remplir les couleurs. Existe-t-il un ggplot2
moyen officiel de le faire ou est-ce que quelqu'un a un hack qu'il utilise? Par textures, j'entends des choses comme des barres diagonales, des barres diagonales inversées, des motifs de points, etc. qui différencieraient les couleurs de remplissage lorsqu'elles étaient imprimées en noir et blanc.
103
Réponses:
ggplot peut utiliser des palettes de colorbrewer. Certains d'entre eux sont faciles à "photocopier". Alors mabe quelque chose comme ça fonctionnera pour vous?
dans ce cas, OrRd est une palette trouvée sur la page Web colorbrewer: http://colorbrewer2.org/
la source
Salut les gens, voici un petit hack qui résout le problème de texture de manière très basique:
ggplot2: rendre la bordure d'une barre plus sombre que les autres en utilisant R
EDIT: J'ai enfin trouvé le temps de donner un bref exemple de ce hack qui permet au moins 3 types de motif de base dans ggplot2. Le code:
Produit ceci:
Ce n'est pas super joli mais c'est la seule solution à laquelle je puisse penser.
Comme on peut le voir, je produis des données très basiques. Pour obtenir les lignes verticales, je crée simplement un bloc de données contenant la variable à laquelle je voulais ajouter des lignes verticales et j'ai redessiné les bordures du graphique plusieurs fois en réduisant la largeur à chaque fois.
Une chose similaire est faite pour les lignes horizontales mais une nouvelle trame de données est nécessaire pour chaque redessiner où j'ai soustrait une valeur (dans mon exemple «5») de la valeur associée à la variable d'intérêt. Réduire efficacement la hauteur de la barre. Ceci est difficile à réaliser et il peut y avoir des approches plus rationalisées, mais cela illustre comment cela peut être réalisé.
Le motif de maillage est une combinaison des deux. Tout d' abord dessiner les lignes verticales, puis ajoutez les lignes horizontales de réglage
fill
quefill='transparent'
pour assurer les lignes verticales ne sont pas tracées sur.Jusqu'à ce qu'il y ait une mise à jour du modèle, j'espère que certains d'entre vous trouveront cela utile.
MODIFIER 2:
Des motifs diagonaux supplémentaires peuvent également être ajoutés. J'ai ajouté une variable supplémentaire à la trame de données:
Ensuite, j'ai créé un nouveau bloc de données pour contenir les coordonnées des lignes diagonales:
À partir de là, j'ai ajouté geom_paths au ggplot ci-dessus, chacun appelant des coordonnées différentes et dessinant les lignes sur la barre souhaitée:
Il en résulte ce qui suit:
C'est un peu bâclé car je n'ai pas investi trop de temps pour que les lignes soient parfaitement inclinées et espacées, mais cela devrait servir de preuve de concept.
Évidemment, les lignes peuvent s'incliner dans la direction opposée et il y a également de la place pour un maillage diagonal tout comme le maillage horizontal et vertical.
Je pense que c'est à peu près tout ce que je peux offrir sur le plan du motif. J'espère que quelqu'un pourra en trouver une utilité.
EDIT 3: derniers mots célèbres. J'ai proposé une autre option de modèle. Cette fois en utilisant
geom_jitter
.Encore une fois, j'ai ajouté une autre variable à la trame de données:
Et j'ai ordonné comment je voulais que chaque modèle soit présenté:
Ensuite, j'ai créé une colonne pour contenir le numéro associé à la barre cible prévue sur l'axe des x:
Suivi de colonnes pour contenir les positions sur l'axe des y des `` bulles '':
Enfin, j'ai ajouté
geom_jitter
s au ggplot ci-dessus en utilisant les nouvelles colonnes pour le positionnement et la réutilisation de `` Points '' pour faire varier la taille des `` bulles '':Chaque fois que le tracé est exécuté, la gigue positionne les `` bulles '' différemment, mais voici l'une des plus belles sorties que j'avais:
Parfois, les «bulles» tremblent à l'extérieur des frontières. Si cela se produit, relancez ou exportez simplement dans de plus grandes dimensions. Plus de bulles peuvent être tracées sur chaque incrément sur l'axe des y, ce qui remplira davantage l'espace vide si vous le souhaitez.
Cela fait jusqu'à 7 modèles (si vous incluez des lignes diagonales inclinées opposées et un maillage diagonal des deux) qui peuvent être piratés dans ggplot.
N'hésitez pas à en suggérer davantage si quelqu'un peut réfléchir à certains.
EDIT 4: J'ai travaillé sur une fonction wrapper pour automatiser les hachures / motifs dans ggplot2. Je publierai un lien une fois que j'ai développé la fonction pour autoriser les motifs dans les tracés facet_grid, etc. Voici une sortie avec l'entrée de fonction pour un simple tracé de barres à titre d'exemple:
J'ajouterai une dernière modification une fois que la fonction sera prête à être partagée.
EDIT 5: Voici un lien vers la fonction EggHatch que j'ai écrite pour faciliter un peu le processus d'ajout de motifs aux tracés geom_bar.
la source
Ce n'est actuellement pas possible car grid (le système graphique utilisé par ggplot2 pour faire le dessin réel) ne prend pas en charge les textures. Désolé!
la source
Vous pouvez utiliser le package ggtextures de @claus wilke pour dessiner des rectangles et des barres texturés avec
ggplot2
.Vous pouvez également le combiner avec d'autres geoms:
la source
Je viens de découvrir un package appelé
ggpattern
( https://github.com/coolbutuseless/ggpattern ) qui semble être une bonne solution à ce problème et s'intègre bien avec le flux de travail ggplot2. Bien que les solutions utilisant des textures puissent fonctionner correctement pour les barres diagonales, elles ne produiront pas de graphiques vectoriels et ne sont donc pas optimales.Voici un exemple tiré directement du dépôt github de ggpattern:
ce qui donne ce tracé:
Si seulement certaines barres doivent être rayées,
geom_col_pattern()
a unpattern_alpha
argument qui pourrait être utilisé pour rendre certaines bandes indésirables complètement transparentes.la source
Je pense que le travail de Docconcoct est excellent, mais maintenant, j'ai soudainement cherché sur Google un package spécial --- Patternplot . Je n'ai pas vu le code interne mais la vignette semble utile.
la source
ggrough
pourrait être intéressant: https://xvrdm.github.io/ggrough/la source
Il peut être utile de créer un bloc de données factice dont les contours correspondent à des "textures" puis d'utiliser geom_contour. Voici mon exemple:
Et voici le résultat: tracé ombré avec des lignes
(les lignes doivent être lissées)
la source