如果我在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文件中得到了如下内容:

我想用红色圆圈中显示的“人物标题”来解决这个问题。如果我将0.04值设置为负值,则标题用完纸张。
我还想通过将子图(绿色圆圈)的标题移动到图中来节省一些空间。你知道我怎么才能实现这一点吗?
谢谢你的帮助。
发布于 2018-07-12 02:22:35
尝试在fig.savefig("example.pdf")之前添加下面的行。
plt.tight_layout()您的脚本中有它,但它应该在文本之后
发布于 2018-07-13 01:57:07
看起来您正在尝试为整个图形设置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")通过向set_title函数提供pad参数,可以调整绘图标题的垂直位置。给出一个负值会将标题推入图中,你需要反复试验才能找到有效的值。
将所有这些放在一起(使用虚构的数据):
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")这就给出了:

https://stackoverflow.com/questions/51288628
复制相似问题