本文主要是介绍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 和 var2mutate( 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")
这样,一幅简单的图就基本完成啦!
这篇关于ggplot2:云雨图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!