避免图形标题和轴标题之间重叠

时间:2019-03-14 11:33:29

标签: python matplotlib

编辑

我终于解决了这个问题,事实证明这全是PyCharm中SciView功能的错误,但是将图像保存为@Bazingaa建议并添加了两个解决方案,即constrained_layout或{{1} }已为我解决了该问题,因此可以关闭该问题。 谢谢大家的帮助:)

问题

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

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

这是示例代码:

tight_layout

如您所见,我已经在使用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()参数设置为{{1} },但是无论我如何更改这些函数的参数,甚至不调用它们中的任何一个,我都能得到完全相同的图像。

这里是output image

此外,由于我还是matplotlib的新手,因此对此代码的任何建议或更正将不胜感激。

P.S。感谢@Bazingaa让我以他的代码为我的问题的示例。

3 个答案:

答案 0 :(得分:2)

您可以使用suptitle关键字为主要标题(y)指定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()

enter image description here

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

这对我有用:

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()

suptitle