Python 如何在JupyterLab中缩放内嵌matplotlib图形?

Python 如何在JupyterLab中缩放内嵌matplotlib图形?,python,matplotlib,jupyter-lab,Python,Matplotlib,Jupyter Lab,我正在试用JupyterLab,已经使用Jupyter笔记本一段时间了。我在开始时使用标准的%matplotlib内联魔术。我注意到JupyterLab显示的matplotlib图形比以前的Jupyter笔记本要大得多 有没有办法强制JupyterLab在较小的窗口/区域中显示图像?我知道我可以在创建图形时更改通过的figsize,但这不会缩放图形中的文本/标签,我最终会看到超大的标签和标题 理想情况下,在JupyterLab中,我希望能够设置它,使图像适合某个区域,我可以定义图像的大小,如果图

我正在试用JupyterLab,已经使用Jupyter笔记本一段时间了。我在开始时使用标准的%matplotlib内联魔术。我注意到JupyterLab显示的matplotlib图形比以前的Jupyter笔记本要大得多

有没有办法强制JupyterLab在较小的窗口/区域中显示图像?我知道我可以在创建图形时更改通过的figsize,但这不会缩放图形中的文本/标签,我最终会看到超大的标签和标题

理想情况下,在JupyterLab中,我希望能够设置它,使图像适合某个区域,我可以定义图像的大小,如果图像较大,则可以缩放以适应

我一直在读JupyterLab的文档,但在解决这个特殊问题时,没有任何东西能让我大吃一惊

更新:我用Chrome运行JupyterLab。Chrome显示的图像最大可达浏览器窗口的全宽;如果窗口小于允许图像完整大小的宽度,则图像将缩放以适应-这是完全动态的,如果缩小窗口宽度,图像将动态重新缩放。我更改了figsize参数(并仔细调整字体大小以使其正常工作),在JuptyerLab中得到了一个大小合理的图形。我注意到,当我把它保存到jpg并放在powerpoint文档中时,它非常小(3,2)。所以我放大了它,但它变得模糊了。所以我用dip=1200重新生成了它。JuputerLab的数字越来越大。所以JupyterLab不尊重figsize。它是根据图像中的像素数做出某种判断

更新2:这段代码表明Juptyer Lab前端不会根据figsize参数显示图像,而是根据figsize和dpi的乘积(直到屏幕的宽度,然后缩放以适应,可能是通过Chrome本身)。请注意,您在屏幕上看到的字体大小仅随dpi缩放,而不随figsize缩放(应如此)


解决方法是在Jupyter Lab中以低dpi设置生成图形,但以高dpi设置保存图形以用于出版物。

matplotlib中图形的默认设置为
“figure.size”:(8,6),“figure.dpi”:100
。IPython内联后端使用
“figure.size”:(6.4,4.8),“figure.dpi”:72
。您可以在JupyterLab中使用相同的rcParams设置。@ImportanceOfBeingErnest感谢您的建议,但如果我减少figure.size,相对于绘图,标题/标签的固定大小仍然过大。我可能会问一些不可能的问题,但我只是想让整个事情扩大规模。它显然可以缩放到浏览器的大小(包括标题/标签),但似乎没有办法通过在任意位置设置选项来修复“边界框”。不,浏览器只是以png图像的大小显示它。图像大小由matplotlib的图形大小和dpi确定。如果我误解了这里的某些内容,可以直观地了解问题。目前我使用figsize=(6,4)生成图像。太大了。如果我将figsize更改为(3,2),图形的大小会更好,但标题、标签和图例会太大-我的设置在生成要打印的图像时是正确的,但在工作时会很不方便。我想能做的是告诉朱彼特;“我生成的任何图形;如果它太大,无法容纳此边界框,请缩放它,如果它适合,请绘制全尺寸。”。难以发布图片、公司限制等。
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

xys = np.random.multivariate_normal([0.0, 0.0], [[1.0,-0.5],[-0.5,1.0]], 50)

for figsize in [(3,2),(6,4)]:
    for dpi in [25,50,100]:
        fig = plt.figure(figsize=figsize, dpi=dpi)
        ax = fig.add_subplot(1,1,1)
        ax.scatter(xys[:,0], xys[:,1])
        ax.set_title('figsize = {}, dip = {}'.format(figsize, dpi))