Biopython Phylo.draw():为什么不返回轴实例?

时间:2014-02-21 13:54:21

标签: python python-2.7 matplotlib biopython

当我们这样做时,Bio.Phylo中有一些我不理解的东西:

from Bio import Phylo
tree = Phylo.read("my_tree","newick")
tree_plot = Phylo.draw(tree)

编辑:

$ cat my_tree
(((A,B),C),D)

tree_plot是Nonetype,因为Phylo.draw()不返回任何内容。 source code的最后两行是:

    if do_show:
        plt.show()

我想与树交互,并在一些树叶前添加一个点。 所以我在最后一行的计算机上添加了源代码:

    if do_show:
        plt.show()
    return axes

现在,我在开头写的那段代码,我在tree_plot:

In [1]: type(tree_plot)
Out[1]: matplotlib.axes.AxesSubplot

我现在能够从树中访问数据,例如:

In [2]: tree_plot.texts
Out[2]: [<matplotlib.text.Text at 0x114d02710>,
<matplotlib.text.Text at 0x114d02990>,
<matplotlib.text.Text at 0x114d02ed0>,
<matplotlib.text.Text at 0x114d00cd0>,
<matplotlib.text.Text at 0x114d3c410>,
<matplotlib.text.Text at 0x114d3cb10>] 

或用以下内容绘制一条线:

tree_plot.plot(range(10))

依此类推任何其他的轴.AxesSubplot方法。

我的问题是:

为什么return函数中没有Phylo.draw()语句?如果它是有目的的,为什么以及如何在同一轴上绘制东西?

我正在使用

  • python 2.7.3
  • matplotlib 1.3.0
  • Biopython 1.63

由于

1 个答案:

答案 0 :(得分:2)

为什么他们不返回您必须询问开发人员的数字(或者可能会建议更改)。但是,解决这个问题非常容易:

首先确保您在交互模式下matplotlib

from matplotlib import pyplot as plt
plt.ion()

然后运行你的:

Phylo.draw(tree)

之后,如果您只想要ax,请添加一些文字

ax = plt.gca()
ax.text(1, 4, "Hello World")
plt.show()

或者,如果您希望整个数字使用plt.gcf()。请务必plt.show()查看您的更新。