Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Stem plot in matplotlib?

I want to plot(x, sin(x)) but instead of a line from (xi,yi) to (x_i+1,y_i+1) I want a vertical line to each point from (xi,0) to (xi,yi) as sometimes interpolation between the points makes no sense (e.g. quantized data) (and it looks much better with that vertical line than without).

Much like the stem plot below (from the matlab docs) but with the option of being able to turn off the circles and the "-" between points. Unfortunately, I couldn't find an appropriate plotting function in the matplotlib documentation myself.

stem plot

like image 883
arynaq Avatar asked Oct 30 '12 18:10

arynaq


1 Answers

There is a stem plot (a.k.a. lollipop plot) in the matplotlib as well.


Below you can find an example from the docs.

import matplotlib.pyplot as plt
import numpy as np

# returns 10 evenly spaced samples from 0.1 to 2*PI
x = np.linspace(0.1, 2 * np.pi, 10)

markerline, stemlines, baseline = plt.stem(x, np.cos(x), '-.')

# setting property of baseline with color red and linewidth 2
plt.setp(baseline, color='r', linewidth=2)

plt.show()

stem plot


If you want to adjust the y-position of the baseline, you can use the bottom parameter.

(adapted) Example:

import matplotlib.pyplot as plt
import numpy as np

# returns 10 evenly spaced samples from 0.1 to 2*PI
x = np.linspace(0.1, 2 * np.pi, 10)

plt.stem(x, np.cos(x), '-.', bottom=-2)

plt.show()

stem plot 2

like image 193
moooeeeep Avatar answered Sep 20 '22 11:09

moooeeeep