Gurfuffle
Gurfuffle

Reputation: 784

How to show only the outline of a bar plot matplotlib

I'm plotting data as a bar plot in matplotlib and am trying to only show the outline of the bars, so that it appears as a 'stepped graph' of the data.

I've added my code below along with an image of the desired output.

plt.bar(x, y, align='center', width=0.1, edgecolor='black', color='none')

The plot I have:

Current Plot

The plot I would like:

enter image description here


Are there any other libraries that may be able to produce this? The bar keyword arguments don't seem to have anything that can.

Upvotes: 6

Views: 14941

Answers (1)

JohanC
JohanC

Reputation: 80319

Your image looks like a function that is horizontal around each x,y value. The following code simulates this:

  • for every x,y: create two new points one at x-0.5 and one at x+0.5, both with the same y
  • to close the shape at the ends, add (x[0]-0.5, 0) at the start and (x[-1]+0.5, 0) at the end.
import numpy as np
from matplotlib import pyplot as plt

x = np.arange(0, 30, 1)
y = np.random.uniform(2, 10, 30)
xs = [x[0] - 0.5]
ys = [0]
for i in range(len(x)):
    xs.append(x[i] - 0.5)
    xs.append(x[i] + 0.5)
    ys.append(y[i])
    ys.append(y[i])
xs.append(x[-1] + 0.5)
ys.append(0)
plt.plot(xs, ys, color='dodgerblue')
# optionally color the area below the curve
plt.fill_between(xs, 0, ys, color='gold')

PS: @AsishM. mentioned in the comments that matplotlib also has its own step function. If that function fulfils, please use that one. If you need some extra control or variation, this answer could give a start, such as coloring the area below the curve or handling the shape at the ends.

example plot

Upvotes: 3

Related Questions