使用标准的matshow示例:
from matplotlib.pylab import *
dim = (12,12)
aa = zeros(dim)
for i in range(min(dim)):
aa[i,i] = i
matshow(aa)
show()
example http://matplotlib.org/_images/matshow_00.png
如何控制每行的高度?
在我的例子中,行索引(即国家)可以用非线性间距(例如GDP)来表示,以表示幅度,我想通过从缩放矢量改变行高来表示。 (即如果有12行然后具有均匀分布,则每行将具有由[0.083,0.083,......,0.083]表示的1/12的行高度,然后可以通过任何向量的总和来设置不均匀的行高度。 1)
答案 0 :(得分:3)
您可以使用pcolormesh(或pcolor)创建由多边形组成的阵列,这些阵列可以具有您想要的任何形状。我认为正常的数组绘图如matshow或imshow将始终沿着轴保持不变的大小。
n = 6
# generate some data
gdp = np.array(np.random.randint(10,500,n))
countries = np.array(['Country%i' % (i+1) for i in range(n)])
matr = np.random.randint(0,10,(n,n))
# get the x and y arrays
y = np.insert(gdp.cumsum(),0,0)
xx,yy = np.meshgrid(np.arange(n+1),y)
# plot the matrix
fig, axs = plt.subplots(figsize=(6,6))
axs.pcolormesh(xx,yy,matr.T, cmap=plt.cm.Reds, edgecolors='k')
axs.set_ylim(y.min(),y.max())
# set the yticks + labels
axs.set_yticks(y[1:] - np.diff(y) / 2)
axs.set_yticklabels(countries)
#set xticks + labels
axs.xaxis.set_ticks_position('top')
axs.set_xticks(np.arange(n)+0.5)
axs.set_xticklabels(np.arange(n))
根据以下标准缩放高度:
print countries
['Country1' 'Country2' 'Country3' 'Country4' 'Country5' 'Country6']
print gdp
[421 143 134 388 164 420]