Initial commit
This commit is contained in:
412
skills/matplotlib/references/api_reference.md
Normal file
412
skills/matplotlib/references/api_reference.md
Normal file
@@ -0,0 +1,412 @@
|
||||
# Matplotlib API Reference
|
||||
|
||||
This document provides a quick reference for the most commonly used matplotlib classes and methods.
|
||||
|
||||
## Core Classes
|
||||
|
||||
### Figure
|
||||
|
||||
The top-level container for all plot elements.
|
||||
|
||||
**Creation:**
|
||||
```python
|
||||
fig = plt.figure(figsize=(10, 6), dpi=100, facecolor='white')
|
||||
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(10, 6))
|
||||
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
|
||||
```
|
||||
|
||||
**Key Methods:**
|
||||
- `fig.add_subplot(nrows, ncols, index)` - Add a subplot
|
||||
- `fig.add_axes([left, bottom, width, height])` - Add axes at specific position
|
||||
- `fig.savefig(filename, dpi=300, bbox_inches='tight')` - Save figure
|
||||
- `fig.tight_layout()` - Adjust spacing to prevent overlaps
|
||||
- `fig.suptitle(title)` - Set figure title
|
||||
- `fig.legend()` - Create figure-level legend
|
||||
- `fig.colorbar(mappable)` - Add colorbar to figure
|
||||
- `plt.close(fig)` - Close figure to free memory
|
||||
|
||||
**Key Attributes:**
|
||||
- `fig.axes` - List of all axes in the figure
|
||||
- `fig.dpi` - Resolution in dots per inch
|
||||
- `fig.figsize` - Figure dimensions in inches (width, height)
|
||||
|
||||
### Axes
|
||||
|
||||
The actual plotting area where data is visualized.
|
||||
|
||||
**Creation:**
|
||||
```python
|
||||
fig, ax = plt.subplots() # Single axes
|
||||
ax = fig.add_subplot(111) # Alternative method
|
||||
```
|
||||
|
||||
**Plotting Methods:**
|
||||
|
||||
**Line plots:**
|
||||
- `ax.plot(x, y, **kwargs)` - Line plot
|
||||
- `ax.step(x, y, where='pre'/'mid'/'post')` - Step plot
|
||||
- `ax.errorbar(x, y, yerr, xerr)` - Error bars
|
||||
|
||||
**Scatter plots:**
|
||||
- `ax.scatter(x, y, s=size, c=color, marker='o', alpha=0.5)` - Scatter plot
|
||||
|
||||
**Bar charts:**
|
||||
- `ax.bar(x, height, width=0.8, align='center')` - Vertical bar chart
|
||||
- `ax.barh(y, width)` - Horizontal bar chart
|
||||
|
||||
**Statistical plots:**
|
||||
- `ax.hist(data, bins=10, density=False)` - Histogram
|
||||
- `ax.boxplot(data, labels=None)` - Box plot
|
||||
- `ax.violinplot(data)` - Violin plot
|
||||
|
||||
**2D plots:**
|
||||
- `ax.imshow(array, cmap='viridis', aspect='auto')` - Display image/matrix
|
||||
- `ax.contour(X, Y, Z, levels=10)` - Contour lines
|
||||
- `ax.contourf(X, Y, Z, levels=10)` - Filled contours
|
||||
- `ax.pcolormesh(X, Y, Z)` - Pseudocolor plot
|
||||
|
||||
**Filling:**
|
||||
- `ax.fill_between(x, y1, y2, alpha=0.3)` - Fill between curves
|
||||
- `ax.fill_betweenx(y, x1, x2)` - Fill between vertical curves
|
||||
|
||||
**Text and annotations:**
|
||||
- `ax.text(x, y, text, fontsize=12)` - Add text
|
||||
- `ax.annotate(text, xy=(x, y), xytext=(x2, y2), arrowprops={})` - Annotate with arrow
|
||||
|
||||
**Customization Methods:**
|
||||
|
||||
**Labels and titles:**
|
||||
- `ax.set_xlabel(label, fontsize=12)` - Set x-axis label
|
||||
- `ax.set_ylabel(label, fontsize=12)` - Set y-axis label
|
||||
- `ax.set_title(title, fontsize=14)` - Set axes title
|
||||
|
||||
**Limits and scales:**
|
||||
- `ax.set_xlim(left, right)` - Set x-axis limits
|
||||
- `ax.set_ylim(bottom, top)` - Set y-axis limits
|
||||
- `ax.set_xscale('linear'/'log'/'symlog')` - Set x-axis scale
|
||||
- `ax.set_yscale('linear'/'log'/'symlog')` - Set y-axis scale
|
||||
|
||||
**Ticks:**
|
||||
- `ax.set_xticks(positions)` - Set x-tick positions
|
||||
- `ax.set_xticklabels(labels)` - Set x-tick labels
|
||||
- `ax.tick_params(axis='both', labelsize=10)` - Customize tick appearance
|
||||
|
||||
**Grid and spines:**
|
||||
- `ax.grid(True, alpha=0.3, linestyle='--')` - Add grid
|
||||
- `ax.spines['top'].set_visible(False)` - Hide top spine
|
||||
- `ax.spines['right'].set_visible(False)` - Hide right spine
|
||||
|
||||
**Legend:**
|
||||
- `ax.legend(loc='best', fontsize=10, frameon=True)` - Add legend
|
||||
- `ax.legend(handles, labels)` - Custom legend
|
||||
|
||||
**Aspect and layout:**
|
||||
- `ax.set_aspect('equal'/'auto'/ratio)` - Set aspect ratio
|
||||
- `ax.invert_xaxis()` - Invert x-axis
|
||||
- `ax.invert_yaxis()` - Invert y-axis
|
||||
|
||||
### pyplot Module
|
||||
|
||||
High-level interface for quick plotting.
|
||||
|
||||
**Figure creation:**
|
||||
- `plt.figure()` - Create new figure
|
||||
- `plt.subplots()` - Create figure and axes
|
||||
- `plt.subplot()` - Add subplot to current figure
|
||||
|
||||
**Plotting (uses current axes):**
|
||||
- `plt.plot()` - Line plot
|
||||
- `plt.scatter()` - Scatter plot
|
||||
- `plt.bar()` - Bar chart
|
||||
- `plt.hist()` - Histogram
|
||||
- (All axes methods available)
|
||||
|
||||
**Display and save:**
|
||||
- `plt.show()` - Display figure
|
||||
- `plt.savefig()` - Save figure
|
||||
- `plt.close()` - Close figure
|
||||
|
||||
**Style:**
|
||||
- `plt.style.use(style_name)` - Apply style sheet
|
||||
- `plt.style.available` - List available styles
|
||||
|
||||
**State management:**
|
||||
- `plt.gca()` - Get current axes
|
||||
- `plt.gcf()` - Get current figure
|
||||
- `plt.sca(ax)` - Set current axes
|
||||
- `plt.clf()` - Clear current figure
|
||||
- `plt.cla()` - Clear current axes
|
||||
|
||||
## Line and Marker Styles
|
||||
|
||||
### Line Styles
|
||||
- `'-'` or `'solid'` - Solid line
|
||||
- `'--'` or `'dashed'` - Dashed line
|
||||
- `'-.'` or `'dashdot'` - Dash-dot line
|
||||
- `':'` or `'dotted'` - Dotted line
|
||||
- `''` or `' '` or `'None'` - No line
|
||||
|
||||
### Marker Styles
|
||||
- `'.'` - Point marker
|
||||
- `'o'` - Circle marker
|
||||
- `'v'`, `'^'`, `'<'`, `'>'` - Triangle markers
|
||||
- `'s'` - Square marker
|
||||
- `'p'` - Pentagon marker
|
||||
- `'*'` - Star marker
|
||||
- `'h'`, `'H'` - Hexagon markers
|
||||
- `'+'` - Plus marker
|
||||
- `'x'` - X marker
|
||||
- `'D'`, `'d'` - Diamond markers
|
||||
|
||||
### Color Specifications
|
||||
|
||||
**Single character shortcuts:**
|
||||
- `'b'` - Blue
|
||||
- `'g'` - Green
|
||||
- `'r'` - Red
|
||||
- `'c'` - Cyan
|
||||
- `'m'` - Magenta
|
||||
- `'y'` - Yellow
|
||||
- `'k'` - Black
|
||||
- `'w'` - White
|
||||
|
||||
**Named colors:**
|
||||
- `'steelblue'`, `'coral'`, `'teal'`, etc.
|
||||
- See full list: https://matplotlib.org/stable/gallery/color/named_colors.html
|
||||
|
||||
**Other formats:**
|
||||
- Hex: `'#FF5733'`
|
||||
- RGB tuple: `(0.1, 0.2, 0.3)`
|
||||
- RGBA tuple: `(0.1, 0.2, 0.3, 0.5)`
|
||||
|
||||
## Common Parameters
|
||||
|
||||
### Plot Function Parameters
|
||||
|
||||
```python
|
||||
ax.plot(x, y,
|
||||
color='blue', # Line color
|
||||
linewidth=2, # Line width
|
||||
linestyle='--', # Line style
|
||||
marker='o', # Marker style
|
||||
markersize=8, # Marker size
|
||||
markerfacecolor='red', # Marker fill color
|
||||
markeredgecolor='black',# Marker edge color
|
||||
markeredgewidth=1, # Marker edge width
|
||||
alpha=0.7, # Transparency (0-1)
|
||||
label='data', # Legend label
|
||||
zorder=2, # Drawing order
|
||||
rasterized=True # Rasterize for smaller file size
|
||||
)
|
||||
```
|
||||
|
||||
### Scatter Function Parameters
|
||||
|
||||
```python
|
||||
ax.scatter(x, y,
|
||||
s=50, # Size (scalar or array)
|
||||
c='blue', # Color (scalar, array, or sequence)
|
||||
marker='o', # Marker style
|
||||
cmap='viridis', # Colormap (if c is numeric)
|
||||
alpha=0.5, # Transparency
|
||||
edgecolors='black', # Edge color
|
||||
linewidths=1, # Edge width
|
||||
vmin=0, vmax=1, # Color scale limits
|
||||
label='data' # Legend label
|
||||
)
|
||||
```
|
||||
|
||||
### Text Parameters
|
||||
|
||||
```python
|
||||
ax.text(x, y, text,
|
||||
fontsize=12, # Font size
|
||||
fontweight='normal', # 'normal', 'bold', 'heavy', 'light'
|
||||
fontstyle='normal', # 'normal', 'italic', 'oblique'
|
||||
fontfamily='sans-serif',# Font family
|
||||
color='black', # Text color
|
||||
alpha=1.0, # Transparency
|
||||
ha='center', # Horizontal alignment: 'left', 'center', 'right'
|
||||
va='center', # Vertical alignment: 'top', 'center', 'bottom', 'baseline'
|
||||
rotation=0, # Rotation angle in degrees
|
||||
bbox=dict( # Background box
|
||||
facecolor='white',
|
||||
edgecolor='black',
|
||||
boxstyle='round'
|
||||
)
|
||||
)
|
||||
```
|
||||
|
||||
## rcParams Configuration
|
||||
|
||||
Common rcParams settings for global customization:
|
||||
|
||||
```python
|
||||
# Font settings
|
||||
plt.rcParams['font.family'] = 'sans-serif'
|
||||
plt.rcParams['font.sans-serif'] = ['Arial', 'Helvetica']
|
||||
plt.rcParams['font.size'] = 12
|
||||
|
||||
# Figure settings
|
||||
plt.rcParams['figure.figsize'] = (10, 6)
|
||||
plt.rcParams['figure.dpi'] = 100
|
||||
plt.rcParams['figure.facecolor'] = 'white'
|
||||
plt.rcParams['savefig.dpi'] = 300
|
||||
plt.rcParams['savefig.bbox'] = 'tight'
|
||||
|
||||
# Axes settings
|
||||
plt.rcParams['axes.labelsize'] = 14
|
||||
plt.rcParams['axes.titlesize'] = 16
|
||||
plt.rcParams['axes.grid'] = True
|
||||
plt.rcParams['axes.grid.alpha'] = 0.3
|
||||
|
||||
# Line settings
|
||||
plt.rcParams['lines.linewidth'] = 2
|
||||
plt.rcParams['lines.markersize'] = 8
|
||||
|
||||
# Tick settings
|
||||
plt.rcParams['xtick.labelsize'] = 10
|
||||
plt.rcParams['ytick.labelsize'] = 10
|
||||
plt.rcParams['xtick.direction'] = 'in' # 'in', 'out', 'inout'
|
||||
plt.rcParams['ytick.direction'] = 'in'
|
||||
|
||||
# Legend settings
|
||||
plt.rcParams['legend.fontsize'] = 12
|
||||
plt.rcParams['legend.frameon'] = True
|
||||
plt.rcParams['legend.framealpha'] = 0.8
|
||||
|
||||
# Grid settings
|
||||
plt.rcParams['grid.alpha'] = 0.3
|
||||
plt.rcParams['grid.linestyle'] = '--'
|
||||
```
|
||||
|
||||
## GridSpec for Complex Layouts
|
||||
|
||||
```python
|
||||
from matplotlib.gridspec import GridSpec
|
||||
|
||||
fig = plt.figure(figsize=(12, 8))
|
||||
gs = GridSpec(3, 3, figure=fig, hspace=0.3, wspace=0.3)
|
||||
|
||||
# Span multiple cells
|
||||
ax1 = fig.add_subplot(gs[0, :]) # Top row, all columns
|
||||
ax2 = fig.add_subplot(gs[1:, 0]) # Bottom two rows, first column
|
||||
ax3 = fig.add_subplot(gs[1, 1:]) # Middle row, last two columns
|
||||
ax4 = fig.add_subplot(gs[2, 1]) # Bottom row, middle column
|
||||
ax5 = fig.add_subplot(gs[2, 2]) # Bottom row, right column
|
||||
```
|
||||
|
||||
## 3D Plotting
|
||||
|
||||
```python
|
||||
from mpl_toolkits.mplot3d import Axes3D
|
||||
|
||||
fig = plt.figure()
|
||||
ax = fig.add_subplot(111, projection='3d')
|
||||
|
||||
# Plot types
|
||||
ax.plot(x, y, z) # 3D line
|
||||
ax.scatter(x, y, z) # 3D scatter
|
||||
ax.plot_surface(X, Y, Z) # 3D surface
|
||||
ax.plot_wireframe(X, Y, Z) # 3D wireframe
|
||||
ax.contour(X, Y, Z) # 3D contour
|
||||
ax.bar3d(x, y, z, dx, dy, dz) # 3D bar
|
||||
|
||||
# Customization
|
||||
ax.set_xlabel('X')
|
||||
ax.set_ylabel('Y')
|
||||
ax.set_zlabel('Z')
|
||||
ax.view_init(elev=30, azim=45) # Set viewing angle
|
||||
```
|
||||
|
||||
## Animation
|
||||
|
||||
```python
|
||||
from matplotlib.animation import FuncAnimation
|
||||
|
||||
fig, ax = plt.subplots()
|
||||
line, = ax.plot([], [])
|
||||
|
||||
def init():
|
||||
ax.set_xlim(0, 2*np.pi)
|
||||
ax.set_ylim(-1, 1)
|
||||
return line,
|
||||
|
||||
def update(frame):
|
||||
x = np.linspace(0, 2*np.pi, 100)
|
||||
y = np.sin(x + frame/10)
|
||||
line.set_data(x, y)
|
||||
return line,
|
||||
|
||||
anim = FuncAnimation(fig, update, init_func=init,
|
||||
frames=100, interval=50, blit=True)
|
||||
|
||||
# Save animation
|
||||
anim.save('animation.gif', writer='pillow', fps=20)
|
||||
anim.save('animation.mp4', writer='ffmpeg', fps=20)
|
||||
```
|
||||
|
||||
## Image Operations
|
||||
|
||||
```python
|
||||
# Read and display image
|
||||
img = plt.imread('image.png')
|
||||
ax.imshow(img)
|
||||
|
||||
# Display matrix as image
|
||||
ax.imshow(matrix, cmap='viridis', aspect='auto',
|
||||
interpolation='nearest', origin='lower')
|
||||
|
||||
# Colorbar
|
||||
cbar = plt.colorbar(im, ax=ax)
|
||||
cbar.set_label('Values')
|
||||
|
||||
# Image extent (set coordinates)
|
||||
ax.imshow(img, extent=[x_min, x_max, y_min, y_max])
|
||||
```
|
||||
|
||||
## Event Handling
|
||||
|
||||
```python
|
||||
# Mouse click event
|
||||
def on_click(event):
|
||||
if event.inaxes:
|
||||
print(f'Clicked at x={event.xdata:.2f}, y={event.ydata:.2f}')
|
||||
|
||||
fig.canvas.mpl_connect('button_press_event', on_click)
|
||||
|
||||
# Key press event
|
||||
def on_key(event):
|
||||
print(f'Key pressed: {event.key}')
|
||||
|
||||
fig.canvas.mpl_connect('key_press_event', on_key)
|
||||
```
|
||||
|
||||
## Useful Utilities
|
||||
|
||||
```python
|
||||
# Get current axis limits
|
||||
xlims = ax.get_xlim()
|
||||
ylims = ax.get_ylim()
|
||||
|
||||
# Set equal aspect ratio
|
||||
ax.set_aspect('equal', adjustable='box')
|
||||
|
||||
# Share axes between subplots
|
||||
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
|
||||
|
||||
# Twin axes (two y-axes)
|
||||
ax2 = ax1.twinx()
|
||||
|
||||
# Remove tick labels
|
||||
ax.set_xticklabels([])
|
||||
ax.set_yticklabels([])
|
||||
|
||||
# Scientific notation
|
||||
ax.ticklabel_format(style='scientific', axis='y', scilimits=(0,0))
|
||||
|
||||
# Date formatting
|
||||
import matplotlib.dates as mdates
|
||||
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
|
||||
ax.xaxis.set_major_locator(mdates.DayLocator(interval=7))
|
||||
```
|
||||
Reference in New Issue
Block a user