Matplotlib Ref Advanced Plots
* * Matplotlib Reference](#)
In addition to basic plotting functions such as plot() and bar(), Matplotlib provides a variety of specialized plotting functions for step plots, stem plots, stacked area charts, polar plots, and more.
## Function Overview
| Function | Description |
| --- | --- |
| step() | Draw a step plot (piecewise constant data changes) |
| stem() | Draw a stem plot (vertical lines with top markers) |
| eventplot() | Draw an event plot (multiple horizontal lines marking event positions) |
| stackplot() | Draw a stacked area chart |
| broken_barh() | Draw a horizontal broken bar chart (Gantt chart style) |
| vlines() / hlines() | Draw multiple vertical/horizontal reference lines |
| fill() | Draw filled polygons |
| polar() | Plot in polar coordinates |
| loglog() / semilogx() / semilogy() | Logarithmic coordinate line plots |
| grouped_bar() | Grouped bar chart (3.10+ new feature) |
| bar_label() / pie_label() | Add value labels to bar charts/pie charts |
* * *
## step() - Step Plot
matplotlib.pyplot.step(x, y, *args, where='pre', **kwargs)
| Parameter | Description |
| --- | --- |
| x, y | Data point coordinates |
| where | Step position: 'pre' (before), 'post' (after), 'mid' (middle) |
## Example
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0,10,0.5)
y = np.sin(x)
fig, ax = plt.subplots(figsize=(8,4), layout='constrained')
# Compare three where modes
ax.plot(x, y,'gray', alpha=0.3, label='Original (plot)')
ax.step(x, y, where='pre', label='where="pre"', linewidth=2)
ax.step(x, y, where='post', label='where="post"', linewidth=2)
ax.step(x, y, where='mid', label='where="mid"', linewidth=2)
ax.set_title('step() - Staircase Plot')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()
* * *
## stem() - Stem Plot
matplotlib.pyplot.stem(*args, linefmt=None, markerfmt=None, basefmt=None, bottom=0, orientation='vertical', **kwargs)
## Example
import matplotlib.pyplot as plt
import numpy as np
n =30
x = np.arange(n)
y = np.random.randn(n) * 2
fig,(ax1, ax2)= plt.subplots(1,2, figsize=(10,4),
layout='constrained')
# Vertical stem plot
ax1.stem(x, y, linefmt='steelblue', markerfmt='o',
basefmt='gray')
ax1.set_title('Vertical stem()')
# Horizontal stem plot
ax2.stem(x, y, linefmt='coral', markerfmt='s',
basefmt='gray', orientation='horizontal')
ax2.set_title('Horizontal stem()')
plt.show()
* * *
## stackplot() - Stacked Area Chart
matplotlib.pyplot.stackplot(x, *args, labels=None, colors=None, baseline='zero', **kwargs)
## Example
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0,10,0.1)
y1 = np.sin(x) + 2
y2 = np.cos(x) + 2
y3 =0.5 * np.sin(2*x) + 2
fig, ax = plt.subplots(figsize=(8,5), layout='constrained')
ax.stackplot(x, y1, y2, y3,
labels=['Signal 1','Signal 2','Signal 3'],
colors=['#3498db','#e74c3c','#2ecc71'],
alpha=0.7)
ax.set_title('stackplot() - Stacked Area Chart')
ax.legend(loc='upper right')
plt.show()
* * *
## vlines() / hlines() - Reference Lines
matplotlib.pyplot.vlines(x, ymin, ymax, colors=None, **kwargs) matplotlib.pyplot.hlines(y, xmin, xmax, colors=None, **kwargs)
## Example
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100)
y = np.sin(x)
fig, ax = plt.subplots(figsize=(8,4), layout='constrained')
ax.plot(x, y,'k-', linewidth=2, alpha=0.7)
# Multiple vertical lines (marking multiples of Ο)
pi_x =[np.pi,2*np.pi,3*np.pi]
ax.vlines(pi_x, ymin=-1.5, ymax=1.5,
colors='red', linestyles='--', alpha=0.5,
label='Ο multiples')
# Multiple horizontal lines (marking Β±1)
ax.hlines([-1,0,1], xmin=0, xmax=10,
colors=['gray','gray','gray'],
linestyles=['--',':','--'], alpha=0.5)
ax.set_title('vlines() and hlines()')
ax.legend()
plt.show()
* * *
## loglog() / semilogx() / semilogy() - Logarithmic Coordinates
matplotlib.pyplot.loglog(*args, **kwargs) matplotlib.pyplot.semilogx(*args, **kwargs) matplotlib.pyplot.semilogy(*args, **kwargs)
## Example
import matplotlib.pyplot as plt
import numpy as np
x = np.logspace(0,3,50)# 10^0 to 10^3
y1 = x**2
y2 = x**1.5
y3 = np.exp(x/50)
fig, axes = plt.subplots(1,3, figsize=(12,4),
layout='constrained')
# Double logarithmic
axes.loglog(x, y1,'b-', label='xΒ²')
axes.loglog(x, y2,'r--', label='xΒΉΒ·β΅')
axes.set_title('loglog()')
axes.grid(True, alpha=0.3)
axes.legend()
# x-axis logarithmic
axes.semilogx(x, y3,'green', label='exp(x/50)')
axes.set_title('semilogx()')
axes.grid(True, alpha=0.3)
# y-axis logarithmic
axes.semilogy(x, y3,'purple', label='exp(x/50)')
axes.set_title('semilogy()')
axes.grid(True, alpha=0.3)
plt.show()
* * *
## eventplot() - Event Plot
matplotlib.pyplot.eventplot(positions, orientation='horizontal', lineoffsets=1, linelengths=1, linewidths=None, colors=None, **kwargs)
## Example
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
# Event times for three channels
events_A = np.random.rand(20) * 10
events_B = np.random.rand(15) * 10
events_C = np.random.rand(25) * 10
fig, ax = plt.subplots(figsize=(8,4), layout='constrained')
ax.eventplot([events_A, events_B, events_C],
colors=['#e74c3c','#3498db','#2ecc71'],
lineoffsets=[0,1,2],# Vertical position of each line
linelengths=0.8,
linewidths=1.5)
ax.set_title('eventplot() - Event Timing Diagram')
ax.set_xlabel('Time (s)')
ax.set_yticks([0,1,2])
ax.set_yticklabels(['Channel A','Channel B','Channel C'])
plt.show()
* * *
## broken_barh() - Broken Bar Chart
matplotlib.pyplot.broken_barh(xranges, yrange, **kwargs)
## Example
import matplotlib.pyplot as plt
# Simulating a Gantt chart
tasks =[
[(0,5)],# Task 1: starts at 0, lasts 5
[(3,4)],# Task 2: starts at 3, lasts 4
[(2,3),(6,3)],# Task 3: two time periods
[(5,4)],# Task 4
[(1,2),(4,2),(8,2)],# Task 5: three time periods
]
fig, ax = plt.subplots(figsize=(8,4), layout='constrained')
colors =['#3498db','#e74c3c','#2ecc71','#f39c12','#9b59b6']
for i,(task, color)in enumerate(zip(tasks, colors)):
ax.broken_barh(task,(i - 0.4,0.8), facecolors=color)
ax.set_title('broken_barh() - Gantt-style Chart')
ax.set_xlabel('Time')
ax.set_yticks(range(5))
ax.set_yticklabels([f'Task {i+1}'for i in range(5)])
ax.grid(True, alpha=0.3)
plt.show()
* * *
## fill() - Filled Polygon
matplotlib.pyplot.fill(*args, **kwargs)
## Example
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(layout='constrained')
# Fill a diamond
x =[1,2,1,0]
y =[0,1,2,1]
ax.fill(x, y, alpha=0.5, color='steelblue',
edgecolor='black', label='Diamond')
# Fill a pentagon
theta = np.linspace(0,2*np.pi,6)
x2 =2.5 + np.cos(theta)
y2 =1 + np.sin(theta)
ax.fill(x2, y2, alpha=0.5, color='coral',
edgecolor='black', label='Pentagon')
ax.set_title('fill() - Filled Polygons')
ax.set_aspect('equal')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()
[ Matplotlib Reference](#)
YouTip