题记:一个简单但富有特色的柱状图
本文为ggplot2绘制一个特别的柱状图(来自公众号:R语言数据分析指南)的学习笔记,仅供学习交流使用,如有侵权,请联系删除。
核心操作:
aes(alpha=order_rev %in% c(1:3,15:18))
rm(list = ls())
library(tidyverse)
library(ggtext)
library(ggsci)
castways <- readr::read_csv("D:/jianshu/R-barplot-2106/castaways.txt")
head(castways)
## # A tibble: 6 x 18
## season_name season full_name castaway age city state personality_type day
## <chr> <dbl> <chr> <chr> <dbl> <chr> <chr> <chr> <dbl>
## 1 Survivor: ~ 40 Natalie ~ Natalie 33 Edge~ New ~ ESTP 2
## 2 Survivor: ~ 40 Amber Ma~ Amber 40 Pens~ Flor~ ISFP 3
## 3 Survivor: ~ 40 Danni Bo~ Danni 43 Shaw~ Kans~ ENFJ 6
## 4 Survivor: ~ 40 Ethan Zo~ Ethan 45 Hill~ New ~ ISFP 9
## 5 Survivor: ~ 40 Tyson Ap~ Tyson 39 Mesa Ariz~ ESTP 11
## 6 Survivor: ~ 40 Rob Mari~ Rob 43 Pens~ Flor~ ESTJ 14
## # ... with 9 more variables: order <dbl>, result <chr>, jury_status <chr>,
## # original_tribe <chr>, swapped_tribe <chr>, swapped_tribe2 <chr>,
## # merged_tribe <chr>, total_votes_received <dbl>, immunity_idols_won <dbl>
df <- castways %>%
select(season,personality_type,order) %>%
dplyr::filter(!is.na(personality_type)) %>%
separate(personality_type,
into = c("mind","energy","nature","tactics"),
sep = 1:3) %>%
group_by(season) %>%
mutate(order_rev=pmin(18,max(order)-order+1)) %>%
ungroup()
df %>%
count(order_rev,mind) %>%
ggplot(aes(order_rev,n,fill=mind,col=mind,alpha=order_rev %in%c(1:3,15:18)))+
geom_col(position = "dodge")+
scale_x_continuous(breaks = 1:18,labels = c(1:17,">18"))+
scale_fill_nejm()+
scale_color_nejm()+
scale_alpha_discrete()+
theme_light()+
labs(x=NULL)+
scale_y_continuous(expand = c(0,0))+
theme(axis.title.y = element_blank(),
axis.ticks.y = element_blank(),
plot.subtitle = element_markdown(size=16),
plot.title=element_text(size=20),
panel.grid.minor = element_blank(),
axis.title = element_text(size=12),
axis.text = element_text(size = 12),
legend.position = "none")

参考资料:
ggplot2绘制一个特别的柱状图(来自公众号:R语言数据分析指南)
网友评论