如何使用Python的pylab.figure绘制一个非常大的热图?

时间:2014-08-14 18:27:38

标签: python matplotlib

我正在使用pylab.figure绘制热图。没有什么不寻常之处,我可以获得较小的热图尺寸。

问题:我想用大约30行和近2000列绘制热图。这是有效的 - 除了我不能让标签以可读的非重叠方式呈现。

我尝试使用figsizedpi,但它所做的只是重新调整输出图像的结果分辨率。我实际上无法使图像足够宽,因此标签不再重叠。

代码摘录:

fig = pylab.figure(figsize = (640,30), dpi = 50)
axmatrix = fig.add_axes([ 0.1, 0.1, 0.85, 0.1 ])
axmatrix.tick_params(axis='both', which='major', labelsize = 8)
im = axmatrix.matshow(ordered_observations, aspect = 'auto', origin = 'lower', cmap = pylab.cm.YlGnBu)

axcolor = fig.add_axes([ 0.96, 0.1, 0.01, 0.1 ])
pylab.colorbar(im, cax = axcolor)

axmatrix.set_xticks(range(0, len(right) - 1))
axmatrix.set_yticks(range(0, len(left) - 1))
axmatrix.set_xticklabels(map(lambda name: name, list(right)[0:len(right) - 1]), rotation = 90)
axmatrix.set_yticklabels(map(lambda name: name, list(left)[0:len(left) - 1]))

fig.show()
fig.savefig('linkage.png')

谢谢,

编辑:ordered_observations摘录:

[[ 0.5   0.5   0.5  ...,  0.5   0.5   0.5 ]
 [ 1.    1.    1.   ...,  0.5   0.5   0.5 ]
 [ 1.    1.    1.   ...,  0.5   0.5   0.5 ]
 ...,
 [ 0.25  0.2   0.2  ...,  0.2   0.2   0.2 ]
 [ 0.25  0.2   0.2  ...,  0.2   0.2   0.2 ]
 [ 0.25  0.2   0.2  ...,  0.2   0.2   0.2 ]]

这是截断的pylab输出。真实数据是29 x 1835矩阵。

编辑2:它不是将我的数据存放在任何地方,而是认为最好通过以下代码片段生成测试数据。

import numpy
import random
ordered_observations = numpy.array([ [ random.random() for column in range(0, 1835) ] for row in range(0, 29) ])

编辑3:一个完整​​的工作示例。

import numpy
import random
import pylab

left = range(0, 29)
right = range(0, 1835)
ordered_observations = numpy.array([ [ random.random() for column in range(0, 1835) ] for row in range(0, 29) ])

fig = pylab.figure(figsize = (640,30), dpi = 50)
axmatrix = fig.add_axes([ 0.1, 0.1, 0.85, 0.1 ])
axmatrix.tick_params(axis='both', which='major', labelsize = 8)
im = axmatrix.matshow(ordered_observations, aspect = 'auto', origin = 'lower', cmap = pylab.cm.YlGnBu)

axcolor = fig.add_axes([ 0.96, 0.1, 0.01, 0.1 ])
pylab.colorbar(im, cax = axcolor)

axmatrix.set_xticks(range(0, len(right) - 1))
axmatrix.set_yticks(range(0, len(left) - 1))
axmatrix.set_xticklabels(map(lambda name: name, list(right)[0:len(right) - 1]), rotation = 90)
axmatrix.set_yticklabels(map(lambda name: name, list(left)[0:len(left) - 1]))

fig.show()
fig.savefig('linkage.png')

解决方法

看起来这是一个棘手的问题,所以我最终放弃了并使用了这个解决方法:

  • 为200列的跨度绘制多个热图

1 个答案:

答案 0 :(得分:0)

我认为您可以使用以下代码将fontsize设置为较小

ax.tick_params(axis='both', which='major', labelsize=9)

但是,我可能不完全理解你的问题。您可以将ordered_observations的内容保存在文件中并附加它。