I'm a bit more informed now and I feel like the answer given is not completely correct, so I think I should answer my own question.
librosa.filters.mel returns a matrix with the shape (n_mels, n_fft/2 +1). This means each row in the matrix is a mel. The columns are the weight for each frequency for the mel filter bank. The frequency is in terms of cycles up to number of n_fft, we throw away half of them due to aliasing (nyquist theorem).
This means in order to plot the mels correctly the matrix needs to be transposed. As we effectively want N different plots where N is the number of mels.
plt.plot(mel.T)
This gives the following image:
Note that this set of mel filter banks is still not what is expected. This is because the Librosa uses a normalised version of mel-filter banks, this means that each of the mels have an area of 1 instead of the traditional equal height of 1. The matrix returned from librosa can be transformed into the equal height mel-filter bank by:
mels /= np.max(mels, axis=-1)[:, None]
And then the plot looks like this: