python - 使用离散变量的二维离散彩色图

标签 python matplotlib plot simulation contour

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

0 1 2 3 4 5 6 7 8 9 10

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

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

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

任何人都可以指导我使用允许我执行此操作的任何特定模块/子模块吗?

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

最佳答案

下面的例子怎么样:

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

我的建议:

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 - 使用离散变量的二维离散彩色图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37880399/

相关文章:

python - 如何使用 for 循环在提供的字符串中交替大小写

python - 将嵌套字典中列表的元素加在一起 ​​- python

python - 欺诈检测分类ML的经纬度转换

python - 在 python 中使用 kmeans sklearn 聚类数据点

Matplotlib 调色板

R 绘图旋转点或实心箭头

python - python 中的 stdio.write 是什么?

python - Pandas DataFrame 条形图,按其他列排序值

python - 如何在 matplotlib 中绘制内联线标签?

python - 如何从数据框中绘制表面图/3d 图