Python Matplotlib集合_yticklabels来自多个np.array()
我有两个numpy数组,prot_name和prot_nHarea,用于标记ytickPython Matplotlib集合_yticklabels来自多个np.array(),python,python-2.7,numpy,matplotlib,Python,Python 2.7,Numpy,Matplotlib,我有两个numpy数组,prot_name和prot_nHarea,用于标记ytick prot_name = np.array(['HEMO', 'HSA', 'EGF', 'MYO', 'LACT', 'CKMM', 'BMG', 'IGF', 'CYTC', 'IFN', 'CREA', 'IL8']) prot_nHarea每个prot_名称有12个矩阵 我想让每个y记号的第一行作为prot_名称,后跟prot_nArea中矩阵的np.sum。下一行有它的np.mean prot_nH
prot_name = np.array(['HEMO', 'HSA', 'EGF', 'MYO', 'LACT', 'CKMM', 'BMG', 'IGF', 'CYTC', 'IFN', 'CREA', 'IL8'])
prot_nHarea每个prot_名称有12个矩阵
我想让每个y记号的第一行作为prot_名称,后跟prot_nArea中矩阵的np.sum。下一行有它的np.mean prot_nHarea
现在我正在做硬代码来标记y记号。但是有没有什么方法可以在np.sumnp.arrayprot\u name后面跟着np.sumnp.arrayprot\u nHarea和np.meannp.arrayprot\u nHarea之间进行迭代?sum和mean的值以科学模式写入,当它们重叠时,\n我会稍微调整标签
ax0.set_yticklabels(["K1 - HEMO sum: "+str('{:.2e}'.format(np.sum(prot_nHarea[0])))+"\nmean: "+str('{:.2e}'.format(np.mean(prot_nHarea[0]))),
"K2 - HSA sum: "+str('{:.2e}'.format(np.sum(prot_nHarea[1])))+"\nmean: "+str('{:.2e}'.format(np.mean(prot_nHarea[1])))+"\n",
"\nK3 - EGF sum: "+str('{:.2e}'.format(np.sum(prot_nHarea[2])))+"\nmean: "+str('{:.2e}'.format(np.mean(prot_nHarea[2]))),
"K4 - MYO sum: "+str('{:.2e}'.format(np.sum(prot_nHarea[3])))+"\nmean: "+str('{:.2e}'.format(np.mean(prot_nHarea[3]))),
"K5 - LACT sum: "+str('{:.2e}'.format(np.sum(prot_nHarea[4])))+"\nmean: "+str('{:.2e}'.format(np.mean(prot_nHarea[4]))),
"K6 - CKMM sum: "+str('{:.2e}'.format(np.sum(prot_nHarea[5])))+"\nmean: "+str('{:.2e}'.format(np.mean(prot_nHarea[5]))),
"K7 - BMG sum: "+str('{:.2e}'.format(np.sum(prot_nHarea[6])))+"\nmean: "+str('{:.2e}'.format(np.mean(prot_nHarea[6])))+"\n",
"K8 - IGF sum: "+str('{:.2e}'.format(np.sum(prot_nHarea[7])))+"\nmean: "+str('{:.2e}'.format(np.mean(prot_nHarea[7]))),
"K9 - CYTC sum: "+str('{:.2e}'.format(np.sum(prot_nHarea[8])))+"\nmean: "+str('{:.2e}'.format(np.mean(prot_nHarea[8]))),
"K10 - IFN sum: "+str('{:.2e}'.format(np.sum(prot_nHarea[9])))+"\nmean: "+str('{:.2e}'.format(np.mean(prot_nHarea[9]))),
"K11 - CREA sum: "+str('{:.2e}'.format(np.sum(prot_nHarea[10])))+"\nmean: "+str('{:.2e}'.format(np.mean(prot_nHarea[10]))),
"K12 - IL8 sum: "+str('{:.2e}'.format(np.sum(prot_nHarea[11])))+"\nmean: "+str('{:.2e}'.format(np.mean(prot_nHarea[11])))], fontsize='x-small')
您可以通过列表理解来实现这一点,同时使用zip和enumerate在prot_name和prot_nHarea之间循环:
import numpy as np
import matplotlib.pyplot as plt
prot_name = np.array([
'HEMO', 'HSA', 'EGF', 'MYO',
'LACT', 'CKMM', 'BMG', 'IGF',
'CYTC', 'IFN', 'CREA', 'IL8'
])
prot_nHarea = np.random.rand(12, 100)
yticklabels = ['K{} - {} sum: {:.2e} \nmean: {:.2e}'.format(
i, name, Harea.sum(), Harea.mean()
) for i, (name, Harea) in enumerate(zip(prot_name, prot_nHarea))]
fig, ax = plt.subplots()
ax.set_yticks(range(12))
ax.set_yticklabels(yticklabels)
plt.show()
它工作得很好。非常感谢。请问是否要在每个标签的末尾添加\n,但标签之间的\n数量不相等。就像我设置了名为interval的换行数数组一样,yticklabels=['K{}-{}sum:{.2e}\n man:{.2e}\n*interval'。格式I,name,Harea.sum,Harea.mean for I,name,Harea in\u name,prot\n区域]其目的是我想将标签设置在刻度之间组的中心,但我的每个K有不同的行数,所以我无法确定行数。我应该在哪里插入\n*间隔?