Matplotlib 2D Data and Statistical Plot Functions


Matplotlib 参考文档Matplotlib Reference Documentation

Functions for displaying 2D data and visualizing statistical distributions.

Function Overview

FunctionDescription
hist2d()2D Histogram
hexbin()Hexagonal binning plot (Hexbin)
stairs()Step histogram (alternative to hist's step mode)
matshow()Display a matrix in a new Figure
pcolor()Pseudocolor plot (PolyCollection)
pcolormesh()Pseudocolor plot (QuadMesh, better performance)
spy()Sparse matrix nonzero element pattern
figimage()Place an image at the Figure level
ecdf()Empirical cumulative distribution function
violinplot()Violin plot

hist2d() - 2D Histogram

matplotlib.pyplot.hist2d(x, y, bins=10, range=None, density=False,
    weights=None, cmin=None, cmax=None, *, **kwargs)

Example

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(42)
x = np.random.randn(5000)
y = x * 0.5 + np.random.randn(5000) * 0.5

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5),
                                layout='constrained')

# 2D histogram
h, xedges, yedges, im = ax1.hist2d(x, y, bins=40, cmap='Blues')
fig.colorbar(im, ax=ax1, label='Count')
ax1.set_title('hist2d()')
ax1.set_xlabel('X')
ax1.set_ylabel('Y')

# Hexagonal binning
hb = ax2.hexbin(x, y, gridsize=30, cmap='YlOrRd')
fig.colorbar(hb, ax=ax2, label='Count')
ax2.set_title('hexbin()')
ax2.set_xlabel('X')
ax2.set_ylabel('Y')

plt.show()

stairs() - Step Histogram

matplotlib.pyplot.stairs(values, edges=None, *, orientation='vertical',
    baseline=0, fill=False, **kwargs)

Example

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(42)
data = np.random.randn(500)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4),
                                layout='constrained')

# hist + stairs comparison
counts, bins = np.histogram(data, bins=30)
ax1.hist(data, bins=30, alpha=0.3, color='steelblue')
ax1.stairs(counts, bins, fill=False, color='red',
           linewidth=2, label='stairs outline')
ax1.set_title('stairs() outline on hist()')
ax1.legend()

# stairs with fill=True
ax2.stairs(counts, bins, fill=True, color='coral',
           alpha=0.7, edgecolor='black', linewidth=1)
ax2.set_title('stairs() with fill=True')

plt.show()

pcolormesh() - Pseudocolor Plot

matplotlib.pyplot.pcolormesh(*args, alpha=None, norm=None,
    cmap=None, vmin=None, vmax=None, shading=None, **kwargs)

Example

import matplotlib.pyplot as plt
import numpy as np

# Create 2D data
x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 50)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5),
                                layout='constrained')

# pcolormesh - default shading='flat' (drops last row/column)
pc1 = ax1.pcolormesh(X, Y, Z, cmap='RdYlBu',
                      shading='auto')
fig.colorbar(pc1, ax=ax1, label='Value')
ax1.set_title('pcolormesh()')
ax1.set_xlabel('X')
ax1.set_ylabel('Y')

# pcolor - rendered as PolyCollection
pc2 = ax2.pcolor(X, Y, Z, cmap='RdYlBu')
fig.colorbar(pc2, ax=ax2, label='Value')
ax2.set_title('pcolor()')
ax2.set_xlabel('X')
ax2.set_ylabel('Y')

plt.show()

spy() - Sparse Matrix Pattern

matplotlib.pyplot.spy(Z, precision=0, marker=None, markersize=None,
    aspect='equal', origin='upper', **kwargs)

Example

import matplotlib.pyplot as plt
import numpy as np
from scipy import sparse

# Create sparse matrix
np.random.seed(42)
dense = np.random.rand(50, 50)
dense[dense < 0.9] = 0      # 90% are zero
sparse_mat = sparse.csr_matrix(dense)

fig, ax = plt.subplots(figsize=(5, 5), layout='constrained')

ax.spy(sparse_mat, markersize=5, color='steelblue')
ax.set_title('spy() - Sparse Matrix Pattern')
plt.show()

matshow() / figimage()

matplotlib.pyplot.matshow(A, fignum=None, **kwargs)
matplotlib.pyplot.figimage(X, xo=0, yo=0, alpha=None, norm=None,
    cmap=None, vmin=None, vmax=None, origin=None, **kwargs)

Example

import matplotlib.pyplot as plt
import numpy as np

# matshow - automatically creates a new Figure to display the matrix
matrix = np.random.rand(8, 8)
plt.matshow(matrix, cmap='viridis')
plt.title('matshow()')
plt.colorbar(label='Value')
plt.show()
print("example: matshow displayed")

ecdf() - Empirical Cumulative Distribution

matplotlib.pyplot.ecdf(x, *, ax=None, complementary=False,
    **kwargs)

Example

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(42)
data1 = np.random.normal(0, 1, 200)
data2 = np.random.normal(2, 0.5, 200)

fig, ax = plt.subplots(figsize=(7, 5), layout='constrained')

ax.ecdf(data1, label='N(0, 1)')
ax.ecdf(data2, label='N(2, 0.5)')

ax.set_title('ecdf() - Empirical CDF')
ax.set_xlabel('Value')
ax.set_ylabel('Cumulative Probability')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()

violinplot() - Violin Plot

matplotlib.pyplot.violinplot(dataset, positions=None, vert=True,
    widths=0.5, showmeans=False, showmedians=False,
    showextrema=True, **kwargs)

Example

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(42)
data = [
    np.random.normal(0, 1, 200),
    np.random.normal(2, 1.5, 200),
    np.random.gamma(2, 1, 200),
]

fig, ax = plt.subplots(figsize=(7, 5), layout='constrained')

vp = ax.violinplot(data, showmeans=True, showmedians=True)

# Custom colors
colors = ['#3498db', '#e74c3c', '#2E7DCC']
for body, color in zip(vp['bodies'], colors):
    body.set_facecolor(color)
    body.set_alpha(0.7)

ax.set_title('violinplot()')
ax.set_xticks([1, 2, 3])
ax.set_xticklabels(['Normal', 'Normal(wide)', 'Gamma'])
ax.grid(axis='y', alpha=0.3)
plt.show()

Matplotlib 参考文档Matplotlib Reference Documentation

Other Extensions