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), xytext=(Planet.T_day*1.3, r_geo)) 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.
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()
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:
This also works for
plt.suptitle(), but not (yet) for
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.
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.scatter(...) ax.scatter(...) plt.tight_layout() . . . plt.show()
plt.show(). It works well.
You can use pad for this case:
A temporary solution if you don’t want to get into the
y position of your title.
Following worked for me.
plt.title('Capital Expendituren') # Add a next line after your title