我有一个python程序,可以读取tsv数据,并使用matplotlib库进行绘图
我觉得我的代码运行得很好:
def main(compsPath: str, gibbsPath: str):
"""
Given the file paths for comps.tsv and
gibbs.tsv, this main function will
produce two separate plots - one for each file.
"""
# Read tsv data into np record arrays
# Slice off header text
with open(compsPath, 'r') as fcomps:
reader = csv.reader(fcomps, delimiter='\t')
compsHeader = next(reader)
compsData = np.array(list(reader)).astype(np.double)
with open(gibbsPath, 'r') as fgibbs:
reader = csv.reader(fgibbs, delimiter='\t')
gibbsHeader = next(reader)
gibbsData = np.array(list(reader)).astype(np.double)
# Get data dimensions:
# - - - M := Number of metabolites
# - - - N := Number of reactions
M = compsData.shape[1] - 1
N = gibbsData.shape[1] - 1
plotComps(M, compsData, compsHeader)
plotGibbs(N, gibbsData, gibbsHeader)
plt.show()
plotGibbs函数为我正在使用的tsv文件生成以下图形。对于该图,N=3(3个反应)
我想指出每个反应在什么时候变得不利(在我的项目中,这仅仅意味着反应停止)。当吉布斯自由能值(∆G) 反应速率大于或等于0
我觉得我最好通过对程序生成的线条图进行颜色编码来强调这一点。负片∆G值,我希望线是绿色的,为正或零∆G值,我希望线是红色的
以下是我当前生成吉布斯自由能图的代码(不包括颜色代码):
def plotGibbs(N: int, gibbsData: np.ndarray, gibbsHeader):
gibbsFig = plt.figure()
gibbsFig.suptitle("∆G˚ Yield Plotted over Time (days)")
numCols = ceil(N / 2)
numRows = (N // numCols) + 1
for n in range (1, N+1):
ax = gibbsFig.add_subplot(numRows, numCols, n)
ax.set_ylabel(gibbsHeader[n])
ax.set_xlabel(gibbsHeader[0])
ax.plot(gibbsData[:, 0], gibbsData[:, n])
gibbsFig.tight_layout()
如何使负值显示为绿色,而非负值显示为红色
您可以尝试使用np.where和类似
gibbsData[:, n]>0
的简单条件来查找数据中符号变化的位置,然后相应地绘制负/正数据:相关问题 更多 >
编程相关推荐