【发布时间】:2020-09-16 10:01:23
【问题描述】:
我正在创建一个模拟蛋白质折叠的 Python 程序。我的蛋白质有 19 个元素(氨基酸)长,每个元素由 1 到 20 之间的数字指定。我使用 randint() 创建蛋白质并创建了一个零数组。
蛋白质最初在 21 x 21 阵列中展开并水平居中。所以数组的非零值在第 10 行。我导入了 matplotlib 并使用matshow() 来显示这种排列方式:
.
我喜欢这个图的地方是,很明显蛋白质是由不同的氨基酸/元素组成的,如每个正方形的颜色所示。我想保留这个功能。但是,我希望每个元素都显示为通过链接或网格连接到其邻居的彩色点,而不是正方形:
我在下面提供了我的代码。总结一下我的问题:
1) 如何将数组中的元素显示为圆形或格点,并带有连接点的链接?
2) 如何在保持每个元素的颜色相同的情况下执行上述操作?
3) 如何指定零值(当前为紫色)应为白色?我不喜欢其他颜色,我想要白色背景。
import numpy as np
import matplotlib.pyplot as plt
import random
from matplotlib.colors import ListedColormap
###create grid
rows = 21
columns = 21
x = np.zeros(rows) #create arrays for the x- and y-positions
y = np.zeros(columns)
middle = (rows-1)/2
grid = np.zeros((rows,columns)) #grid = [row][columns] = value = grid[j][i]
###create protein:
n = 20
protein = []
while len(protein) < n:
a = random.randint(1, 20)
protein = np.append(protein, a)
###specify initial condition with protein unfolded along y=0
j = int(middle)
i = 1
while i < rows-1:
grid[j][i] = protein[i]
i = i+1
print(grid)
plt.matshow(grid)
【问题讨论】:
标签: python numpy matplotlib