library(tidyverse)
library(showtext)
showtext_auto(TRUE)
library(patchwork)

サンプルデータを用意する。

set.seed(1234)
data.frame(地域=factor(sample(x = c("A","B","C","D"),size = 115,replace = TRUE)),
           回答=factor(sample(x = c("はい","いいえ","どちらでもない"),size = 115,replace = TRUE,prob = c(0.5,0.3,0.2)),levels=c("はい","いいえ","どちらでもない"))) -> .dd 
.dd %>% head()
##   地域           回答
## 1    D どちらでもない
## 2    D どちらでもない
## 3    B           はい
## 4    B           はい
## 5    A         いいえ
## 6    D         いいえ
summary(.dd)
##  地域               回答   
##  A:22   はい          :51  
##  B:30   いいえ        :37  
##  C:28   どちらでもない:27  
##  D:35

度数分布

.dd %>% count(回答) %>% knitr::kable()
回答 n
はい 51
いいえ 37
どちらでもない 27

割合の計算

.dd %>% count(回答) %>% mutate(rate = round(100*n/sum(n),1)) %>% knitr::kable()
回答 n rate
はい 51 44.3
いいえ 37 32.2
どちらでもない 27 23.5

グラフ表示

.dd %>% count(回答) %>% mutate(rate = round(100*n/sum(n),1)) %>% ggplot(aes(x=回答,y=n)) + geom_col()

.dd %>% filter(地域=="A") %>% count(回答) %>% mutate(rate = round(100*n/sum(n),1)) %>% ggplot(aes(x=回答,y=n)) + geom_col() + ggtitle("地域A回答") -> p01
.dd %>% filter(地域=="B") %>% count(回答) %>% mutate(rate = round(100*n/sum(n),1)) %>% ggplot(aes(x=回答,y=n)) + geom_col() + ggtitle("地域B回答") -> p02
.dd %>% filter(地域=="C") %>% count(回答) %>% mutate(rate = round(100*n/sum(n),1)) %>% ggplot(aes(x=回答,y=n)) + geom_col() + ggtitle("地域C回答") -> p03
.dd %>% filter(地域=="D") %>% count(回答) %>% mutate(rate = round(100*n/sum(n),1)) %>% ggplot(aes(x=回答,y=n)) + geom_col() + ggtitle("地域D回答") -> p04
p01 + p02 + p03 + p04+ plot_layout(nrow = 2, byrow = TRUE)

.dd %>% group_by(地域) %>% count(回答) %>% ggplot(aes(x=地域,y=n)) + geom_col() -> p11
.dd %>% group_by(地域) %>% count(回答) %>% ggplot(aes(x=地域,y=n,fill=回答)) + geom_col() -> p12
.dd %>% group_by(地域) %>% count(回答) %>% ggplot(aes(x=地域,y=n,fill=回答)) + geom_bar(stat="identity",position = "fill") -> p13
.dd %>% group_by(地域) %>% count(回答) %>% ggplot(aes(x=地域,y=n,fill=回答)) + geom_bar(stat="identity",position = "dodge") -> p14
p11 + p12 + p13 + p14 + plot_layout(nrow = 2, byrow = TRUE)

RColorBrewer::display.brewer.all()

library(RColorBrewer)
## Warning: package 'RColorBrewer' was built under R version 4.0.5
col <- brewer.pal(3,"Set3")
.dd %>% group_by(地域) %>% count(回答) %>% ggplot(aes(x=地域,y=n)) + geom_col() -> p11
.dd %>% group_by(地域) %>% count(回答) %>% ggplot(aes(x=地域,y=n,fill=回答)) + geom_col() + scale_fill_manual(values = col) -> p12
.dd %>% group_by(地域) %>% count(回答) %>% ggplot(aes(x=地域,y=n,fill=回答)) + geom_bar(stat="identity",position = "fill") -> p13
.dd %>% group_by(地域) %>% count(回答) %>% ggplot(aes(x=地域,y=n,fill=回答)) + geom_bar(stat="identity",position = "dodge") -> p14
p11 + p12 + p13 + p14 + plot_layout(nrow = 2, byrow = TRUE,guides = 'collect')

.dd %>% group_by(地域) %>% count(回答) %>% ggplot(aes(x=地域,y=n)) + geom_col() -> p11
.dd %>% group_by(地域) %>% count(回答) %>% ggplot(aes(x=地域,y=n,fill=回答)) + geom_col() + scale_fill_manual(values = col) + coord_flip() -> p12
.dd %>% group_by(地域) %>% count(回答) %>% ggplot(aes(x=地域,y=n,fill=回答)) + geom_bar(stat="identity",position = "fill") + coord_flip() + scale_x_discrete(limits=rev(levels(.dd$地域)))-> p13
.dd %>% group_by(地域) %>% count(回答) %>% ggplot(aes(x=地域,y=n,fill=回答)) + geom_bar(stat="identity",position = "dodge") + coord_flip() -> p14
p11 + p12 + p13 + p14 + plot_layout(nrow = 2, byrow = TRUE,guides = 'collect')

.dd %>% group_by(地域) %>% count(回答) %>% pivot_wider(names_from = 回答,values_from = n) %>% column_to_rownames("地域") %>% as.matrix() -> .tbl

library(grid)
#library(vcd)
fill_matrix="lightgreen"
cname <- colnames(.tbl)
rname <- rownames(.tbl)  
dimnames(.tbl) <- list(地域= rname,回答=cname)
.tbl %>% vcd::mosaic(gp=gpar(fill=fill_matrix,col=0))

fill_matrix <- matrix(rep(brewer.pal(3,"Pastel1"),4),byrow = TRUE,4,3)
.tbl %>% vcd::mosaic(gp=gpar(fill=fill_matrix,col=0),labeling = vcd::labeling_values)