【R】ggpatternでグラフ要素にパターンやテクスチャをつける

複数要因に複数の水準があると、色だけでなくパターンやテクスチャで区別したくなります。
library(dplyr)
library(ggplot2)
library(ggpattern)
library(RColorBrewer)

m <- ToothGrowth %>%
aggregate(len~supp+dose,.,FUN=mean)
errs <- ToothGrowth %>%
aggregate(len~supp+dose,.,FUN=function(x) sd(x)/sqrt(length(x)))
m$dose<-as.factor(m$dose)
m['err']<-errs[,3]

> m
  supp dose   len       err
1   OJ  0.5 13.23 1.4102837
2   VC  0.5  7.98 0.8685620
3   OJ    1 22.70 1.2367520
4   VC    1 16.77 0.7954104
5   OJ    2 26.06 0.8396031
6   VC    2 26.14 1.5171757

pcols<-brewer.pal(3, 'Set2')[2:1]	#パターンの色(supp2色)
fillcol <- c("orange","palegreen")	#棒グラフの背景色(supp2色)

g<-ggplot(data=m,aes(x=supp,y=len,fill=supp,pattern=dose,colour=supp))+
	geom_bar_pattern(stat='identity',
		pattern_color = c(pcols, pcols, pcols),	# supp2色 × dose3
		pattern_fill = c(pcols, pcols, pcols),
		aes(fill=supp),
		position='dodge'
	)+
	geom_errorbar(aes(ymin=len-err,ymax=len+err,width=0.4),position = position_dodge(0.9),color='black')+
	scale_pattern_manual(name='Dose (mg/day)',values = c('0.5' = "none",'1' = "stripe",'2' = "crosshatch"))+
	scale_fill_manual(values=c(OJ=fillcol[1],VC=fillcol[2]))+
	scale_color_manual(values=c(OJ=pcols[1],VC=pcols[2]))+
	guides(pattern = guide_legend(override.aes = list(fill = "white",colour='black')),	#パターンのみを凡例に残す。
		colour="none",fill = "none")+
	theme_bw()+
	labs(x='Supplements',y='Length of odontoblasts in 60 guinea pigs')
ggsave('ToothGrowth_2x3_testplot.png', g, width=5,height=5)
ggpattern1


2022.01.23 初版

↑ PAGE TOP