According to the source code, the sorting is defined by _try_sort(data.columns) and cannot be changed by an argument. You can do what Claudiu Creanga suggested. However, in my test, that won't give you a (2, 6) layout. If you really want that layout and what pandas.DataFrame.hist does, the following code may be helpful:
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
columns_all = pd.DataFrame([np.random.randn(1000)] * 7).T
columns_all.columns = ['m1_h', 'm2_h', 'm3_h', 'm4_h', 'm5_h', 'm6_h', 'm6_f']
plt.clf()
fig = plt.figure(figsize=(16, 4))
axarr = []
for i, col in enumerate(columns_all.columns):
if i // 6 > 0:
sharex = axarr[i % 6]
plt.setp(axarr[i % 6].get_xticklabels(), visible=False)
else:
sharex = None
if i % 6 > 0:
sharey = axarr[i // 6]
else:
sharey = None
ax = fig.add_subplot(2, 6, i + 1, sharex=sharex, sharey=sharey)
axarr.append(ax)
if i % 6 > 0:
plt.setp(ax.get_yticklabels(), visible=False)
ax.hist(columns_all[col].dropna().values)
ax.set_title(col)
ax.grid(True)
fig.subplots_adjust(wspace=0.3, hspace=0.3)
plt.show()
