如果我在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值设置为负值,则标题用完纸。
我还想通过将子图的标题(绿色圆圈)移到图中来节省一些空间。知道我怎么能实现吗?
感谢帮助。
答案 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")