【问题标题】:Adding transparent circles of defined radius to existing plot in R将定义半径的透明圆圈添加到R中的现有绘图
【发布时间】:2012-09-08 18:59:42
【问题描述】:

我有一个带有 X 和 Y 坐标值的 data.frame。 X 轴是位置信息,Y 轴是对数比率值。这些点是基于对数比率值着色的(绿色 > 0.25、-0.25

圆形二元分割算法以对数比率分割变化,由水平蓝线表示。在附图中可以看到几个片段,大多数接近 log2 为 0。靠近图左端的是小的蓝色片段,log 值接近 0.58,还有一个小得多(几乎看不见,因为周围的红点) 对数值接近 -1 的蓝色段(图的右边缘)。我在另一个 data.frame 中有这些蓝色段的 x 和 y 坐标。我想实现以下目标

1) 在 -0.70 0.50 上方添加包围这些蓝色线段的圆圈。这有助于识别可能遗漏的小部分 2) 使用 alpha 值向这些圆圈添加透明颜色,以便看到蓝色段 3) 圆圈的大小取决于这些蓝色线段的宽度。

我也对在 -0.70 0.5 处高亮这些蓝色段的其他想法持开放态度。也许我应该禁止绘制找到这些蓝色段的点(绿色和红色)。我正在使用 R 来制作这个情节。感谢您的帮助。

这是使用的代码:有两个 df 对象。 df(X) 包含 Chr.no、Chr.Start、Chr.End 和 Log2。 df(Y) 类似,但 col.name 不同,例如 loc。开始,然后定位。结尾。而不是 Log2,它们有 seg.mean 值

for (i in 1:25)  {       # Plot each chromosome separately

  plot(X[which(X$Chr.No ==i),"Chr.Start"], X[which(X$Chr.No ==i),"Log2"], ylim=c(-4.0,4.0), col=X[which(X$Chr.No ==i),"Color"], pch=16, cex=0.4, ylab="Log2", xlab="Genomic Position", main= paste("KCL:180522_SS", "chromosome", i, sep=" "))
  abline(h=c(-1,0,log2(3/2)), lty=2, col="chocolate")
  xleft  = Y[which(Y$Chr.No ==i),"loc.start"]            # Left limit of the blue horizontal line
  xright = Y[which(Y$Chr.No ==i),"loc.end"]              # Right limit of the blue horizontal line
  ybottom= Y[which(Y$Chr.No ==i),"seg.mean"] - 0.010     # Adding thickness to the "seg.mean"
  ytop   = Y[which(Y$Chr.No ==i),"seg.mean"] + 0.010     # Adding thickness to the "seg.mean"
  rect(xleft=xleft, ybottom=ybottom, xright=xright, ytop=ytop, col="blue", border="blue")
}

@Dwin 是的,“Color”是“lightgreen”、“grey”和“red”的向量。这些是 plot(x,y) 中 pch=16 的颜色信息。我不想修改 pch=16 点。水平“蓝色”线段由“矩形”添加,它们跨越许多 pch=16 点。正如您所看到的,有许多“蓝色”段,一些非常小,一些长度很大,它们的 log2 值不同。这就是我想用一个填充的透明圆圈来绑定的。不是所有的“蓝色”段,而是只有“蓝色”段 0.25 0.25 的段。在这个图中,较小的“蓝色”部分靠近情节的边缘,因为它们很难被发现,我想用一个实心圆圈围绕它们来突出它们。如果我仍然不清楚,请告诉我。谢谢

【问题讨论】:

  • 用于制作此图的代码可能会提供有关使用了三个图形系统中的哪一个的线索。需要这些信息,因为它们有不同的设置用户坐标的方式。
  • @Dwin 添加了使用的代码。感谢观看

标签: r plot geometry


【解决方案1】:

(删除了基于对蓝点(实际上是段)构建方式的猜测的错误方法。)

编辑:使用新信息,我建议绘制普通的“点”,即在由 (xleft+xright)/2 形成的 x 向量和使用 ytop 的 y 向量处的空心圆(应该与ybottom) 用于满足您条件的选定 ytop 值。您将创建一个逻辑向量来选择这些向量中的每一个。所以:

selvec <- ytop < -0.70 | ytop > 0.5
points ( x= (xleft[selvec]+xright[selvec])/2, y= ytop[selvec], cex =1.5, col="blue")

如果您使用 rgb() 函数创建具有透明度的颜色,您也可以使用透明度:

points ( x= (xleft[selvec]+xright[selvec])/2, y= ytop[selvec], cex = 2, col=rgb(0, 0, 1, 0.3) )

.. 如果您的输出设备支持,应该给您透明的圆圈。

【讨论】:

  • 感谢您的代码。我知道你的代码是如何工作的,但我认为我没有明确表达我的观点。请参阅我的问题下方添加的编辑。
  • 啊。我明白。应该不难解决。不过,在接下来的一个小时内将无法到达。
  • 请慢慢来。我有这些“蓝色”段的 xleft、xright 和 ytop、ybottom。
  • 谢谢..我如何调整 cex 以匹配“蓝色”段的长度。它们可能有不同的长度。
  • 由于您未能包含说明您需要解决的各种功能的测试用例,因此该项目一直处于高度假设状态。我不打算在没有样本数据和代码的情况下进行测试,以测试我的假设。
猜你喜欢
  • 2013-06-28
  • 1970-01-01
  • 2012-10-30
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
相关资源
最近更新 更多