matplotlib - 提高分辨率以查看细节

Posted

技术标签:

【中文标题】matplotlib - 提高分辨率以查看细节【英文标题】:matplotlib - increase resolution to see details 【发布时间】:2012-08-30 08:18:02 【问题描述】:

我有一个由任务(大约 600 个)组成的大流程,我创建了一个图形来观察它们的启动顺序和它们花费的时间。为此,我使用了 matplotlib 和一个 barh。

图还可以(我的第一个 matplotlib 成功!),但是:

我想查看详细信息并在导出(例如 PNG)时放大图片,因为当 matplotlib 使用 show() 命令显示结果时,缩放选项允许 Y 轴的图例太近且难以阅读

如this other SO post 所说,我尝试提高分辨率,这样更好,但细节不够精确。以下是我目前的结果:

完整结果

使用 matplotlib 进行缩放

你知道如何提高可读性吗?非常感谢(否则,我所有的努力都将毫无用处,恐怕......)

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

【问题讨论】:

分辨率看起来不错。我猜你的意思是轴上的可读性?只需尝试减小轴标签的字体大小。如果有别的,你必须更清楚你想要什么。为获得最佳分辨率,导出为 postscript 或 PDF;这些格式是基于矢量的,通常保持全分辨率。请记住,这样的文件可能会以这种方式变大(并且需要一段时间才能生成)。如果您想要PNG,只需将其制作为具有正常分辨率(dpi)的巨大图形即可;它是像 PNG 这样的光栅化图像类型所固有的,您无法无休止地放大。 我只是尝试了其他方法:在轴上添加注释而不是标签。但同样的问题仍然存在:因为我有超过 600 个值,即使 fontsize 'xx-small' 也是不够的。我真正想要的是让注释文本大小与图表项的高度相同,这可能吗?然后我会生成一个非常大的分辨率,这样我就可以尽可能多地放大。 如果你制作一个非常大的数字怎么办?如果字体大小不缩放(因为它通常以磅为单位定义),那将起作用,但条形确实会随着图形大小缩放。当然,这样的图形“拖动”或打印有点尴尬,但此时,您可以重新缩放它。或者,对于正常大小的图形,请尝试使用 1(整数)的字体大小而不是字符串。这对我有用。 【参考方案1】:

根据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', ...)

【讨论】:

【参考方案2】:

为了记录,我将在我的第二条评论中提出的建议也作为可能的答案。这可能并不总是有效,但测试显示出良好的结果:

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

它甚至会出现小数字体大小(例如fontsize=0.1)。 您的情况可能会有所不同:我仅使用 PDF 后端进行了测试,而不是 EPS 后端。

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

【讨论】:

以上是关于matplotlib - 提高分辨率以查看细节的主要内容,如果未能解决你的问题,请参考以下文章

保存绘图时更改Matplotlib图窗口的分辨率?

Matplotlib,savefig() 的替代品以提高保存到 CString 对象时的性能?

带有两个滑块的交互式 matplotlib 图

转录组scatter plot 散点图和ma plot有啥区别

Python 教程Matplotlib 数据类型汇总

FFT 围绕特定频率的大量细节