我试图使用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轴上的轴标签重叠,因此它几乎不可读(我想在这里发布图片示例,但我不知道t还有足够高的代表。)
我想知道是否可以直接将标题直接移动几十个像素,这样图表看起来更漂亮。
答案 0 :(得分:212)
我不确定它是否是matplotlib更高版本中的新功能,但至少对于1.3.1,这很简单:
plt.title(figure_title, y=1.08)
这也适用于plt.suptitle()
,但不适用于plt.xlabel()
等。
答案 1 :(得分:29)
忘记使用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()
答案 2 :(得分:4)
ax.set_title('My Title\n', fontsize="15", color="red")
plt.imshow(myfile, origin="upper")
如果您将'\n'
放在标题字符串后面,则会在标题下方绘制图表。这也许是一个快速的解决方案。
答案 3 :(得分:4)
在这种情况下,您可以使用护垫:
ax.set_title("whatever", pad=20)
答案 4 :(得分:3)
我在x标签重叠子图标题时遇到问题;这对我有用:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(2, 1)
ax[0].scatter(...)
ax[1].scatter(...)
plt.tight_layout()
.
.
.
plt.show()
参考:
答案 5 :(得分:1)
只需在plt.tight_layout()
之前使用plt.show()
。它运作良好。
答案 6 :(得分:0)
如果您不想进入标题的 x
, y
位置,这是一个临时解决方案。
以下对我有用。
plt.title('Capital Expenditure\n') # Add a next line after your title
点赞。