【问题标题】:How to make inline plots in Jupyter Notebook larger? [duplicate]如何使 Jupyter Notebook 中的内联图更大? [复制]
【发布时间】:2016-07-21 22:45:36
【问题描述】:

我使用“%matplotlib inline”在我的 Ipython Notebook 上内联了我的绘图。

现在,情节出现了。但是,它非常小。有没有办法使用笔记本设置或绘图设置使其看起来更大?

【问题讨论】:

    标签: python matplotlib ipython jupyter-notebook


    【解决方案1】:

    默认图形大小(以英寸为单位)由

    控制
    matplotlib.rcParams['figure.figsize'] = [width, height]
    

    例如:

    import matplotlib.pyplot as plt
    plt.rcParams['figure.figsize'] = [10, 5]
    

    创建一个 10(宽)x 5(高)英寸的图形

    【讨论】:

    • 如果所有的地块都没有大小,这实际上作为一种设置后忘记它的策略更有用。
    • 太棒了。与熊猫箱线图大小作斗争,这解决了它。由于某种原因,figsize=(x,y) 参数在 jupyter 中无效。但是,按照您的建议修改 matplob.rcParams 效果很好。
    • 确保在运行%matplotlib inline之后运行此
    • @uut 这不是默认的吗?
    • @VerenaHaunschmid 在设置 rcParams 后运行 %matplotlib inline 似乎会将图形大小覆盖回默认值。
    【解决方案2】:

    是的,像这样玩figuresizedpi(在调用子情节之前):

    fig=plt.figure(figsize=(12,8), dpi= 100, facecolor='w', edgecolor='k')
    

    正如@tacaswell 和@Hagne 指出的那样,如果不是一次性的,您也可以更改默认值:

    plt.rcParams['figure.figsize'] = [12, 8]
    plt.rcParams['figure.dpi'] = 100 # 200 e.g. is really fine, but slower
    

    【讨论】:

    • f, (ax1, ax2,ax3) = plt.subplots(1,3, sharex='col', sharey='row',figsize=(18, 16)) 对于这种特定情况
    • 不起作用。在我的例子中改变 figsize 只会改变纵横比。总图的宽度保持不变
    • 这对于太大而无法放入页面的数字是正确的,然后缩放停止。正如您所指出的,它对于更改纵横比仍然很有用。
    • 将 dpi 增加到 '200' 比仅仅改变图形大小提供了更好的结果。
    • 是的,请参阅下面的@Hagne。
    【解决方案3】:

    我发现%matplotlib notebook 比内联 Jupyter 笔记本更适合我。

    请注意,如果您之前使用的是%matplotlib inline,则可能需要重新启动内核。

    2019 年更新: 如果您正在运行 Jupyter Lab,您可能希望使用 %matplotlib widget

    【讨论】:

    • 也许这在某些情况下有效,但是当我在我的身上尝试这个时,它给了我一个带有熊猫数据框 df.plot() 的空白图像。我不得不回到%matplotlib inline
    • @tsando 我看到了一个问题,即在不重新启动内核的情况下从%matplotlib inline 切换到%matplotlib notebook 会产生空白输出。从%matplotlib notebook 切换到%matplotlib inline 工作正常。
    • 谢谢@SlimCheney,我确认你说的是真的——如果你重启内核就可以了
    • 请注意,%matplotlib notebook 不再适用于 Jupyter Lab
    • 在我关注the instructions on the README(尤其是jupyter labextension install @jupyter-widgets/jupyterlab-manager)之前,我在%matplotlib widget 上遇到了很多麻烦。
    【解决方案4】:

    如果您只想让人物的图像看起来更大而不改变人物的整体外观,请提高人物分辨率。按照大多数其他答案中的建议更改图形大小会改变外观,因为字体大小不会相应地缩放。

    import matplotlib.pylab as plt
    plt.rcParams['figure.dpi'] = 200
    

    【讨论】:

    • 哇,这正是我想要的。
    【解决方案5】:

    问题是关于matplotlib,但为了任何最终来到这里的 R 用户,给出了与语言无关的标题:

    如果您使用的是 R 内核,只需使用:

    options(repr.plot.width=4, repr.plot.height=3)
    

    【讨论】:

      【解决方案6】:

      调整一个图形的大小:

      import matplotlib.pyplot as plt
      
      fig=plt.figure(figsize=(15, 15))
      

      要更改默认设置,从而更改所有绘图:

      import matplotlib.pyplot as plt
      
      plt.rcParams['figure.figsize'] = [15, 15]
      
      

      【讨论】:

        【解决方案7】:

        使用类似的东西:

        import matplotlib.pyplot as plt
        %matplotlib inline
        plt.subplots(figsize=(18,8 ))
        plt.subplot(1,3,1)
        plt.subplot(1,3,2)
        plt.subplot(1,3,3)
        

        命令的输出

        【讨论】:

          【解决方案8】:

          可以将绘图缩放到整个单元格宽度。

          1. 主要绘制折线图时使用svg格式而不是位图:
          %config InlineBackend.figure_format = 'svg'
          
          1. 强制绘图为 100% 宽度(粘贴到空单元格中):
          %%html
          <style>
          .output_svg div{
            width: 100% !important;
            height: 100% !important;
          }
          </style>
          
          1. 您可能还想根据其他答案更改纵横比或其他参数以获得更好的洞察力。

          它没有使用公共 API,可能有一天会停止工作。

          【讨论】:

            【解决方案9】:

            一次性调整图形大小的一个小而重要的细节(正如上面的几位评论者报告的“这对我不起作用”):

            您应该在定义实际情节之前执行 plt.figure(figsize=(,)) 。例如:

            这应该根据您指定的 figsize 正确调整绘图的大小:

            values = [1,1,1,2,2,3]
            _ = plt.figure(figsize=(10,6))
            _ = plt.hist(values,bins=3)
            plt.show()
            

            而这将显示默认设置的情节,似乎“忽略”了 figsize:

            values = [1,1,1,2,2,3]
            _ = plt.hist(values,bins=3)
            _ = plt.figure(figsize=(10,6))
            plt.show()
            

            【讨论】:

              【解决方案10】:

              “绘图重叠”的快速解决方法是使用 plt.tight_layout():

              示例(以我为例)

              for i,var in enumerate(categorical_variables):
                  plt.title(var)
                  plt.xticks(rotation=45)
                  df[var].hist()
                  plt.subplot(len(categorical_variables)/2, 2, i+1)
              
              plt.tight_layout()
              

              【讨论】:

                猜你喜欢
                • 2016-08-05
                • 1970-01-01
                • 2018-01-10
                • 2021-11-15
                • 1970-01-01
                • 2018-09-06
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多