绘图总和(矩阵,轴= 0)并使用非零元素的行索引标记绘图,并将其加总

时间:2017-10-28 08:22:50

标签: python python-2.7 numpy matplotlib plot

我将{稀疏矩阵mat7axis=0进行求和然后绘制。

mat7 = np.zeros(shape=(5,4))
mat7[2] = 5
mat7[3,1:3] = 7
print mat7
>[[ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]
 [ 5.  5.  5.  5.]
 [ 0.  7.  7.  0.]
 [ 0.  0.  0.  0.]]

ax0 = plt.subplot2grid((1, 1), (0, 0), rowspan=1, colspan=1)
ax0.plot(np.sum(mat7,0))
plt.show()

enter image description here

我希望每个sum值都具有非零元素来自的行索引。从这里的4点开始,如何分别制作标签(2),(2,3),(2,3),(2)?因为第一和第四点仅来自第二行,而第二和第三点来自第二和第三行的非零元素之和。

因为它不是来自列的索引而是总和已经折叠的行,它是链接回来并制作标签的方式吗?

1 个答案:

答案 0 :(得分:3)

你可以使用

  • np.nonzero()查找非零元素的行号
  • mpl.Axes.annotate将标记点添加到标记点。我非常感谢这部分的以下答案:Label python data points on plot

以下是一个例子:

import numpy as np
import matplotlib.pyplot as plt

mat7 = np.zeros(shape=(5,4))
mat7[2] = 5
mat7[3,1:3] = 7
print(mat7)

x = list(range(mat7.shape[1]))
y = np.sum(mat7,0)
labels = [np.nonzero(col)[0].tolist() for col in mat7.T]

ax0 = plt.subplot2grid((1, 1), (0, 0), rowspan=1, colspan=1)
ax0.plot(x,y)

for x,y,label in zip(range(4), np.sum(mat7,0), labels):
    ax0.annotate('{}'.format(label), xy=(x,y), textcoords='data')

plt.show()