RicardoC
RicardoC

Reputation: 109

Matplotlib display grid line at bottom instead of spine

I'm trying to reproduce the following image using matplotlib

image to reproduce

I figured I have two options to deal with the top and bottom grid lines: format the top/bottom spine to match the formatting of the grid lines, or turn off all spines and just display grid lines. I've gone with the latter, as it seems more straightforward:

ax.spines[:].set_visible(False)

ax.set_axisbelow(True)
ax.grid(True, axis='y', color='#9E9E9E')

This works for the top grid line, but the bottom of the plot displays the tick marks but not the bottom grid line:

matplotlib plot

Is it possible to make a grid line also appear at the bottom without changing the y-limits?

Upvotes: 0

Views: 724

Answers (1)

JohanC
JohanC

Reputation: 80289

ax.grid() has a parameter clip_on= that can be set to False to avoid clipping by the axes borders.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
bars = ax.bar(['left', 'right'], [13160, 11569], color=['dimgrey', 'goldenrod'])
ax.bar_label(bars)
ax.spines[:].set_visible(False)
ax.set_axisbelow(True)
ax.grid(True, axis='y', color='#9E9E9E', clip_on=False)
ax.set_ylim(ymin=10000)
ax.tick_params(length=0)  # hide tick marks
ax.axhline(10968, color='dodgerblue', lw=1.5)
ax.set_yticks([10000, 10968, 12000, 13000, 14000])
ax.get_yticklabels()[1].set_color('dodgerblue')
plt.show()

grid with clip_on=False

Upvotes: 1

Related Questions