我正在寻找一种以人类可读格式绘制一些数据的图形的方法。我从模拟中获得的数据包含帧号,蛋白质残基数和蛋白质二级结构状态。帧号为整数,二级结构状态为字符串。例如:
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个残差,因此需要计算效率。我也不反对重新格式化数据,如果它可以使绘图更容易/可能/更快。
最佳答案
下面的示例如何:
您首先定义数据(或者您将从文件中读取这些数据)。
为单个值定义颜色映射(请参见下面的colormap
和color 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/