首页 > 解决方案 > Python - 绘制线性百分比图

问题描述

我有这个 numpy 数组:

[
 [    0     0     0     0     0     0     2     0     2     0     0     1    26     0]
 [    0     0     0     0     0     0     0     0     0     0     0     0     0     4]
 [21477 61607 21999 17913 22470 32390 11987 41977 81676 20668 17997 15278 46281 19884]
 [ 5059 13248  5498  3866  2144  6161  2361  8734 16914  3724  4614  3607 11305  2880]
 [  282  1580   324   595   218   525   150   942   187   232   430   343   524   189]
 [ 1317  6416  1559   882   599  2520   525  2560 19197   729  1391  1727  2044  1198]
]

我刚刚创建了按预期工作的对数热图。但是,我想创建另一个表示跨行线性比例的热图,并显示矩阵中的每个位置对应的百分比值,而行的总和将给出 100%。不使用 seaborn 或 pandas 是这样的:

在此处输入图像描述

标签: pythonmatplotlib

解决方案


干得好:

import matplotlib.pyplot as plt
import numpy as np
a = np.array([[0,0,0,0,0,0,2,0,2,0,0,1,26,0],
          [0,0,0,0,0,0,0,0,0,0,0,0,0,4],
          [21477,61607,21999,17913,22470,32390,11987,41977,81676,20668,17997,15278,46281,19884],
          [5059,13248,5498,3866,2144,6161,2361,8734,16914,3724,4614,3607,11305,2880],
          [282,1580,324,595,218,525,150,942,187,232,430,343,524,189],
          [1317,6416,1559,882,599,2520,525,2560,19197,729,1391,1727,2044,1198]])
# normalize
normalized_a = a/np.sum(a,axis=1)[:,None]
# plot
plt.imshow(normalized_a)
plt.show()

在此处输入图像描述


推荐阅读