`stem`

function
The matplotlib `stem`

function allows creating stem plots, also known as lollipop charts, in Python. You will need to pass your input data to the function with the locations and values to create a simple stem plot in Python.

```
import matplotlib.pyplot as plt
import numpy as np
# Data
x = np.arange(2, 12, 1)
y = x ** 2
# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y)
# plt.show()
```

**Horizontal stem plot**

By default, the stem plots are displayed in vertical mode, but you can create an horizontal chart setting the `orientation`

argument to `"horizontal"`

, as in the example below.

```
import matplotlib.pyplot as plt
import numpy as np
# Data
x = np.arange(2, 12, 1)
y = x ** 2
# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y, orientation = "horizontal")
# plt.show()
```

**Bottom**

Note that the base line in red is set to zero by default, but you can override its position with the `bottom`

argument.

```
import matplotlib.pyplot as plt
import numpy as np
# Data
x = np.arange(2, 12, 1)
y = x ** 2
# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y, bottom = 60)
# plt.show()
```

The `stem`

function provides three arguments to style the plot: `linefmt`

for the lines, `markerfmt`

for the markers and `basefmt`

for the base line.

**Color of the lines**

In order to change the color of the lines you can pass a new color to the `linefmt`

argument, as in the example below.

```
import matplotlib.pyplot as plt
import numpy as np
# Data
x = np.arange(2, 12, 1)
y = x ** 2
# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y, linefmt = 'black')
# plt.show()
```

**Line style**

Note that the same argument used to change the line color can also be used to customize the line style.

```
import matplotlib.pyplot as plt
import numpy as np
# Data
x = np.arange(2, 12, 1)
y = x ** 2
# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y, linefmt = '--')
# plt.show()
```

**Color and style of the lines at the same time**

Moreover, this argument also allows to set a new color and line style at the same time, indicating a new color (e.g. `k`

for black) and line type (`--`

for a dashed line).

```
import matplotlib.pyplot as plt
import numpy as np
# Data
x = np.arange(2, 12, 1)
y = x ** 2
# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y, linefmt = 'k--')
# plt.show()
```

**Markers styling**

The `markerfmt`

argument allows customizing the color and shape of the markers of the lollipop. In the example below we are setting red (`r`

) diamonds (`D`

) as marker.

```
import matplotlib.pyplot as plt
import numpy as np
# Data
x = np.arange(2, 12, 1)
y = x ** 2
# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y, markerfmt = 'Dr')
# plt.show()
```

**Base line customization**

The base line color and style can be customized the same way as the other lines but using the `basefmt`

argument. In the following example we are setting a dotted black line.

```
import matplotlib.pyplot as plt
import numpy as np
# Data
x = np.arange(2, 12, 1)
y = x ** 2
# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y, basefmt = 'k:')
# plt.show()
```

Finally, it is worth to mention that you can create a lollipop chart by group in Python just writing a new line. In order to add a legend set the label with the `label`

argument and use the `legend`

function.

```
import matplotlib.pyplot as plt
import numpy as np
# Data
x = np.arange(2, 12, 1)
y = x ** 2
x2 = np.arange(2, 12, 1)
y2 = -y
# Stem plot
fig, ax = plt.subplots()
ax.stem(x, y, 'b', markerfmt = 'bo', label = "Group 1")
ax.stem(x2, y2, 'g', markerfmt = 'go', label = "Group 2")
ax.legend()
# plt.show()
```

See also