Plotting Guide¶
Learn to create climate visualizations with the Climate Diagnostics Toolkit.
Overview¶
The climate_plots accessor provides visualization capabilities designed for climate data. All plotting functions integrate with Cartopy for geographic projections and matplotlib for customization.
Geographic Plots¶
Basic Map Plotting
import xarray as xr
import climate_diagnostics
ds = xr.open_dataset("temperature.nc")
# Simple mean plot
fig = ds.climate_plots.plot_mean(
variable="temperature",
title="Annual Mean Temperature"
)
Custom Projections
# Different projections
projections = ["PlateCarree", "Robinson", "Mollweide", "Orthographic"]
for proj in projections:
fig = ds.climate_plots.plot_mean(
variable="temperature",
projection=proj,
title=f"Temperature - {proj} Projection"
)
Seasonal Analysis
# Plot seasonal means
seasons = ["DJF", "MAM", "JJA", "SON"]
fig, axes = plt.subplots(2, 2, figsize=(15, 10))
for i, season in enumerate(seasons):
ax = axes.flat[i]
ds.climate_plots.plot_mean(
variable="temperature",
season=season,
ax=ax,
title=f"{season} Mean Temperature"
)
Styling and Customization¶
Color Schemes
# Built-in climate colormaps
fig = ds.climate_plots.plot_mean(
variable="air",
colormap="RdBu_r", # Red-Blue reversed
levels=20,
extend="both"
)
# Custom color levels
levels = np.arange(-30, 31, 5)
fig = ds.climate_plots.plot_mean(
variable="air",
levels=levels,
colormap="coolwarm"
)
Geographic Features
# Add geographic features
fig = ds.climate_plots.plot_mean(
variable="air",
coastlines=True,
borders=True,
gridlines=True,
ocean_color="lightblue",
land_color="lightgray"
)
Annotations and Labels
fig = ds.climate_plots.plot_mean(
variable="air",
title="Global Surface Temperature",
colorbar_label="Temperature (°C)",
units="°C",
source="ERA5 Reanalysis"
)
Statistical Overlays¶
Significance Testing
# Plot with significance stippling
fig = ds.climate_plots.plot_mean(
variable="air",
significance_data=p_values,
significance_level=0.05,
stipple=True
)
Confidence Intervals
# Show uncertainty
fig = ds.climate_plots.plot_mean(
variable="air",
uncertainty=temperature_std,
show_confidence=True
)
Multiple Variables¶
Side-by-Side Comparison
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 6))
ds.climate_plots.plot_mean(
variable="air",
ax=ax1,
title="Temperature"
)
ds.climate_plots.plot_mean(
variable="prate",
ax=ax2,
title="Precipitation"
)
Difference Plots
# Calculate and plot differences
diff = future_ds - historical_ds
fig = diff.climate_plots.plot_mean(
variable="air",
colormap="RdBu_r",
title="Temperature Change",
center=0 # Center colormap at zero
)
Best Practices¶
Tip
Choose Appropriate Projections
Global data: Robinson, Mollweide
Regional data: PlateCarree, Lambert Conformal
Polar regions: Orthographic, Stereographic
Note
Color Scheme Guidelines
Temperature: Use diverging colormaps (RdBu_r, coolwarm)
Precipitation: Use sequential colormaps (Blues, viridis)
Anomalies: Center at zero with diverging colors
Warning
Performance Tips
Use
daskfor large datasetsConsider downsampling for quick previews
Cache processed data when possible
Advanced Techniques¶
Custom Colormaps
from matplotlib.colors import LinearSegmentedColormap
# Create custom colormap
colors = ['blue', 'white', 'red']
custom_cmap = LinearSegmentedColormap.from_list('custom', colors)
fig = ds.climate_plots.plot_mean(
variable="air",
colormap=custom_cmap
)
Subplot Layouts
# Complex subplot arrangements
fig = plt.figure(figsize=(20, 12))
# Main plot
ax_main = plt.subplot(2, 3, (1, 4))
ds.climate_plots.plot_mean(variable="air", ax=ax_main)
# Time series
ax_ts = plt.subplot(2, 3, (2, 3))
global_ts.plot(ax=ax_ts)
# Regional plots
for i, region in enumerate(regions):
ax = plt.subplot(2, 3, 5+i)
region_data.climate_plots.plot_mean(ax=ax)
Output Options¶
High-Resolution Output
fig = ds.climate_plots.plot_mean(
variable="air",
figsize=(12, 8)
)
plt.savefig("temperature_map.png", dpi=300, bbox_inches="tight")
Custom Styling
# Custom matplotlib styling
plt.rcParams.update({
'font.size': 12,
'font.family': 'sans-serif',
'axes.linewidth': 1,
'axes.spines.top': False,
'axes.spines.right': False
})
fig = ds.climate_plots.plot_mean(variable="air")