微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Retina 显示屏上的 Jupyter 笔记本中的图形大小不一致

如何解决Retina 显示屏上的 Jupyter 笔记本中的图形大小不一致

我经常使用 %matplotlib notebook%pylab 魔术命令,但发现图形大小的渲染存在不一致,这取决于我使用的是 MacBook Pro Retina 显示屏,还是外部非 Retina 显示器(相同的 MacBook Pro)。尽管已经研究了许多相关问题的网站,但我找不到合适的设置或魔法命令来解决这种不一致的问题。

这是我看到问题的典型代码

%matplotlib notebook
%pylab

fig = figure(1)

def f(x):
    return cos(2*pi*x)

x = linspace(0,1,129)
hdl,= plot(x,f(x))

tv = linspace(0,11)
for m in range(10):
    t = tv[m]
    hdl.set_ydata(f(x-t))
    
    fig.canvas.draw()
    fig.show()    
    pause(0.2)

在外接显示器(标准问题

但是,在我的 MacBook Pro(约 2015 年)Retina 显示屏上,动画时该图形的大小约为笔记本页面大小的四分之一。只有当单元格运行完毕后,图形才会呈现为全尺寸(例如适合笔记本页面的宽度)。当我在制作动画时打印图形 dpi 和大小(fig.get_dpi()fig.bBox_inches)时,结果报告的 DPI 为 100,图形大小为 6.4x4.8。最终渲染后的 DPI 为 220。

Plot while animating on Retina display (DPI=100)

Final rendering (DPI=220)

我已尝试使用 rcParams['figure.dpi'] = 220 将 DPI 设置修复为 220。这以预期的大小为图形设置动画(与我在外部监视器上得到的匹配),但是当单元格运行完毕后,最终的 DPI 再次加倍(DPI=484),并且最终渲染的图形太大以至于没有不再适合笔记本电池。

我尝试了以下魔术命令和设置的各种组合,但似乎没有任何方法可以将 DPI 固定到动画和最终渲染之间的一致大小。

%config InlineBackend.figure_format = 'retina'
%config InlineBackend.print_figure_kwargs={'bBox_inches':None}

rcParams['savefig.dpi'] = 100
rcParams['figure.figsize'] = [6.4,4.8]
rcParams['figure.dpi'] = 100
rcParams['savefig.dpi'] = 100

有没有办法将 DPI 固定在 220 并防止最终渲染使 DPI 翻倍?或者是否有其他解决方案可以保留动画和最终渲染之间的图形大小,同时适用于 Retina 和非 Retina 显示器?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。