前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ggplot2优雅绘制阴影填充图

ggplot2优雅绘制阴影填充图

作者头像
R语言数据分析指南
发布2024-02-23 11:05:09
2040
发布2024-02-23 11:05:09
举报
文章被收录于专栏:R语言数据分析指南

欢迎关注R语言数据分析指南

❝本节来介绍如何使用ggpattern包自定义图案来进行阴影填充。整个过程仅参考,希望对各位观众老爷能有所帮助。❞

加载R包

代码语言:javascript
复制
library(tidyverse)  
library(ggsci)  
# install.packages("remotes")
#remotes::install_github("coolbutuseless/ggpattern")
library(ggpattern) 
library(gapminder)  

数据清洗

代码语言:javascript
复制
df <- gapminder %>%
  filter(year %in% c(1957,2002,2007), !continent %in% c("Oceania","Africa")) %>%
  select(country,year,lifeExp,continent) %>%
  mutate(paired = rep(1:(n()/3), each=3), year=factor(year))

定义填充函数

代码语言:javascript
复制
# 自定义一个图案填充函数,用于在ggpattern中使用
tiling3_pattern <- function(params, boundary_df, aspect_ratio, legend = FALSE) {
  # 使用do.call动态调用patternGrob函数,并直接构建参数列表
  do.call(gridpattern::patternGrob, c(
    list(pattern = "polygon_tiling",  # 设置图案类型为多边形平铺
         x = boundary_df$x,  # 设置图案的x坐标
         y = boundary_df$y,  # 设置图案的y坐标
         id = boundary_df$id,  # 设置图案的ID
         prefix = "",  # 设置前缀(此处为空)
         # 计算平均颜色并设置pattern_fill参数
         pattern_fill = c(params$fill, gridpattern::mean_col(params$fill, params$pattern_fill), params$pattern_fill)),
    # 从params中提取以"pattern_"开头的参数
    as.list(params)[grep("^pattern_", names(params))]
  ))
}

# 设置ggpattern的图案函数选项
options(ggpattern_geometry_funcs = list(tiling3 = tiling3_pattern))

数据可视化

代码语言:javascript
复制
df %>%
  ggplot(aes(year, lifeExp)) +  # 设置绘图的aes,包括x轴为年份,y轴为预期寿命
  stat_boxplot(aes(ymin = ..lower.., ymax = ..upper..), outlier.shape = NA, width=0.5) +  # 绘制箱线图的主体部分
  stat_boxplot(geom = "errorbar", aes(ymin = ..ymax..), width=0.2, size=0.35) +  # 绘制箱线图的上边缘
  stat_boxplot(geom = "errorbar", aes(ymax = ..ymin..), width=0.2, size=0.35) +  # 绘制箱线图的下边缘
  geom_boxplot_pattern(aes(pattern_type=year, fill=year),  # 应用图案填充
                       pattern = 'tiling3',  # 使用自定义的tiling3图案
                       pattern_angle = 45,  # 设置图案角度
                       pattern_spacing = 0.045, outlier.shape = NA, width=0.5) +  # 设置图案间距
  facet_wrap(.~continent, nrow=1) +  # 按大陆进行面板分割
  scale_fill_npg() +  # 应用NPG颜色主题
  scale_pattern_type_manual(values = c('hexagonal', 'rhombille', 'pythagorean')) +  # 手动设置图案类型
  labs(x=NULL, y=NULL) +  # 移除x轴和y轴的标签
  guides(fill=guide_legend(override.aes = list(size=8))) +  # 自定义图例
  theme_classic() +  # 使用经典主题
  theme(legend.background = element_blank(),  # 移除图例背景
        legend.key = element_blank(),  # 移除图例键的背景
        legend.title = element_blank(),  # 移除图例标题
        panel.background = element_blank(),  # 移除面板背景
        panel.grid.major = element_blank(),  # 移除主要网格线
        panel.grid.minor = element_blank(),  # 移除次要网格线
        panel.spacing.x=unit(0,"cm"),  # 设置面板间的x轴间距
        axis.text.x=element_blank(),  # 移除x轴文本
        axis.ticks.x = element_blank(),  # 移除x轴刻度
        strip.text = element_text(color="black", face="bold"),  # 设置面板标题样式
        strip.background = element_rect(fill="grey90", colour = NA),  # 设置面板标题背景
        plot.background = element_blank(),  # 移除绘图背景
        plot.margin=unit(c(0.5,0.5,0.5,0.5), units="cm"))  # 设置绘图边距
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言数据分析指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 欢迎关注R语言数据分析指南
  • 数据清洗
  • 定义填充函数
  • 数据可视化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档