ggplot2:云雨图

阅读: 评论:0

ggplot2:云雨图

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), = element_text(size = 12), = element_text(size = 12), = element_text(size = 12),legend.position = "none",id.major = element_blank(),id.minor = element_blank()) +## 通过 scale 系列函数自定义标度scale_fill_brewer(palette = "Dark2")+scale_color_brewer(palette = "Dark2")


这样,一幅简单的图就基本完成啦!

本文发布于:2024-01-29 03:03:36,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170646862112238.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:云雨
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23