gpt4 book ai didi

python - 如何将数组的值显示为彩色格点?

转载 作者:行者123 更新时间:2023-12-01 21:35:18 24 4
gpt4 key购买 nike

我正在创建一个模拟蛋白质折叠的 Python 程序。我的蛋白质有 19 个元素(氨基酸)长,每个元素由 1 到 20 之间的数字指定。我使用 randint() 来创建蛋白质并创建一个零数组。

蛋白质最初是展开的,并在 21 x 21 阵列中水平居中。所以数组的非零值在第 10 行。我导入了 matplotlib 并使用 matshow() 来显示这种排列:

here .

我喜欢这张图的地方在于,很明显蛋白质是由不同的氨基酸/元素组成的,如每个方 block 的颜色所示。我想保留这个功能。但是,我希望每个元素都显示为通过链接或在网格上与其相邻元素相连的彩色点,而不是正方形:

link image on a grid like this image .

我在下面提供了我的代码。总结我的问题:

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)

最佳答案

Q1 & 2-我认为您希望在当前图形的顶部添加一个带有不同颜色标记的散点图。添加一条线和不同的颜色标记可能会很棘手,因此最好的选择可能是简单地添加一个依赖于相同 x/y 值的线图,以便同时更新两者(假设您将它们更新为显示折叠)。给定的代码只是散点图,但它会维护您当前的颜色系统。

编辑:请参阅其他答案以了解这方面的一个很好的例子(散点图和绘图)。

import matplotlib.colors as mcolors
from matplotlib import cm
normalize = mcolors.Normalize(vmin=0, vmax=20)
mapping = cm.viridis(normalize(protein)) # maintain current colours
plt.scatter(range(20), np.broadcast_to(10, 20), c=mapping, marker='o')

Q3-您可以设置特定颜色图的值以使用 .set_under 显示特定颜色,例如参见此答案- https://stackoverflow.com/a/22552651/9754355这应该使您的映射背景变白。

cm.viridis.set_under(c='w')
plt.matshow(grid, vim=1e-9) # Arbitrary low value.

如果这对您的蛋白质颜色产生负面影响,请考虑使用 numpy NaN 或 infinty 或类似的东西,然后改用 set_bad。

关于python - 如何将数组的值显示为彩色格点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62075701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com