我正在寻找一种以人类可读格式绘制一些数据的图形的方法。我从模拟中获得的数据包含帧号,蛋白质残基数和蛋白质二级结构状态。帧号为整数,二级结构状态为字符串。例如:

0 0 1 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10

1'H''H''H''0''H''0''H''H''H''b''H''H''S'
2'H''H''H''H''H''H''S''H''0''b''H''H''H''H'

列0包含帧号,其余列对应于残差号的状态(即,帧1处残差号6的状态为“ 0”,帧2处的残差号的状态为“ S”)。

我想生成一个帧号对残差号的二维图,该图根据“ Struc”列中给出的字符串来绘制特定的颜色。最好手动控制字符串的颜色(以避免相似的颜色)。

谁能将我定向到允许我执行此操作的任何特定模块/子模块?

注意:这是针对大量数据的,文件可能达到2000帧,超过1000个残差,因此需要计算效率。我也不反对重新格式化数据,如果它可以使绘图更容易/可能/更快。

最佳答案

下面的示例如何:


您首先定义数据(或者您将从文件中读取这些数据)。
为单个值定义颜色映射(请参见下面的colormapcolor documentation of matplotlib
函数会将这些字母/值映射为数字,将其视为索引。相同的索引将用于颜色访问
使用最近邻点插值和提供的颜色绘制图像


我的建议:

import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

def toImage(frames, colormap):
    keys = list(colormap.keys())
    colors = [colormap[key] for key in keys]

    image = [[keys.index(val) for val in row[1:]] for row in frames]
    return image, colors

frames = [[0, 'H', 'H', 'H', '0', 'H', '0', 'H', 'H', 'H', 'b', 'H', 'H', 'S'],
          [1, 'H', 'H', 'H', 'H', 'H', 'S', 'H', '0', 'b', 'H', 'H', 'H', 'H']]

colormap = {'H': 'red',
            '0': 'green',
            'S': '#4eefff',
            'b': 'b'}

image, colors = toImage(frames, colormap)

plt.imshow(image, cmap = ListedColormap(colors), interpolation = 'nearest')
plt.show()


当然,有很多需要调整的地方(例如,我完全省略了帧号,适当地调整了y -ticks,...),但这应该可以帮助您开始

关于python - 使用离散变量的2D离散色图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37880399/

10-13 07:23