1

我想就以下问题提出一些建议:我用 circos(dna 数据)创建了一个图像。我想通过在图的中间绘制一个基因名称来注释这些数据,并用一个箭头显示第一个基因的开始位置。(此处的示例输出文件:http: //www.nature.com/ncomms/2015/150122/ncomms6973/images/ncomms6973-f3.jpg

这是管道的一部分,因此需要创建数以千计的图像。这听起来像是基本功能,但是是否有任何可用的软件(在开放许可下)可以做到这一点?

我认为最好的方法是在“some”包中加载图像,并使用生成的图像作为画布来绘制额外的东西。

有人可以就如何做这样的事情提供任何提示吗?我试过谷歌搜索,但这个问题似乎对谷歌搜索很广泛。

除了 circos,我还在使用 matplotlib 和 reportlab,所以我希望它在其中一个中是可行的。

我了解这是否不是一个“纯”编程问题(3.. 2.. 1.. 中的反对票)

编辑:我想绘制两件事。1)图像中心的文本。2) 顶部中间的弯曲箭头指向右侧,跟随圆圈。

4

2 回答 2

2

这种图像可以通过创建一个极坐标子图,然后使用ax.bar方法: http: //matplotlib.org/examples/pie_and_polar_charts/polar_bar_demo.html

通过调整它,你可以做类似的事情:

import numpy as np
import matplotlib.pyplot as plt


N = 40
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
radii = np.random.uniform(-20,20,N)
width = 2*np.pi / N

ax = plt.subplot(111, polar=True)
ax.grid(False)
bars1 = ax.bar(theta, radii, width=width, bottom=40.0) 
bars2 = ax.bar(theta, radii, width=width, bottom=100.0)


# Use custom colors and opacity
for r, bar in zip(radii, bars1):
    bar.set_facecolor( 'r' if r>0 else 'g' )
    bar.set_alpha(0.5)

plt.show()

fig.savefig("figure_1.png")

例子

matplotlib 库中有很多示例:http: //matplotlib.org/gallery.html

现在,如果你真的有那么多复杂的图像,matplotlib 可能会很困难,因为它没有真正优化来进行快速图形计算。

但是你已经保存了这些图像,你可以加载它们并处理它们。这可能确实更快:

例如,我将前一个保存为 png,然后我可以加载它scipy.misc.imread(请注意,这适用于任何 jpeg/png/etc.. 图像,甚至不是从 matplotlib 生成的图像)​​,用 绘制它imshow,然后用通常plot,您只需要注意使用正确的坐标:

import numpy as np
import matplotlib.pyplot as plt
import scipy.misc

fig = plt.figure()
ax = fig.add_subplot(111)
ax.grid(False)
img = scipy.misc.imread("figure_1.png")
ax.imshow(img)

ax.plot([400,500],[300,200],'k', linewidth=4)

plt.show()

在此处输入图像描述

于 2015-07-24T15:24:36.153 回答
0

我喜欢你的“最干净的方式”计划 - 最好的方式是:

  • 自己修改SVG文件

Circos 的输出文件是 SVG 或 png。所以我们选择了SVG。

  1. 在中心添加文本:只需在 svg 文件中添加文本标签,如下所示:

    <text x="1500" y="1500">Here is your text in center</text>

  2. 按路径和文本路径绘制

    路径是 svg 的一个强大特性。您可以访问https://developer.mozilla.org/en-US/docs/Web/SVG/Element/textPath了解更多信息。

于 2016-10-27T11:17:35.217 回答