You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整trackViewer lollipopPlot图例的位置与方向?

解决trackViewer lolliplot堆叠SNP图例侧边精准对齐问题

核心思路

lolliplot的堆叠层级由stack.factor的顺序决定,我们可以直接提取绘图时的堆叠位置参数,将图例元素与对应层级的y坐标绑定,彻底避免手动估算viewport坐标的误差。

优化实现代码

library(trackViewer)
library(grid)

# 1. 准备数据
chromosome.feature.test <- GRanges("test", IRanges(c(1), width=c(500), names=c("test")))
test.snps <- GRanges("test", IRanges(c(10, 10, 25, 150, 10, 450), width=1, 
                                     names=c("C10A", "C10A", "A25G", "T150C", "C10A", "T450G"),
                                     stack.factor=c("test_snp_1", "test_snp_2", "test_snp_2", "test_snp_2", "test_snp_3", "test_snp_3")))

samples.palette.test <- list("#E69F00", "#56B4E9", "#009E73")
names(samples.palette.test) <- c("test_snp_1", "test_snp_2", "test_snp_3")
test.snps$color <- samples.palette.test[test.snps$stack.factor]

# 2. 绘制无默认图例的堆叠图
p <- lolliplot(test.snps, chromosome.feature.test, type="pie.stack", 
               legend=NULL, dashline.col="black")

# 3. 获取堆叠层级的位置信息
stack_elements <- p@tracks[[1]]@dat
stack_levels <- unique(stack_elements$stack.factor)
# 按堆叠顺序排序(底层到上层)
stack_levels <- stack_levels[order(stack_levels)]

# 计算每个层级的中心y坐标(基于绘图区域相对比例)
n_levels <- length(stack_levels)
y_coords <- sapply(1:n_levels, function(i) (i - 0.5)/n_levels)
names(y_coords) <- stack_levels

# 4. 绘制精准对齐的侧边图例
legend_x <- 0.92  # 图例x方向位置(0-1,靠近1为右侧)

# 逐个绑定层级坐标绘制图例项
for (i in seq_along(stack_levels)) {
  level <- stack_levels[i]
  # 绘制彩色圆点
  grid.points(x=unit(legend_x, "npc"), y=unit(y_coords[level], "npc"), 
              pch=21, size=unit(5, "mm"), 
              gp=gpar(fill=samples.palette.test[[level]], col="gray20"))
  # 绘制对应标签
  grid.text(label=level, x=unit(legend_x + 0.03, "npc"), y=unit(y_coords[level], "npc"), 
            just="left", gp=gpar(fontsize=10))
}

关键细节说明

  • 关闭默认图例(legend=NULL)避免冲突,同时减少绘图区域的占用
  • 通过p@tracks[[1]]@dat直接读取绘图底层数据,确保堆叠层级的准确性
  • 利用层级数量计算相对y坐标,无需手动调整固定数值,适配任意数量的堆叠样本
  • 可灵活调整legend_x的值来改变图例左右位置,用unit()的其他单位(如cm)微调尺寸

内容的提问来源于stack exchange,提问作者KeyboardCat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:56:35