The order of commands in the code is a bit chaotic.
- You need to define a figure, before the plotting command (otherwise a second figure is produced).
- You also need to call
tight_layout after setting the ticklabels, such that the long ticklabel can be accounted for.
- To have the tick at position 0 match the position of the boxplot, it would need to be set to that position (
pos=[0])
Those changes would lead to the following plot
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rayleigh(scale=7, size=100)
fig = plt.figure(figsize=(5, 2), dpi=100)
plt.boxplot(data, False, sym='rs', vert=False, whis=0.75, positions=[0])
plt.yticks([0],['Average Occupancy per slot'])
plt.tight_layout()
plt.show()

You may then change the widths of the boxplot(s) to match the desired outcome, e.g.
plt.boxplot(..., widths=[0.75])

You may of course put your plot in a subplot, not to have the axes fill the entire space of the figure, e.g.
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rayleigh(scale=7, size=100)
fig = plt.figure(figsize=(5, 3), dpi=100)
ax = plt.subplot(3,1,2)
ax.boxplot(data, False, sym='rs', vert=False, whis=0.75, positions=[0], widths=[0.5])
plt.yticks([0],['Average Occupancy per slot'])
plt.tight_layout()
plt.show()

y-direction? Try playing withplt.ylim().tight_layout()is for managing space between subplots.