问题
I am trying to plot two separate quantities on the same graph using twiny as follows:
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()
and the data is presented fine, but I am having the problem that the figure title is overlapping with the axes labels on the secondary x axis so that it\'s barely legible (I wanted to post a picture example here, but I don\'t have a high enough rep yet).
I\'d like to know if there\'s a straightforward way to just shift the title directly up a few tens of pixels, so that the chart looks prettier.
回答1:
I'm not sure whether it is a new feature in later versions of matplotlib, but at least for 1.3.1, this is simply:
plt.title(figure_title, y=1.08)
This also works for plt.suptitle()
, but not (yet) for plt.xlabel()
, etc.
回答2:
Forget using plt.title
and place the text directly with plt.text
. An over-exaggerated example is given below:
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()

回答3:
ax.set_title('My Title\n', fontsize="15", color="red")
plt.imshow(myfile, origin="upper")
If you put '\n'
right after your title string, the plot is drawn just below the title. That might be a fast solution too.
回答4:
I was having an issue with the x-label overlapping a subplot title; this worked for me:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(2, 1)
ax[0].scatter(...)
ax[1].scatter(...)
plt.tight_layout()
.
.
.
plt.show()
before
after
reference:
- https://matplotlib.org/users/tight_layout_guide.html
回答5:
Just use plt.tight_layout()
before plt.show()
. It works well.
来源:https://stackoverflow.com/questions/12750355/python-matplotlib-figure-title-overlaps-axes-label-when-using-twiny