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.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 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.
Method 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()

Method 3
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:
Method 4
ax.set_title('My Titlen', 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.
Method 5
You can use pad for this case:
ax.set_title("whatever", pad=20)
Method 6
Just use plt.tight_layout() before plt.show(). It works well.
Method 7
A temporary solution if you don’t want to get into the x, y position of your title.
Following worked for me.
plt.title('Capital Expendituren') # Add a next line after your title
kudos.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

