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

如何使用Python的pylab.figure绘制一个非常大的热图?,python,matplotlib,Python,Matplotlib,我正在使用pylab.figure绘制热图。没有什么不寻常的,我得到了较小的热图尺寸的好结果 问题:我想绘制一个大约30行、近2000列的热图。这是可行的-除了我不能让标签以可读的非重叠方式呈现 我尝试使用figsize和dpi,但它所做的只是重新缩放输出图像的分辨率。实际上,我没有使图像足够宽,以便标签不再重叠 代码摘录: 谢谢 金姆 编辑:有序的观察片段: 这是截断的pylab输出。实际数据为29 x 1835矩阵 编辑2:它认为最好通过以下代码段生成测试数据,而不是将数据存放在任何地方 i

我正在使用pylab.figure绘制热图。没有什么不寻常的,我得到了较小的热图尺寸的好结果

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

我尝试使用figsize和dpi,但它所做的只是重新缩放输出图像的分辨率。实际上,我没有使图像足够宽,以便标签不再重叠

代码摘录:

谢谢

金姆

编辑:有序的观察片段:

这是截断的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列跨度的多个热图
我认为可以使用以下代码将fontsize设置得更小

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

但是,我可能不完全理解你的问题。你能将有序观测的内容保存在一个文件中并附上它吗。

你能提供一些示例数据吗?关于“左”和“右”的数据如何?养成发布可运行代码的习惯是很好的。现在提供了数据和可运行代码。标签在fig.show和生成的PNG中都不可读。我不知道如何在此处附加文件,但我编辑了问题以显示我数据的截断版本。您可以将文件转储到网站并链接到它。或者,发布一张热图图片。我添加了一个代码片段,用于生成可用于有序观测的测试数据。
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')
ax.tick_params(axis='both', which='major', labelsize=9)