Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 477
Gurfuffle Avatar asked Dec 22 '19 17:12

Gurfuffle


People also ask

How do I show the values of a bar in Matplotlib?

Call matplotlib. pyplot. barh(x, height) with x as a list of bar names and height as a list of bar values to create a bar chart. Use the syntax “for index, value in enumerate(iterable)” with iterable as the list of bar values to access each index, value pair in iterable.

How do I hide lines in Matplotlib?

To hide lines in Matplotlib, we can use line. remove() method.

How do you make a histogram border?

Re: Histogram Bar Outline If so, two-finger click on a bar and select "Format data series". Then press on the "bucket" and "Border" and select the format you want.


1 Answers

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

like image 140
JohanC Avatar answered Nov 15 '22 00:11

JohanC