【问题标题】:Avoid overlapping between figure title and axis titles避免图形标题和轴标题重叠
【发布时间】:2019-08-05 06:51:30
【问题描述】:

编辑

我终于解决了这个问题,原来这都是 PyCharm 中 SciView 功能的一个错误,但是按照@Bazingaa 的建议保存图像并添加任何一个解决方案,即constrained_layouttight_layout 已经解决了对我来说,所以这个问题可以结束了。 谢谢大家的帮助:)

问题

我知道以前有人问过这个问题,例如 herehere。但是,由于某种原因,到目前为止,所提供的解决方案都没有对我有用。

我有一个带有两个子图的图,每个图都有自己的标题,图也有标题。问题是图形的标题与坐标轴的标题重叠。

这里是示例代码:

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(1, 2, figsize=(8, 3))
# fig, ax = plt.subplots(1, 2, figsize=(8, 3), constrained_layout=True)

data = np.random.normal(0, 1, 100)

fig.suptitle('Comparison of distribution in different pieces')

ax[0].set_title('Original distributions')
ax[0].hist(x=data, density=True,
           edgecolor='k')

ax[1].set_title('Standardized distribution')
ax[1].hist(x=data, density=True,
           edgecolor='k')

plt.tight_layout()
plt.show()

如您所见,我已经在使用plt.tight_layout(),并且我尝试使用plt.adjust_subplots() 增加上边距,并将图中的constrained_layout 参数设置为True,但我得到的结果完全相同无论我如何更改这些函数的参数,甚至不调用它们中的任何一个,都可以生成图像。

这里是output image

此外,任何有关此代码的建议或更正将不胜感激,因为我仍然是 matplotlib 的新手。

附:感谢@Bazingaa 让我以他的代码为例来解决我的问题。

【问题讨论】:

  • 如果您使用的是最新的 matplotlib,请尝试使用约束布局而不是紧凑布局
  • @JodyKlymak 也试过了,但是没用,结果一模一样...

标签: python matplotlib


【解决方案1】:

您可以使用 y 关键字指定主标题 (suptitle) 的 y 位置。下面是一个示例答案。

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(1, 2, figsize=(8, 3))  # specify figsize later

data = np.random.normal(0, 1, 100)

fig.suptitle('Comparison of distribution in different pieces', y=1.05)

ax[0].set_title('Original distributions')
ax[0].hist(x=data, density=True,
           edgecolor='k')

ax[1].set_title('Standardized distribution')
ax[1].hist(x=data, density=True,
           edgecolor='k')

plt.tight_layout()
plt.show()

【讨论】:

  • 感谢您的回答@Bazingaa。我尝试了您的解决方案,但它也不起作用,即使在您提供的代码中,也没有出现在图中指定 y 高于 1.0 的字幕。我认为这可能与 PyCharm 中的绘图遮阳板有关,这是我用于此任务的 IDE,所以我将尝试在 IDE 之外找出它。
  • @user3897600:在这种情况下,我建议您在问题中包含一个完整的最小代码,以重现您的问题
  • @user3897600:如果保存图呢?
  • 你介意我借用你的代码作为例子吗?它完全重现了我的问题。我也试过保存这个数字,我得到了同样的结果。
  • @user3897600: 当然,做我的客人
【解决方案2】:

您可以使用rect 关键字减少tight_layout() 用于顶部子图的空间,例如:

plt.tight_layout(rect=[0, 0, 0, .95])

【讨论】:

  • 谢谢,当我保存图像时,虽然在 PyCharm 的 SciView 中它仍然不起作用,但它仍然有效。再次,谢谢你:)
【解决方案3】:

编辑:糟糕,抱歉,没有阅读您的更新。

这对我有用:

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(1, 2, figsize=(8, 3), constrained_layout=True)

data = np.random.normal(0, 1, 100)
fig.suptitle('Comparison of distribution in different pieces')


ax[0].set_title('Original distributions')
ax[0].hist(x=data, density=True,
           edgecolor='k')

ax[1].set_title('Standardized distribution')
ax[1].hist(x=data, density=True,
           edgecolor='k')

plt.show()

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 2019-02-13
    • 2021-09-04
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多