我想就以下方面提出一些建议: 我用circos(dna数据)创建了一个图像。我想通过在图中间绘制基因名称来注释这些数据,并用箭头显示第一个基因的起始位置。 (此处的示例输出文件:http://www.nature.com/ncomms/2015/150122/ncomms6973/images/ncomms6973-f3.jpg)
这是管道的一部分,因此需要创建数千个图像。这听起来像基本功能,但有没有可用的软件(在开放许可下)这样做?
我认为最好的方法是在'some'包中加载图像,并使用生成的图像作为画布来绘制其他内容。
有人可以提供关于如何做这样的事情的任何提示吗? 我试过谷歌搜索,但这个问题似乎广泛用于谷歌搜索。
除了circos,我正在使用matplotlib和reportlab,所以我希望其中一个可行。
我理解这不是一个'纯粹的'编程问题(在3 ... 2 .. 1中投票)。
编辑:我想绘制两件事。 1)图像中心的文本。 2)在圆圈中间指向右侧的弯曲箭头。答案 0 :(得分: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 gallery中提供了很多示例: 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()
答案 1 :(得分:0)
我喜欢你最干净的方式" - 最好的方法是:
Circos的输出文件是SVG或png。所以我们选择SVG。
在中心添加文字:只需在svg文件中添加文字标签,如下所示:
<text x="1500" y="1500">Here is your text in center</text>
按路径和文字路径绘制
路径是svg的强大功能。您可以访问https://developer.mozilla.org/en-US/docs/Web/SVG/Element/textPath了解详情。