Как визуализировать взаимодействие двух параметров в барплоте с разными цветами / текстурами в ggplot? - PullRequest
1 голос
/ 07 мая 2019

Я хочу визуализировать взаимодействие между двумя факторами в диаграмме, используя либо цвет, либо текстуру.

Сначала я нарисовал разницу между двумя уровнями одного фактора (балла), а теперь я хочу разделить эти уровни на основе второго фактора (группы).Мой оригинальный сюжет показал разницу между типом партитуры 1 и 2, покрасив столбцы по-разному (черный против белого).В моем втором сюжете я все еще хотел бы подчеркнуть эту схему раскраски, но я не уверен, как это сделать.

Вот пример кода:

## Example data, data from two groups: patients and controls
    data_ex <- data.frame( pnum = c(1,2,3,4,5,6,7,8,9,10),
               group = c("patient", "patient","patient","patient","patient",
"control", "control", "control", "control", "control"),
               score1 = c(26, 15, 17, 15, 20, 21, 18, 19, 16, 20),
               score2 = c(25, 19, 14, 18, 20, 22, 17, 19, 18, 19))

## Reshape the data
    data_ex_long <- data_ex %>% gather(key = type_score, value = score, score1, score2)

Мой первый сюжет выглядит так:

 ggplot(data=data_ex_long,aes(x = type_score, y = score)) +  
          geom_bar( width=.3, stat = "summary",  colour="black", size=1.5, fill =c("#252525","#f0f0f0"), position = position_dodge(width = 0.05),lwd=0.2) +
          geom_point( size = 3.5, position=position_jitter(width=0.05), alpha = 0.8, fill="#bdbdbd", colour = "black", shape = 21) +
          stat_boxplot(geom = "errorbar", width = 0.0) +
          theme(text = element_text(size = 18),
                axis.text.x  = element_text(size=15, color="#000000"),     
                axis.text.y  = element_text(size=20, color="#000000"),       
                axis.title.x = element_blank(),  
                axis.title.y = element_text(size=18, color="#000000"),
                axis.line.x  = element_line(colour = "black", size = 1.3), 
                axis.line.y  = element_line(colour = "black", size = 1.3),
                panel.border = element_blank(),
                panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
                panel.grid.minor.x = element_blank(), panel.grid.major.x = element_blank(),
                panel.background = element_blank(),
                axis.ticks.length = unit(.25, "cm"),
                axis.line = element_line())

bar plot

Теперь я хотел быразделить факторы на основе групповой переменной, например, так:

        ggplot(data=data_ex_long,aes(x = type_score, y = score, fill = group)) +  
          geom_bar(stat = "summary",fun.y = "mean", colour="black", size=1.5, position = position_dodge(width = 1)) +
          geom_point(aes(type_score, fill = group), colour="black", size = 3.5, shape = 21, position = 
          position_jitterdodge(jitter.width = 0.2, jitter.height=0.4, dodge.width=0.9), alpha = 0.8) +
          geom_errorbar(aes(size=2),stat = 'summary', position = 'dodge', color = "black", width = 1, size = 1) +
          theme(text = element_text(size = 18),
                axis.text.x  = element_text(size=15, color="#000000"),     
                axis.text.y  = element_text(size=20, color="#000000"),       
                axis.title.x = element_blank(),  
                axis.title.y = element_text(size=18, color="#000000"),
                axis.line.x  = element_line(colour = "black", size = 1.3), 
                axis.line.y  = element_line(colour = "black", size = 1.3),
                panel.border = element_blank(),
                panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
                panel.grid.minor.x = element_blank(), panel.grid.major.x = element_blank(),
                panel.background = element_blank(),
                axis.ticks.length = unit(.25, "cm"),
                axis.line = element_line())

interaction plot

Меня не устраивает раскраска таким образом.Мне бы хотелось, чтобы первые два столбца, относящиеся к "Score1", были черными (или, по крайней мере, темно-серыми), а вторые два столбца, относящиеся к "Score2", были белыми.Затем я хотел бы выделить первый и третий столбец как относящиеся к группе «контроль», либо изменив текстуру внутри столбца (полосы?) Или каким-либо другим способом (более толстые линии?).Любые советы о том, как я могу индивидуально настроить внешний вид стержней?

РЕДАКТИРОВАТЬ: Вот очень уродливый пример, сделанный в краске чего-то, что я себе вообразил: example plot

1 Ответ

1 голос
/ 07 мая 2019

Это должно помочь с цветной частью вашего вопроса (я удалил все для вопроса нерелевантные части кода):

ggplot(data=data_ex_long,aes(x = type_score, y = score, fill = type_score, group = group )) +  
  geom_bar(aes(col = group),stat = "summary",fun.y = "mean", size=1.5, position = position_dodge(width = 1)) +
  geom_point(aes(type_score, fill = type_score), colour="black", size = 3.5, shape = 21, position = 
               position_jitterdodge(jitter.width = 0.2, jitter.height=0.4, dodge.width=0.9), alpha = 0.8)  +
  scale_fill_manual(values = c("grey", "white", "grey", "white")) + 
  scale_color_manual(values = c("darkgreen", "steelblue"))

enter image description here

Что касается текстур, я нашел пакет под названием patternplot (доступен на кране), который может помочь с этим.Он производит ggplot2 объектов, однако синтаксис кажется странным.Вы также можете проверить github-репозиторий clauswilke / ggtextures.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...