Master advanced declarative visualization with HoloViews. Use this skill when creating complex multi-dimensional visualizations, composing overlays and layouts, implementing interactive streams and selection, building network or hierarchical visualizations, or exploring data with dynamic maps and faceted displays.
View on GitHubFebruary 1, 2026
Select agents to install to:
npx add-skill https://github.com/cdcore09/holoviz-claude/blob/main/plugins/holoviz-expert/skills/data-visualization/SKILL.md -a claude-code --skill data-visualizationInstallation paths:
.claude/skills/data-visualization/# Data Visualization Skill
## Overview
Master advanced declarative visualization with HoloViews and composition patterns. This skill covers sophisticated visualization techniques for complex data exploration and presentation.
## Dependencies
- holoviews >= 1.18.0
- pandas >= 1.0.0
- numpy >= 1.15.0
- bokeh >= 3.0.0
- networkx >= 2.0.0 (for network visualizations)
## Core Capabilities
### 1. Advanced Element Composition
HoloViews allows sophisticated composition of visualization elements:
```python
import holoviews as hv
from holoviews import opts
import pandas as pd
import numpy as np
# Create overlaid elements
curve = hv.Curve(df, 'x', 'y', label='Measured')
scatter = hv.Scatter(df_with_noise, 'x', 'y', label='Noisy')
overlay = curve * scatter # Multiplication overlays
# Create layouts
col_layout = hv.Column(plot1, plot2, plot3)
row_layout = hv.Row(plot1, plot2, plot3)
grid_layout = hv.GridMatrix(data_dict)
# Faceted displays
faceted = hv.Curve(df, 'date', 'value').facet('category')
# Nested layouts
complex_layout = hv.Column(
hv.Row(plot1, plot2),
hv.Row(plot3, plot4),
hv.Row(plot5, plot6)
)
```
### 2. Interactive Streams and Selection
Create responsive visualizations with interactive selection:
```python
from holoviews import streams
# Selection stream
range_stream = streams.RangeXY()
scatter = hv.Scatter(df, 'x', 'y').opts(tools=['box_select'])
@hv.transform
def selected_data(data):
if range_stream.selection:
x0, x1 = range_stream.selection[0], range_stream.selection[1]
y0, y1 = range_stream.selection[2], range_stream.selection[3]
mask = (data['x'] >= x0) & (data['x'] <= x1) & \
(data['y'] >= y0) & (data['y'] <= y1)
return data[mask]
return data
histogram = selected_data.to(hv.Histogram)
scatter_with_hist = scatter + histogram
```
### 3. Dynamic Maps for Responsive Visualization
```python
# Dynamic updating based on parameters
from holoviews import DynamicMap, streams
def pl