参数要点
| 参数 | 默认 | 说明 |
|---|---|---|
show_violin / show_box / show_dots |
全 true | 三个图层可单独开关 |
add_sig |
false | 组间显著性标注;>2 组时降级为「首组对其余」两两比较 |
angle_x |
0 | x 轴标签角度(组名长时设 30~45) |
plot56 · 代码 2 · 图 2 · 笔记 1 · 代码库专题
长表:分组列 + 数值列(可选分面列)。
box violin dot plotbox_violin_dot_plot.png
共 2 张:点缩略图切换主图,下载按钮跟随当前主图。
图源:box_violin_dot_plot.png
从专题 README 抽取;原文顺序保留,未跑过的部分照实标注。
GBoxplot + 半小提琴 + 抖动散点叠在一起:既看分布形状,又看每个观测点,
还保留箱线图的中位数/IQR 读数。
| 参数 | 默认 | 说明 |
|---|---|---|
show_violin / show_box / show_dots |
全 true | 三个图层可单独开关 |
add_sig |
false | 组间显著性标注;>2 组时降级为「首组对其余」两两比较 |
angle_x |
0 | x 轴标签角度(组名长时设 30~45) |
长表:分组列 + 数值列(可选分面列)。
group,value,facet
Control,4.2,Day1
TreatA,6.8,Day1render_plot method_id="plot56"
arguments: {"csv_path": "your.csv",
"columns": {"group": "group", "value": "value"}}gghalves::geom_half_point 在 ggplot2 4.0.3 下彻底损坏:draw_group 里transformation$compute_layer() 崩在 argument "layout" is missing。half_* 中只有 point 有问题,violin/boxplot 正常 —— 所以散点用 geom_jitter。rows 里的数值经 CSV 往返会被 R 的 read.csv 类型推断成字符,MsTt模板/241028_box_violin_dot 云雨图/。
2 个源码文件,按目录顺序;本机绝对路径已替换为 ~。 代码可复制,但需要按自己的数据改路径与参数。
---
title: "241028_box_violin_dot 云雨图"
output: html_document
date: "2025-04-10"
editor_options:
chunk_output_type: console
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
# 创建示例数据
```{r}
# 创建示例数据
set.seed(123) # 设置随机种子,确保结果可复现
# 为四种不同细菌创建数据,每种有不同的分布特征
subtills_data <- rnorm(20, mean = 15, sd = 3) # 较高平均值
cereus_data <- rnorm(20, mean = 10, sd = 2) # 中等平均值
megaterium_data <- rnorm(20, mean = 8, sd = 2) # 较低平均值
circulans_data <- rnorm(20, mean = 5, sd = 1.5) # 最低平均值
# 确保数据为正数并取整(因为这是计数数据)
subtills_data <- round(pmax(subtills_data, 1))
cereus_data <- round(pmax(cereus_data, 1))
megaterium_data <- round(pmax(megaterium_data, 1))
circulans_data <- round(pmax(circulans_data, 1))
# 创建宽格式数据框
df <- data.frame(
subtills = subtills_data,
cereus = cereus_data,
megaterium = megaterium_data,
circulans = circulans_data
)
# 保存为CSV文件
write.csv(df, 'BGCs_numbers_per_genomes.csv', row.names = FALSE)
```
# 读取数据并绘制云雨图
```{r}
# 加载必要的包
library(ggplot2)
library(tidyr)
library(dplyr)
library(gghalves) # 用于半小提琴图
library(ggsignif) # 用于显著性标记
# 读入数据
df <- read.csv('BGCs_numbers_per_genomes.csv', header = TRUE)
# 转换成长数据格式
df1 <- gather(df) %>%
rename("Clade" = key, "value" = value)
# 设置颜色
my_color = c('#84a354', '#b15053', '#cf9a2c', '#7d7c7f')
# 排序
variable <- c('subtills', 'cereus', 'megaterium', 'circulans')
my_sort <- factor(variable, levels = variable)
# 显著性检验比较组合
my_comparisons <- list(c("subtills", "cereus"),
c("cereus", "megaterium"),
c("megaterium", "circulans"))
# 创建云雨图
ggplot(df1, aes(factor(Clade, levels = my_sort), value)) +
# 半小提琴图部分
geom_half_violin(aes(fill = factor(Clade, levels = my_sort)),
side = 'r',
position = position_nudge(x = .25, y = 0),
cex = 0.8) +
# 箱线图部分
geom_boxplot(fill = "white",
width = 0.1, cex = 0.8,
position = position_nudge(x = .25, y = 0)) +
# 散点部分
geom_jitter(aes(color = factor(Clade, levels = my_sort)),
size = 1.5,
position = position_jitter(width = 0.1)) +
# 显著性标记
geom_signif(comparisons = my_comparisons,
map_signif_level = function(p) sprintf("p = %.2g", p),
step_increase = 0.05,
y_position = c(23, 20, 17),
textsize = 5, vjust = -0.2,
tip_length = 0) +
# 设置颜色
scale_fill_manual(values = my_color) +
scale_color_manual(values = my_color, guide = 'none') +
# 设置主题和标签
theme_test(base_size = 15) +
labs(x = NULL, y = 'No.of BGCs / genome') +
scale_y_continuous(limits = c(0, 25)) +
theme(legend.title = element_blank(),
axis.title = element_text(size = 21, face = "bold"),
axis.text = element_text(color = 'black', size = 17, face = "bold"),
axis.text.x = element_text(face = 'bold.italic'),
legend.text = element_text(size = 14, face = "bold.italic"))
# 保存图形
ggsave("box_violin_dot_plot.png", width = 8, height = 6, dpi = 300)
```
---
title: "241028_box_violin_dot 云雨图"
output: html_document
date: "2025-04-10"
editor_options:
chunk_output_type: console
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
# 创建示例数据
```{r}
# 创建示例数据
set.seed(123) # 设置随机种子,确保结果可复现
# 为四种不同细菌创建数据,每种有不同的分布特征
subtills_data <- rnorm(20, mean = 15, sd = 3) # 较高平均值
cereus_data <- rnorm(20, mean = 10, sd = 2) # 中等平均值
megaterium_data <- rnorm(20, mean = 8, sd = 2) # 较低平均值
circulans_data <- rnorm(20, mean = 5, sd = 1.5) # 最低平均值
# 确保数据为正数并取整(因为这是计数数据)
subtills_data <- round(pmax(subtills_data, 1))
cereus_data <- round(pmax(cereus_data, 1))
megaterium_data <- round(pmax(megaterium_data, 1))
circulans_data <- round(pmax(circulans_data, 1))
# 创建宽格式数据框
df <- data.frame(
subtills = subtills_data,
cereus = cereus_data,
megaterium = megaterium_data,
circulans = circulans_data
)
# 保存为CSV文件
write.csv(df, 'BGCs_numbers_per_genomes.csv', row.names = FALSE)
```
# 读取数据并绘制云雨图
```{r}
# 加载必要的包
library(ggplot2)
library(tidyr)
library(dplyr)
library(gghalves) # 用于半小提琴图
library(ggsignif) # 用于显著性标记
# 读入数据
df <- read.csv('BGCs_numbers_per_genomes.csv', header = TRUE)
# 转换成长数据格式
df1 <- gather(df) %>%
rename("Clade" = key, "value" = value)
# 设置颜色
my_color = c('#84a354', '#b15053', '#cf9a2c', '#7d7c7f')
# 排序
variable <- c('subtills', 'cereus', 'megaterium', 'circulans')
my_sort <- factor(variable, levels = variable)
# 显著性检验比较组合
my_comparisons <- list(c("subtills", "cereus"),
c("cereus", "megaterium"),
c("megaterium", "circulans"))
# 创建云雨图
ggplot(df1, aes(factor(Clade, levels = my_sort), value)) +
# 半小提琴图部分
geom_half_violin(aes(fill = factor(Clade, levels = my_sort)),
side = 'r',
position = position_nudge(x = .25, y = 0),
cex = 0.8) +
# 箱线图部分
geom_boxplot(fill = "white",
width = 0.1, cex = 0.8,
position = position_nudge(x = .25, y = 0)) +
# 散点部分
geom_jitter(aes(color = factor(Clade, levels = my_sort)),
size = 1.5,
position = position_jitter(width = 0.1)) +
# 显著性标记
geom_signif(comparisons = my_comparisons,
map_signif_level = function(p) sprintf("p = %.2g", p),
step_increase = 0.05,
y_position = c(23, 20, 17),
textsize = 5, vjust = -0.2,
tip_length = 0) +
# 设置颜色
scale_fill_manual(values = my_color) +
scale_color_manual(values = my_color, guide = 'none') +
# 设置主题和标签
theme_test(base_size = 15) +
labs(x = NULL, y = 'No.of BGCs / genome') +
scale_y_continuous(limits = c(0, 25)) +
theme(legend.title = element_blank(),
axis.title = element_text(size = 21, face = "bold"),
axis.text = element_text(color = 'black', size = 17, face = "bold"),
axis.text.x = element_text(face = 'bold.italic'),
legend.text = element_text(size = 14, face = "bold.italic"))
```
这个专题已经做成确定性工具,调用后直接返回图片, 不需要 AI 现写代码。