ggplot2绘制半透明云雨图

2023-09-11 08:46:14 浏览数 (2)

❝本节来介绍如何使用「ggplot2」来批量绘制云雨图,下面小编就通过一个案例来进行展示数据为随意构建无实际意义仅作图形展示用,希望各位观众老爷能够喜欢,❞

加载R包

代码语言:javascript复制
install.packages("pacman")
pacman::p_load(tidyverse,ggtext,camcorder,scales,ggsci,ggdist,gghalves)

df <- read_tsv("data.tsv")

数据清洗

代码语言:javascript复制
spam <- df %>% mutate(yesno = ifelse(yesno == 'y', "Yes", "No")) %>%
  pivot_longer(cols = -yesno, names_to = "category") 

数据可视化

代码语言:javascript复制
spam %>%
  filter(value > 0, value < 3000) %>%  # 过滤数据,只保留value在0到3000之间的数据
  ggplot(aes(x = as_factor(yesno), y = value, color = yesno, fill = yesno))    # 创建ggplot图,设置x轴为yesno的因子,y轴为value,颜色和填充都基于yesno
  geom_boxplot(width = 0.2,fill  = "transparent",size  = 0.4,outlier.shape = NA)    # 添加箱线图,设置宽度、填充颜色、线条大小和异常值形状
  geom_half_violin(alpha = 0.5, side = 'top')   # 添加半小提琴图,设置透明度和显示的一侧
  geom_half_point(side  = "l",alpha = 0.1, size  = 0.6)    # 添加半点图,设置显示的一侧、透明度和大小
  scale_x_discrete()    # 设置x轴为离散刻度
  scale_y_log10()    # 设置y轴为对数刻度
  scale_fill_npg()    # 设置填充颜色
  scale_color_npg(guide = "none")    # 设置颜色并隐藏图例
  coord_flip(clip = 'off')    # 翻转坐标轴并关闭裁剪
  labs(x=NULL,y= "Number of events (log10 scale)")    # 设置x轴和y轴的标签
  facet_wrap(~ category, scales = "free")    # 按category分面显示,并允许每个面的刻度自由变化
  theme_minimal()    # 使用简洁主题
  theme(  # 自定义主题设置
    plot.background = element_rect(fill = "white", color = "white"),  # 设置图背景颜色
    panel.background= element_rect(fill = "white", color = "white"),  # 设置面板背景颜色
    axis.ticks.y = element_blank(),  # 隐藏y轴刻度
    plot.margin= margin(t = 10, r = 10, b = 10, l = 10),  # 设置图边距
    axis.title.x= element_text(size = 10,face='bold',margin=margin(t=10)),  # 设置x轴标题样式
    axis.text = element_text(size = 10,color="black"),  # 设置轴文本样式
    axis.line.x = element_line(color = "black"),  # 设置x轴线条颜色
    panel.grid.major.y= element_line(linetype="dotted",linewidth=0.3,color='gray'),  # 设置y轴主要网格线样式
    panel.grid.minor.y= element_blank(),  # 隐藏y轴次要网格线
    panel.grid.major.x= element_blank(),  # 隐藏x轴主要网格线
    panel.grid.minor.x= element_blank(),  # 隐藏x轴次要网格线
    legend.position = "non",  # 设置图例位置
    strip.text= element_textbox(size= 10,face= 'bold',color= "grey20",  # 设置分面标题样式
                                hjust= 0.5,halign= 0.5,r= unit(5, "pt"),
                                width = unit(5.5, "npc"),
                                padding = margin(3, 0,3, 0),
                                margin= margin(1,1,1,1)),
    panel.spacing=unit(1,'lines')  # 设置面板间距
  )

0 人点赞