2012-08-30 196 views
30

我有一个由任务组成的大进程(大约600个),并且我创建了一个图来监视它们的启动顺序和时间。为此,我使用了matplotlib和barh。matplotlib - 提高分辨率以查看详细信息

下图是OK(我第一次matplotlib成功了!),但是:

  • 我想看到的细节和出口时的画面放大(如PNG,例如),作为缩放选项允许在matplotlib显示结果与show()命令,如this other SO post
  • Y轴的传说是太接近而无法读取

我试图提高分辨率,这是更好,但细节不准确 足够。下面是我的结果至今:

  • 完整的结果

full

  • 变焦与matplotlib

zoom

你知道我怎么能提高可读性?非常感谢(否则,我所有的努力都没用,恐怕...)

PS:我正在使用matplotlib 1.1.1和python 2.7。

+0

分辨率看起来不错。我想你的观点是轴上的可读性?试着减小轴标签的字体大小。如果有其他事情,你必须更清楚你想要什么。 为获得最佳分辨率,导出为postscript或PDF;这些格式是基于矢量的,并且通常保持完整的分辨率。请记住,这样的文件可能会以这种方式变大(并需要一段时间才能生成)。如果你想要一个PNG,只需使它成为一个具有正常分辨率(dpi)的巨大数字;它是像PNG这样的光栅化图像类型固有的,你不能无止境地放大。 – Evert

+0

我只是尝试了一些其他的东西:添加注释而不是标注在轴上。但同样的问题仍然存在:因为我有超过600个值,即使字体大小'xx小'也是不够的。我真正喜欢的是将注释文本大小设置为与图表项目相同的高度,这可能吗?然后,我只需生成一个非常大的分辨率,以便我可以尽可能多地放大内容。 – Emmanuel

+2

如果你做出一个非常大的数字会怎样?如果字体大小不能缩放(因为它通常用点来定义),但是这些小节会根据数字大小进行缩放。当然,这样的图形在“拖动”或打印时有些尴尬,但在那个时候,您可以重新缩放它。或者,对于正常大小的图形,请尝试使用1(整数)的字体大小而不是字符串。这对我有效。 – Evert

回答

14

只是为了记录在案,我要在我的第二个评论做这里作为一个可能的答案和建议。这可能并不总是工作,但测试显示了良好的效果:

import pylab as pl 
pl.figure(figsize=(7, 7)) # Don't create a humongous figure 
pl.annotate(..., fontsize=1, ...) # probably need the annotate line *before* savefig 
pl.savefig('test.pdf', format='pdf') # no need for DPI setting, assuming the fonts and figures are all vector based 

这样看来,即使分数fontsizes(例如fontsize=0.1)的作品。 您的里程可能会有所不同:我仅使用PDF后端进行了测试,而不是EPS测试。

另外:我已经省略了DPI设置。在高分辨率打印机上打印时,您可能需要。再说一次,您不应该这样做,因为这可能是打印机设置:打印机如何栅格化您的(矢量)PDF图像。我根本不知道这些“提示”是否可以编入postscript/PDF中。

31

我设法这样做,在Evert的建议,通过使用非常小的字体非常大的分辨率。下面是最重要的步骤:

import pylab as pl 
pl.figure(figsize=(70, 70)) # This increases resolution 
pl.savefig('test.eps', format='eps', dpi=900) # This does, too 
pl.annotate(..., fontsize='xx-small', ...)