ggplot2 pour les impressions en niveaux de gris

Ggplot2 produit des graphiques fantaisie pour les impressions écran/couleur, mais le fond gris et les couleurs interfèrent lors de l'impression en niveaux de gris. Pour une meilleure lisibilité, je préfère désactiver le fond gris et utiliser des générateurs de couleurs qui produisent différentes nuances de gris ou différents types de traits de remplissage pour distinguer les groupes.

25
demandé sur Sandy Muspratt 2012-11-22 00:07:11

3 réponses

* * modifier * * code mis à jour: geom_bar nécessite un stat.

theme_bw c'est peut-être ce que tu cherches. Si vous tracez un géom qui a un remplissage tel que des barres, la fonction scale_fill_grey vous donnera le contrôle sur les nuances de gris. Si vous tracez un géom qui a une couleur (comme une ligne ou des points), la fonction scale_colour_grey vous donnera le contrôle. Pour autant que je sache, ggplot ne trace pas les remplissages à motifs. En supposant que vous tracez des barres, ce qui suit tracera des barres colorées sur un gris fond.

library(ggplot2)

data <- read.table(text = 
"type Year  Value 
 A    2000  3
 B    2000  10
 C    2000  11
 A    2001  4
 B    2001  5
 C    2001  12", sep = "", header = TRUE)

(p = ggplot(data = data, aes(x = factor(Year), y = Value)) +       
  geom_bar(aes(fill = type), stat="identity", position = "dodge"))

Ce qui suit change les barres colorées en nuances de gris. Notez que l'une des barres se perd en arrière-plan.

(p = p + scale_fill_grey(start = 0, end = .9))

Ce qui suit supprime le fond gris.

(p = p + theme_bw())

entrez la description de l'image ici

Un point a une couleur, pas un remplissage. Donc, pour utiliser des nuances de gris sur les points, vous auriez besoin de quelque chose comme ça.

(p = ggplot(data = data, aes(x = factor(Year), y = Value)) +       
  geom_point(aes(colour = type), size = 5) +
  scale_colour_grey(start = 0, end = .9) +
  theme_bw())

entrez la description de l'image ici

32
répondu Sandy Muspratt 2015-06-15 07:40:00

Voici un exemple simple de ce que vous voulez

library(ggplot2)

data <- read.table(text = 
  "Letter      Year    Value 
 A           1998    5
                B           1999    10
                C           2000    15
                A           2000    7
                B           2001    15
                C           2002    20", sep = "", header = TRUE)
ggplot(data = data, aes(x = factor(Year), y = Value, colour = Letter)) +       
  geom_line(aes(group = Letter)) + scale_colour_grey() +
  theme(panel.background = element_rect(fill='white', colour='black'))

entrez la description de l'image ici

3
répondu Alpha 2012-11-21 21:00:04

Les autres répondeurs se sont concentrés sur l'ajustement automatique des couleurs de ligne/barre. Dans une publication imprimée, cependant, je préférerais ne pas avoir de lignes gris clair, etc. comme ils sont difficiles à reconnaître et à distinguer. Voici une solution qui ajuste automatiquement le type de ligne (ce que je ne savais pas possible jusqu'à il y a un jour).

library(ggplot2)
theme_set(theme_bw())

data <- read.table(text = 
"type Year  Value 
 A    1998  6
 A    1999  8
 A    2000  6
 A    2001  7
 B    1998  4
 B    1999  5
 B    2000  10
 B    2001  5
 C    1998  8
 C    1999  6
 C    2000  9
 C    2001  8", sep = "", header = TRUE)

p <- ggplot(data=data,
            aes(x = factor(Year),
                y = Value,
                linetype = factor(type)))
p <- p + geom_line(aes(group = factor(type)),
                   size=0.8)

entrez la description de l'image ici

Notez que vous pouvez personnaliser facilement ggplot thèmes. Voici un résultat alternatif en utilisant le mien thème ggplot minimaliste :

entrez la description de l'image ici

(L'anticrénelage semble beaucoup mieux lorsqu'il est exporté au format pdf qu'ici [en png].)

3
répondu jhin 2016-01-29 11:52:09