使用 twiny 时,Python Matplotlib 图形标题与轴标签重叠

我试图用 twiny 在同一个图上绘制两个不同的量,如下所示:

fig = figure()
ax = fig.add_subplot(111)
ax.plot(T, r, 'b-', T, R, 'r-', T, r_geo, 'g-')
ax.set_yscale('log')
ax.annotate('Approx. sea level', xy=(Planet.T_day*1.3,(Planet.R)/1000), xytext=(Planet.T_day*1.3, Planet.R/1000))
ax.annotate('Geostat. orbit', xy=(Planet.T_day*1.3, r_geo[0]), xytext=(Planet.T_day*1.3, r_geo[0]))
ax.set_xlabel('Rotational period (hrs)')
ax.set_ylabel('Orbital radius (km), logarithmic')
ax.set_title('Orbital charts for ' + Planet.N, horizontalalignment='center', verticalalignment='top')




ax2 = ax.twiny()
ax2.plot(v,r,'k-')
ax2.set_xlabel('Linear speed (ms-1)')


show()

数据显示得很好,但是我有一个问题,数字标题与第二个 x 轴上的轴标签重叠,所以它几乎看不清(我想在这里贴一个图片示例,但是我还没有一个足够高的代表性)。

我想知道是否有一种简单的方法可以将标题直接向上移动几十个像素,这样图表看起来更漂亮。

234478 次浏览

忘记使用 plt.title,把文本直接放在 plt.text上。下面是一个过于夸张的例子:

import pylab as plt


fig = plt.figure(figsize=(5,10))


figure_title = "Normal title"
ax1  = plt.subplot(1,2,1)


plt.title(figure_title, fontsize = 20)
plt.plot([1,2,3],[1,4,9])


figure_title = "Raised title"
ax2  = plt.subplot(1,2,2)


plt.text(0.5, 1.08, figure_title,
horizontalalignment='center',
fontsize=20,
transform = ax2.transAxes)
plt.plot([1,2,3],[1,4,9])


plt.show()

enter image description here

我不确定它是否是 matplotlib 后期版本中的一个新特性,但至少对于1.3.1来说,这是简单的:

plt.title(figure_title, y=1.08)

这也适用于 plt.suptitle(),但是还不适用于 plt.xlabel()等等。

ax.set_title('My Title\n', fontsize="15", color="red")
plt.imshow(myfile, origin="upper")

如果将 '\n'放在标题字符串的正后方,则绘制的图就在标题下方。这可能也是一个快速的解决方案。

我遇到了一个问题,X 标签与一个次要情节标题重叠; 这对我很有效:

import matplotlib.pyplot as plt
fig, ax = plt.subplots(2, 1)
ax[0].scatter(...)
ax[1].scatter(...)
plt.tight_layout()
.
.
.
plt.show()

之前

enter image description here

之后

enter image description here

参考文献:

plt.show()之前使用 plt.tight_layout(),效果很好。

你可以在这种情况下使用垫:

ax.set_title("whatever", pad=20)

一个临时的解决方案,如果你不想进入 xy的立场,你的头衔。

跟踪对我很管用。

plt.title('Capital Expenditure\n') # Add a next line after your title

好样的。

plt.show()之前使用 plt.tight_layout()对我来说效果很好。

您甚至可以通过添加一个填充来使其更好和可见

ax.set_title("title", pad=15)