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 (将#修改为@)