DNA 序列点图

DNA sequence Dotplots

我目前正在编写一个脚本来在给定两个序列时创建点图。到目前为止,我可以得到一个可爱的 lil 点图。

The X axis is: >HeaderOfSeq1

X = ATCGTAGCTACGTACGT
The Y axis is: >HeaderOfSeq2

Y = ATGCGATCGTGCTAC 

ATGCGATCGTGCTAC
===============|
\    \       \ |A
 \    \  \  \  |T
   \   \   \  \|C
  \ \   \ \    |G
 \    \  \  \  |T
\    \       \ |A
  \ \   \ \    |G
   \   \   \  \|C
 \    \  \  \  |T
\    \       \ |A
   \   \   \  \|C
  \ \   \ \    |G
 \    \  \  \  |T
\    \       \ |A
   \   \   \  \|C
  \ \   \ \    |G
 \    \  \  \  |T

这是脚本中的 --ascii 过滤器(没有该过滤器,/ 是匹配的字母)。不,我想要和需要做的就是把它变成一个 matplotlib 图。

我有点卡在这一点上了,我从 np 中获取了两个具有所有可能组合的数组,我希望重叠会相当简单,return 等高线图可能基本上就是这样显示了上面的点图,但更漂亮。 Matplot 是一项要求,顺便说一句,标准化等等。 由于它们的字符串格式,我无法对 meshgrids(我知道)做任何事情,所以我被卡住了。

任何帮助将不胜感激!!如果需要,我还会 post 一些实际代码。

IIUC,你可以做到:

X, Y = 'ATCGTAGCTACGTACGT', 'ATGCGATCGTGCTAC'
X, Y = np.array(list(X)), np.array(list(Y))

plt.imshow(X==Y[:,None])        # the magic happens here, contourf should work similarly
plt.xticks(np.arange(len(X)), X)
plt.yticks(np.arange(len(Y)), Y)
plt.show()

输出: