В качестве оценки: у вас есть 12 строк и 31 столбец.Бары занимают 80% пространства юнита.Полоса должна иметь ширину не менее двух пикселей, чтобы ее можно было увидеть на экране.Обычная фигура имеет 10% полей с обеих сторон осей и имеет 100 точек на дюйм.Тогда вам нужна ширина фигуры 2 * 12 * 31 / 0,8 ** 2/100 ~ = 12 дюймов.Другими словами, если у вас более 31 столбца, некоторые столбцы могут не отображаться на рисунке шириной 12 дюймов.
Чтобы сделать это воспроизводимым, давайте рассмотрим следующий случай, когда у нас есть N=20
строк иколонны.
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
N=20
df = pd.DataFrame(np.diag(np.ones(N)))
ax = df.plot.bar(legend=False)
plt.show()

Здесь некоторые столбцы не видны.Мы можем рассчитать, что для 20 строк и 20 столбцов эта цифра должна иметь ширину 2*N**2/0.8**2/100. == 12.5
дюйм.
N=20
df = pd.DataFrame(np.diag(np.ones(N)))
w = 2*N**2/0.8**2/100.
plt.rcParams.update({"figure.figsize" : (w, 4.8), "figure.dpi" : 100})
ax = df.plot.bar(legend=False)
Теперь она действительно показывает все столбцы.

Конечно, рисунок нельзя сделать сколь угодно большим, поэтому вместо этого можно убедиться, что у стержней есть линия края, которая будет нарисована независимо от протяженности прямоугольника.
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
N=20
df = pd.DataFrame(np.diag(np.ones(N)))
ax = df.plot.bar(legend=False)
for bar in ax.patches:
bar.set_linewidth(0.72)
bar.set_edgecolor(bar.get_facecolor())
plt.show()
