Matplotlib“ savefig”为pdf,文本覆盖

时间:2018-07-11 14:54:59

标签: python matplotlib image-resizing subplot

如果我在python中运行此代码:

titles = ctf01[0,1:] 

fig = plt.figure(figsize=(11.69,8.27), dpi=100)

for num in range(len(titles)):

    ax = fig.add_subplot(3,4,num+1)

    ax.plot(ctf03[1:,num+1], ctf0102[:,num], 'ro')

    ax.set_title(titles[num])

plt.tight_layout()

fig.text(0.5, 0.04, 'CTF12', ha='center')

fig.text(0.04, 0.5, 'CTF3', va='center', rotation='vertical')

fig.savefig("example.pdf")

我在pdf文件中得到了这个

enter image description here

我想用红色圆圈中显示的“图形标题”解决问题。 如果我将0.04值设置为负值,则标题用完纸。

我还想通过将子图的标题(绿色圆圈)移到图中来节省一些空间。知道我怎么能实现吗?

感谢帮助。

2 个答案:

答案 0 :(得分:0)

尝试在以下行的fig.savefig("example.pdf")之前添加。

plt.tight_layout()

您已在脚本中添加了它,但应该在文本之后

答案 1 :(得分:0)

您似乎正在尝试为整个图形设置x和y标签,这是不可能的,因为它们只能在Axes对象上设置。幸运的是,我们可以通过创建一个“不可见”子图来解决该问题,该子图填充整个区域并在其上设置标签。

在绘制了子图之后,您将使用以下方法创建不可见的图:

label_ax = fig.add_subplot(111, frameon=False)

frameon参数阻止它绘制默认样式添加的框。然后,您告诉它不要绘制刻度线,并使刻度线标签不可见(我们不能只是删除它们,因为这样会弄乱间距)。

label_ax.tick_params(bottom=False, left=False, labelcolor="none")

最后,设置标签:

label_ax.set_xlabel("CTF12")
label_ax.set_ylabel("CTF3")

您可以通过为pad函数提供set_title自变量来调整图标题的垂直位置。赋予负值会将标题推入情节,您需要反复试验才能找到合适的值。

将所有内容(包含虚构数据)放在一起:

fig = plt.figure(figsize=(11.69, 8.27), dpi=100)
for i in range(10):
    ax = fig.add_subplot(3, 4, i + 1)
    ax.plot([1, 2, 3, 4, 5], "ro")
    ax.set_title("Plot {}".format(i), pad=-15)

label_ax = fig.add_subplot(111, frameon=False)
label_ax.tick_params(bottom=False, left=False, labelcolor="none")
label_ax.grid(False)  # In case the current style displays a grid.
label_ax.set_xlabel("CTF12")
label_ax.set_ylabel("CTF3")

fig.tight_layout()
fig.savefig("example.pdf")

哪个给: Subplots with figure axis labels