全站目录 · 按任务查找
安装与学习路线
首页安装与环境准备选择合适的学习模块模块一『弦图』部分
1.1 输入表与字段含义1.2 生成与导入比对数据1.3 从骨架逐层添加1.4 方向、曲率与避障1.5 筛选与整理连接1.6 原始文件完整流程1.7 弦图综合展示模块二『共线性图』部分
2.1 复用弦图的数据2.2 只替换坐标系,再逐层添加2.3 跨行连接、避障与比例尺2.4 比较基因邻域2.5 局部、锚定与分段2.6 共线性综合展示模块三『质粒图』部分
3.1 DNA、注释与13个参考序列3.2 从圆圈到多层注释3.3 识别特征、引物与酶切3.4 13个质粒参考案例3.5 质粒综合实战按需查阅:数据与图层
数据与坐标导入和转换数据导入核酸和蛋白比对将蛋白区间转换为基因组坐标绘制注释与处理重叠放置和调整标签添加数据轨道设置配色、图例和主题按序列和链设置参数调整图形预览和保存图形学习地图与函数查阅
使用教程函数文档示例图集常见问题迁移到候选 API术语说明更新日志添加数据轨道
从真实 DNA 计算 GC 比例,再逐步叠加柱、滑动均值和注释带。读者应能说清每个轨道的单位、窗口与基线。
本页准备
在新的 R 会话中先运行下方代码,再按页面顺序继续。配色和排版是可选的显示设置,输入只选择需要的列。
准备代码 · 在本页运行一次
代码
library(ggchord)
feature_palette <- c(
CDS = "#993366", promoter = "#31849B", rep_origin = "#F1E51D",
primer_bind = "#A020F0", misc_feature = "#A6ACB3", protein_bind = "#31849B"
)
library(ggchord)
doc_background <- "#FFFCF5"
identity_palette <- c("#303B71", "#36537D", "#269B82", "#A5D52C", "#ECEB31")
identity_values <- c(0, 0.5, 0.8, 0.9, 1)
identity_breaks <- c(0, 50, 80, 90, 100)
doc_legend_theme <- theme(
legend.title = element_text(size = 13, face = "bold"),
legend.text = element_text(size = 11),
legend.key.width = unit(9, "mm"), legend.key.height = unit(5, "mm"),
legend.spacing.x = unit(9, "mm"), legend.spacing.y = unit(7, "mm"),
legend.margin = margin(l = 4, r = 4, unit = "mm")
)
sequence_guide <- guide_ggchord_legend(nrow = 1, theme = doc_legend_theme)
strand_guide <- guide_ggchord_legend(
nrow = 1, override.aes = list(strand = c("+", "-")), theme = doc_legend_theme
)
identity_guide <- guide_ggchord_colourbar(
position = "left", direction = "vertical",
theme = theme(
legend.key.height = unit(75, "mm"), legend.key.width = unit(5, "mm"),
legend.title = element_text(size = 13, face = "bold"),
legend.text = element_text(size = 11), legend.margin = margin(r = 7, unit = "mm")
)
)
doc_theme <- theme_ggchord_publication(
axis.text = element_text(size = 11),
axis.text.check.overlap = TRUE
) +
theme(
legend.position = "bottom",
legend.title = element_text(size = 13, face = "bold"),
legend.text = element_text(size = 11),
legend.key.width = unit(9, "mm"), legend.key.height = unit(5, "mm"),
legend.spacing.x = unit(9, "mm"), legend.spacing.y = unit(7, "mm"),
legend.box.spacing = unit(6, "mm"),
plot.background = element_rect(fill = doc_background, colour = NA),
panel.background = element_blank(),
plot.title = element_text(face = "bold", size = 18),
plot.subtitle = element_text(size = 10, colour = "#5C625A"),
plot.margin = margin(14, 18, 14, 18)
)
doc_axis <- function(coordinates = "relative") {
scale_seq_position_continuous(
coordinates = coordinates, n.breaks = 3, minor_breaks = NULL,
labels = function(x) format(x, scientific = FALSE, big.mark = ",", trim = TRUE)
)
}
library(dplyr)
data(plasmid_example_pUC19)
plasmid_seq <- plasmid_example_pUC19 |>
select(accver, length)
feature_source <- find_common_features(plasmid_example_pUC19)
features <- feature_source |>
select(accver, start, end, strand, type, anno)从实际 DNA 计算数据轨道
本例读取随包 pUC19,每 100 bp 计算 一次 GC 比例;末尾不足 100 bp 的窗口按实际碱基数计算。
代码
library(dplyr)
data(plasmid_example_pUC19)
track_seq <- plasmid_example_pUC19 |>
select(accver, length)
starts <- seq.int(1L, track_seq$length, by = 100L)
gc_fraction <- function(sequence) {
bases <- strsplit(sequence, "")[[1]]
mean(bases %in% c("G", "C"))
}
bins <- tibble(
accver = track_seq$accver,
start = starts,
end = pmin(starts + 99L, track_seq$length)
) |>
rowwise() |>
mutate(gc = gc_fraction(substr(plasmid_example_pUC19$sequence, start, end))) |>
ungroup()
head(bins)bins 的每一行是一段实际序列窗口;先检查起止位置及 gc,再把数值映射到轨道高度与颜色。
绘制 GC 比例
代码
p_tracks <- ggchord(seq_data = track_seq) +
geom_seq() +
geom_seq_center_label() +
geom_track_bar(aes(track_value = gc, track_fill = gc),
data = bins,
position = position_track("gc", width = unit(10, "mm"))
) +
scale_track_value_continuous("gc", limits = c(0, 1), unit = "GC fraction") +
scale_track_fill_gradientn("gc", colours = c("#E4F3EA", "#65B79B", "#27775C")) +
coord_circular() +
doc_theme
p_tracks
值域为 0–1,单位是比例。换成其他测量值时,要声明对应单位和有效范围。 position_track() 决定放置与物理宽度,scale_track_value_continuous() 决定数值映射, 二者不能互相替代。
同一 ID 共享同一条轨道
同名轨道上的各层共享数值域,bar 的基线也参与范围计算;它们必须声明一致的宽度和 放置方式。颜色标度按轨道 ID 独立设置。tile 表示区间类别,line 连接观测位置, bar 表示相对基线的区间值。不要把相同数值域误认为必须位于同一条轨道。
检查裁剪和数值范围
export_ggchord_layout() 的 track_registry 与 track_diagnostics 记录值域、 物理尺寸、原生位移及裁剪情况。被裁剪或省略的行不等于测量值为零。 局部视图使用 focus_ggchord_track() 并共享相同窗口。
叠加柱、滑动均值和注释带
本页准备代码已创建实际注释 features,完成上面的 GC 计算后继续:
代码
line_bins <- bins |>
transmute(
accver,
pos = floor((start + end) / 2),
gc_mean = as.numeric(stats::filter(gc, rep(1 / 3, 3), sides = 2))
) |>
filter(is.finite(gc_mean))
categories <- features |>
select(accver, start, end, type)
p_multitrack <- ggchord(seq_data = track_seq) +
geom_seq() +
geom_seq_center_label() +
geom_track_bar(aes(track_value = gc, track_fill = gc),
data = bins,
position = position_track("gc", width = unit(10, "mm"))
) +
geom_track_line(aes(track_value = gc_mean),
data = line_bins,
position = position_track("gc", width = unit(10, "mm")), colour = "#233E4A"
) +
scale_track_value_continuous("gc", limits = c(0, 1), unit = "GC fraction") +
scale_track_fill_gradientn("gc", colours = c("#E4F3EA", "#65B79B", "#27775C")) +
geom_track_tile(aes(track_fill = type),
data = categories,
position = position_track("features", order = 2, width = unit(2, "mm"))
) +
scale_track_fill_manual("features", values = feature_palette) +
coord_circular() +
doc_theme +
theme(legend.box = "vertical", legend.box.just = "left")
focused_bins <- focus_ggchord_track(bins, track_seq,
loci = tibble(accver = track_seq$accver, start = 500, end = 1500), type = "interval"
)
p_multitrack
柱和线都来自同一组实际 GC 值,线使用三个窗口的滑动均值;两端没有完整窗口时省略, 不填造观测值。折线位置是整数窗口中点。注释类型带有独立 ID 和配色。 轨道放在圆外并按顺序排列;小半径下过宽的内侧带可能折叠,此时会明确报错。
完成后检查
bins 的 gc 在 0–1 之间,每行对应一个实际窗口;最后窗口可短于 100 bp。连续色表达数值,类别带只表达注释类型,不能用它比较 GC 大小。
保存本页结果
在工作目录中保存刚刚创建的图;预览时使用相同宽高。
代码
ggsave("pUC19-tracks.png", p_multitrack, width = 9, height = 8, units = "in", dpi = 144)