November 11, 2014 Stardate: 68327.4 Tagged as: Python Matplotlib

This week I had to make a “burn chart”, essentially a chart showing amount of work per week. Since the weeks are discrete time steps I need a step function. I started playing with horizontal and vertical lines but luckily I quickly found that matplotlib has a step function. Unfortunately, it didn’t quite act as I thought.

There are there options for the drawstyle:

- “steps”, which is the same as “steps-pre”
- “steps-mid”
- “steps-post”

Assume the x-vector and y-vector for plotting is

```
X = [x1, x2, x3, x4]
Y = [y1, y2, y3, y4]
```

**steps**

- In this option y2 starts at x1, y3 starts at x2, y4 starts at x3 and ends at x4.

**steps-mid**

- In this option y1 starts at x1, y2 starts at mid-point between x1 and x2, y3 starts at mid-point between x2 and x3, y4 starts at mid-point between x3 and x4.

**steps-post**

- In this option y1 starts at x1, y2 starts at x2, y3 starts at x3, y4 starts at x4.

For me, ‘steps-post’ makes the most sense to understand. Below is code to illustrate the options.

In [1]:

```
%matplotlib inline
from matplotlib import pylab as plt
```

In [2]:

```
# make some date
x = [0, 10, 20, 30, 40]
y = [0, 10, 20, 30, 40]
# disregard, this is my personal "make pretty" function
fig, ax = myfig()
# plot out the options
plt.plot(x, y, drawstyle='steps', linestyle='-', label='steps-pre aka steps', alpha=0.5,)
plt.plot(x, y, drawstyle='steps-mid', linestyle='--', label='steps-mid', alpha=0.5,)
plt.plot(x, y, drawstyle='steps-post', linestyle=':', label='steps-post', alpha=0.5,)
plt.xlim([0,45])
plt.legend(loc='upper left')
plt.show()
```

In [4]:

```
%reload_ext version_information
%version_information ipython, pandas, matplotlib
```

Out[4]: