【问题标题】:Showing text outside the figure limits显示超出图形限制的文本
【发布时间】:2014-05-08 03:06:33
【问题描述】:

我正在尝试在子图面板顶部添加文本作为标签:

import numpy as np
import matplotlib.pyplot as plt
# Create figure
fig, axs = plt.subplots(5, 4, figsize=(6.83, 9.19))
# Plot something
for axes in axs.ravel():
    axes.plot(range(5))
# Add some labels
fig.text(0.25, 1.01, "Label #1", fontsize=10, fontweight='bold', ha='center')
fig.text(0.75, 1.01, "Label #2", fontsize=10, fontweight='bold', ha='center')
fig.text(0.125, 0.99, "Sublabel #1", fontsize=10, ha='center')
fig.text(0.375, 0.99, "Sublabel #2", fontsize=10, ha='center')
fig.text(0.625, 0.99, "Sublabel #3", fontsize=10, ha='center')
fig.text(0.875, 0.99, "Sublabel #4", fontsize=10, ha='center')
# Save figure
fig.tight_layout()
fig.savefig('./temp.png', dpi=300)

但是,因为标签在图上方,所以在保存的图中看不到(尽管在 ipython qtconsole 上可以看到)。谁能帮我解决这个问题?

【问题讨论】:

    标签: python text matplotlib plot


    【解决方案1】:

    再次感谢 Saullo 的回答,我认为这回答了我最初的问题。但是,我最终使用了不同的解决方案,因为我认为这可以更好地控制页面大小:

    import numpy as np
    import matplotlib.pyplot as plt
    # Create figure
    fig, axs = plt.subplots(5, 4, figsize=(6.83, 9.19))
    # Plot something
    for axes in axs.ravel():
        axes.plot(range(5))
    # Add some labels
    fig.text(0.25, 1., "Label #1", fontsize=10, fontweight='bold', ha='center', va='top')
    fig.text(0.75, 1., "Label #2", fontsize=10, fontweight='bold', ha='center', va='top')
    fig.text(0.125, 0.98, "Sublabel #1", fontsize=10, ha='center', va='top')
    fig.text(0.375, 0.98, "Sublabel #2", fontsize=10, ha='center', va='top')
    fig.text(0.625, 0.98, "Sublabel #3", fontsize=10, ha='center', va='top')
    fig.text(0.875, 0.98, "Sublabel #4", fontsize=10, ha='center', va='top')
    # Save figure
    fig.tight_layout()
    fig.subplots_adjust(top=.95)
    fig.savefig('./temp.png', dpi=300)
    

    基本上,诀窍是:

    1)将va='top'添加到文本中,并使文本的y坐标

    2) 使用fig.subplots_adjust(top=.95) 为文本节省空间。注意:这必须在fig.tight_layout()之后!

    【讨论】:

      【解决方案2】:

      你可以这样做:

      fig.savefig('./temp.png', dpi=300, bbox_inches='tight')
      

      保存时调整图形。您也可以从一开始就正确设置图形大小,在“创建图形”之前添加:

      plt.figure(figsize=(width, height))
      

      【讨论】:

      • 非常感谢! bbox_inches='tight' 效果很好。至于设置图形大小属性 - 我已经在 plt.subplots(fig=(width, height)) 中做到了,但它没有帮助。因为无论设置多大的图形,子图总是会填满它。
      • 还有一个问题——使用bbox_inches='tight',图形大小不受控制。有没有办法指定 bbox 大小?
      • @ShawnWang 是完全不受控制还是只是扩展以使文本超出限制
      • 您好 Saullo,感谢您的帮助!它并非完全不受控制,因为它只是切割白色边距以适合文本,这在垂直方向上非常棒。在水平方向上,我想保持相同的宽度......但这很小。感谢您让它工作! :)
      • 我不认为savefig 可以将figsize 作为关键字...尝试过它并被忽略了。
      猜你喜欢
      • 1970-01-01
      • 2020-08-13
      • 2016-11-15
      • 1970-01-01
      • 2018-05-06
      • 2014-09-29
      • 1970-01-01
      • 2013-10-25
      • 2021-06-28
      相关资源
      最近更新 更多