28/11/09 @ 00:17 (+0100), thus spake Mike Anderson:
Hi,
How can I put the bottom axis on top (or on top AND on bottom) for a barh plot?
I'm trying to mimic this, made with gnuplot:
http://www.hep.wisc.edu/cms/comp/cmsprod/dCacheUserUsage.png
within matplotlib, and I've come close,
http://www.hep.wisc.edu/cms/comp/cmsprod/diskUserUsage.png
Also, is it possible to just have grid lines in one direction (say, vertical), I don't think the horizontal grid is necessary.
It's somewhat counter-intuitive, but it can be done.
You have to create some "twin" axes with the "twiny" option,
then make the plot on the twin axes so it will use the
top axis. The bottom axis still have to be adjusted manually
to make it match the top one and remove the labels.
See this example:
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
data = [21, 17, 18, 15, 14, 11, 9, 8, 4, 6, 7, 4, 5, 1, 3, 2, 0, 0]
names = ['%s%s' % (a, b)
for a in 'abcdefg' for b in 'abcdefg'][:len(data)]
xlim = (0, max(data)+2)
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
ax2 = ax1.twiny()
# actual plot
ax2.barh(range(len(data)), data[::-1], 1, align='center', color='red')
# x-axis
ax2.set_xlim(xlim)
ax1.set_xlim(xlim)
ax1.xaxis.set_major_formatter(ticker.NullFormatter())
# y-axis
ax2.set_ylim(-0.5, len(data)-1+0.5)
ax2.yaxis.set_major_locator(ticker.FixedLocator(range(len(data))))
ax2.yaxis.set_major_formatter(ticker.FixedFormatter(names[::-1]))
# grid
ax2.set_axisbelow(True)
ax1.set_axisbelow(True)
ax1.grid(True)
plt.show()
If you want only a vertical grid, use
"ax1.xaxis.grid(True)" instead of "ax1.grid(True)".
Bye.