To remove frame in figure, I write
frameon=False
works perfect with pyplot.figure, but with matplotlib.Figure it
Building up on @peeol's excellent answer, you can also remove the frame by doing
for spine in plt.gca().spines.values():
spine.set_visible(False)
To give an example (the entire code sample can be found at the end of this post), let's say you have a bar plot like this,
you can remove the frame with the commands above and then either keep the x- and ytick labels (plot not shown) or remove them as well doing
plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='off', labelbottom='on')
In this case, one can then label the bars directly; the final plot could look like this (code can be found below):
Here is the entire code that is necessary to generate the plots:
import matplotlib.pyplot as plt
import numpy as np
plt.figure()
xvals = list('ABCDE')
yvals = np.array(range(1, 6))
position = np.arange(len(xvals))
mybars = plt.bar(position, yvals, align='center', linewidth=0)
plt.xticks(position, xvals)
plt.title('My great data')
# plt.show()
# get rid of the frame
for spine in plt.gca().spines.values():
spine.set_visible(False)
# plt.show()
# remove all the ticks and directly label each bar with respective value
plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='off', labelbottom='on')
# plt.show()
# direct label each bar with Y axis values
for bari in mybars:
height = bari.get_height()
plt.gca().text(bari.get_x() + bari.get_width()/2, bari.get_height()-0.2, str(int(height)),
ha='center', color='white', fontsize=15)
plt.show()