将着色值的matplotlib网格变成一系列的条形图,每行一个?

时间:2019-08-25 00:11:10

标签: python matplotlib

使用matlotlib,我可以创建如下所示的图形:

enter image description here

此处,每行包含一系列从0到0.6的数字。左手轴文本指示每行中的最大值。底部轴文本表示列索引。

实际网格的代码本质上涉及以下行:

    im = ax[r,c].imshow(info_to_use, vmin=0, vmax=0.6, cmap='gray')

其中ax[r,c]是行r和列c的当前子图轴,而info_to_use是形状为(num_rows, num_cols)的numpy数组,其值在0和0.6。

我想知道是否有一种方法可以转换上面的代码,以便改为显示条形图,每行一个?像这样的手绘图:

enter image description here

(我的手绘图中的列数与早期的列数不同。)我知道,如果将其像第一个那样嵌入到绘图中,将导致非常难以阅读的绘图这里。对于行数较少的绘图,我将具有此功能,这将使条形更易于阅读。

帮助我做出上述第一幅图的参考文献大部分来自:

但是我不确定如何使它们从每一行跳转到条形图。还是至少有一些可以反映出来的东西,例如,不是对整个单元格灰色进行阴影处理,仅根据vmax的百分比对其进行阴影处理?

1 个答案:

答案 0 :(得分:1)

const int nums[] = {1,2,3};
const int nums2[][3] = {{1,2,3}, {4,5,6}};

在循环中,为二维数组中的每一行调用plt.subplot,然后调用plt.bar。

import numpy as np
from matplotlib import pyplot as plt

a = np.random.rand(10,20)*.6

或者,创建所有子图;然后循环绘制每个轴的条形图。

for i, thing in enumerate(a,1):
    plt.subplot(a.shape[0],1,i)
    plt.bar(range(a.shape[1]),thing)
plt.show()
plt.close()