ggplot2:云雨图

准备工作

加载使用的包

library(tidyverse)
library(gghalves)

数据集

这里我们使用 iris 这个数据集,先看一下数据集的格式

iris 是R 语言中自带的数据集,可以在R中输入 data() 查看所有数据集

head(iris)

在这里插入图片描述

从变量的角度来说,该数据集有两个重复测量变量(被试内变量),一个被试间变量,目前的数据结构是无法直接使用ggplot绘图的,因此我们需要先将数据进行 宽转长 的操作

data <- iris %>% 
  # 使用 pivot_longer 函数进行宽转长
  pivot_longer(names_to = "condition",values_to = "value", 1:4) %>% 
  # 将生成的变量拆分成两个变量var1 和 var2
  mutate( var1 = case_when(
    condition == "Sepal.Length" ~ "Sepal",
    condition == "Sepal.Width" ~ "Sepal",
    condition == "Petal.Length" ~ "Petal",
    condition == "Petal.Width" ~ "Petal"
  )) %>%   
  mutate( var2 = case_when(
    condition == "Sepal.Length" ~ "Length",
    condition == "Sepal.Width" ~ "Width",
    condition == "Petal.Length" ~ "Length",
    condition == "Petal.Width" ~ "Width"
  )) 


# 再查看生成的数据格式
head(data)

在这里插入图片描述

绘图

考虑到数据结构共有三个变量,假定我们最想要比较的差异是Species, 因此我们将另外两个变量(var1,var2)采用分面的方式呈现

 # 绘制画布
 p <- ggplot(data, aes(x = var1, y = value)) +
  theme_bw() +
  facet_grid(Species~var2)
p

在这里插入图片描述

逐步添加元素


# 添加点图
p + 
  geom_point(data = data, aes( fill = var1, color = var1),
             position = position_jitterdodge(jitter.width = .2, jitter.height = .1,dodge.width = 0.6), 
             size = 3, shape = 20, alpha = 0.6)

在这里插入图片描述

# 添加箱图
p + 
  geom_point(data = data, aes( fill = var1, color = var1),
             position = position_jitterdodge(jitter.width = .2, jitter.height = .1,dodge.width = 0.6), 
             size = 3, shape = 20, alpha = 0.6) +
  # 同样将颜色映射到箱体上,后面的参数可用于修改箱体外观和大小
  geom_boxplot( aes( fill = var1, color = var1),position = position_nudge(x = 0.2), width = .1, alpha = .3, outlier.shape = NA)


在这里插入图片描述

# 添加分半小提琴图
p + 
  geom_point(aes( fill = var1, color = var1), 
                position = position_jitterdodge(jitter.width = .2, jitter.height = .1,dodge.width = 0.6), 
                 size = 3, shape = 20, alpha = 0.6) +
  geom_boxplot( aes( fill = var1, color = var1),position = position_nudge(x = -0.2), 
                width = .1, alpha = .3, outlier.shape = NA) +
  # 这里我们需要用到gghalves包中的geom_half_violin 函数画分半小提琴图
  geom_half_violin(aes(fill = var1, color = var1) ,position = position_nudge(x = -.25), 
                    adjust = 1, trim = T, alpha = .5, colour = NA, side = "l")

在这里插入图片描述

以上的图就已经把所有基本元素都放置在画布上了,接下来就是修改绘图细节,可以按照论文发表期刊的要求修改


p + 
  geom_point(data = data, aes( fill = var1, color = var1),
             position = position_jitterdodge(jitter.width = .2, jitter.height = .1,dodge.width = 0.6), 
             size = 3, shape = 20, alpha = 0.6) +
  geom_boxplot( aes( fill = var1, color = var1),position = position_nudge(x = -0.2), width = .1, alpha = .3, outlier.shape = NA) +
  geom_half_violin(aes(fill = var1, color = var1) ,position = position_nudge(x = -.25), 
                    adjust = 1, trim = T, alpha = .5, colour = NA, side = "l")+
  #以下很多操作也可以通过其他的函数达到相同的目的,在这里仅举例我最常使用的
  ## 通过*labs*函数修改坐标轴标签
  labs(y = "Value", x = "Location") +
  ## 通过* coord_cartesian*函数修改坐标轴范围
  coord_cartesian(ylim = c(0,10))+
  ## 通过theme函数设置图形界面
  ### 在这部分中,theme主要是通过四个函数来完成定义的
  #### element_line() 定义线条
  #### element_text() 定义文本
  #### element_rect() 定义边界
  #### element_blank() 定义空集
  theme(axis.title.x = element_text(size = 15),
        axis.title.y = element_text(size = 15),
        axis.text.x = element_text(size = 12),
        axis.text.y = element_text(size = 12),
        strip.text.x = element_text(size = 12),
        legend.position = "none",
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank()
        ) +
  ## 通过 scale 系列函数自定义标度
  scale_fill_brewer(palette = "Dark2")+
  scale_color_brewer(palette = "Dark2")


在这里插入图片描述
这样,一幅简单的图就基本完成啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言蹊1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值