Подтвердить что ты не робот

Ggplot2 для распечаток в оттенках серого

ggplot2 создает фантастические графики для экранных/цветных отпечатков, но серый цвет и цвета мешают при печати их в оттенках серого. Для лучшей удобочитаемости я бы предпочел отключить серый фон и использовать цветовые генераторы, которые производят либо разные оттенки серого, либо различные виды штрихов заполнения, чтобы отличить группы.

4b9b3361

Ответ 1

** EDIT ** Обновленный код: geom_bar требуется stat.

theme_bw может быть тем, что вам нужно. Если вы планируете геометрию с заполнением, например, в барах, функция scale_fill_grey даст вам контроль над оттенками серого. Если вы рисуете геометрию, имеющую цвет (например, линию или точки), функция scale_colour_grey даст вам элемент управления. Насколько мне известно, ggplot не создает узорные заливки. Предполагая, что вы нарисовываете полосы, следующее будет отображать цветные полосы на сером фоне.

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"))

Следующее изменяет цветные полосы на оттенки серого. Обратите внимание, что один из баров теряется в фоновом режиме.

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

Следующее удаляет серый фон.

(p = p + theme_bw())

enter image description here

Точка имеет цвет, а не заливку. Поэтому для использования оттенков серого по точкам вам понадобится что-то вроде этого.

(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())

enter image description here

Ответ 2

Вот простой пример того, что вы хотите

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'))

enter image description here

Ответ 3

Другие ответчики сосредоточились на настройке цветов линии/бара автоматически. Однако в печатном издании я бы предпочел не иметь светло-серые линии и т.д., Так как их трудно распознать и отличить. Здесь решение, которое автоматически настраивает тип линии (чего я не знал, было возможно до дня назад).

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)

введите описание изображения здесь

Обратите внимание, что вы можете легко настроить темы ggplot. Вот альтернативный результат, используя мою собственную минималистическую тему ggplot:

введите описание изображения здесь

(Сглаживание выглядит лучше при экспорте в pdf, чем здесь [в png].)