Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Creates sashimi plots showing RNA-seq read coverage and splice junction counts using ggsashimi or rmats2sashimiplot. Visualizes differential splicing events with grouped samples and junction read support. Use when visualizing specific splicing events or validating differential splicing results.
.claude/skills/bio-sashimi-plots/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | — | — |
| case-20 | ✗→✓ | ▲ Improved | — | — |
| case-09 | ✗→✓ | ▲ Improved | — | — |
| case-12 | ✗→✓ | ▲ Improved | — | — |
| case-11 | ✗→✓ | ▲ Improved | — | — |
Reference examples tested with: ggplot2 3.5+, pandas 2.2+
Before using code patterns, verify installed versions match. If versions differ:
pip show <package> then help(module.function) to check signatures<tool> --version then <tool> --help to confirm flagsIf code throws ImportError, AttributeError, or TypeError, introspect the installed package and adapt the example to match the actual API rather than retrying.
Create sashimi plots to visualize splicing events with read coverage and junction counts.
Goal: Generate sashimi plots showing read coverage and junction counts for a genomic region.
Approach: Define sample groupings in a TSV file, then run ggsashimi with genomic coordinates and annotation.
"Visualize a splicing event" -> Plot RNA-seq coverage tracks with splice junction arcs grouped by condition.
ggsashimi.py (ggsashimi)rmats2sashimiplot (rMATS-specific)pythonimport subprocess import pandas as pd # Create sample grouping file (TSV: path, group, color) groups = pd.DataFrame({ 'bam': ['sample1.bam', 'sample2.bam', 'sample3.bam', 'sample4.bam'], 'group': ['control', 'control', 'treatment', 'treatment'], 'color': ['#1f77b4', '#1f77b4', '#ff7f0e', '#ff7f0e'] }) groups.to_csv('sashimi_groups.tsv', sep='\t', index=False, header=False) # Basic sashimi plot for a region subprocess.run([ 'ggsashimi.py', '-b', 'sashimi_groups.tsv', '-c', 'chr1:1000000-1010000', # Genomic coordinates '-o', 'sashimi_output', '-M', '10', # Minimum junction reads to show '--alpha', '0.25', # Coverage transparency '--height', '3', '--width', '8', '-g', 'annotation.gtf' ], check=True)
Goal: Automatically generate sashimi plots for all significant differential splicing events.
Approach: Load rMATS results, filter for significant events, extract flanking coordinates, and iterate ggsashimi over each event.
pythonimport subprocess import pandas as pd # Load differential splicing results diff_results = pd.read_csv('rmats_output/SE.MATS.JC.txt', sep='\t') significant = diff_results[ (diff_results['FDR'] < 0.05) & (diff_results['IncLevelDifference'].abs() > 0.1) ] # Generate plots for top events for idx, event in significant.head(20).iterrows(): chrom = event['chr'] # Extend region around the exon start = event['upstreamES'] - 500 end = event['downstreamEE'] + 500 region = f'{chrom}:{start}-{end}' gene = event['geneSymbol'] subprocess.run([ 'ggsashimi.py', '-b', 'sashimi_groups.tsv', '-c', region, '-o', f'sashimi_plots/{gene}_{chrom}_{start}', '-M', '5', '--shrink', # Shrink introns for better visualization '-g', 'annotation.gtf', '--fix-y-scale' # Same y-axis across groups ], check=True)
Goal: Create sashimi plots directly from rMATS differential splicing output.
Approach: Point rmats2sashimiplot at rMATS result files and BAM groups with condition labels.
bash# For rMATS output specifically rmats2sashimiplot \ --b1 sample1.bam,sample2.bam \ --b2 sample3.bam,sample4.bam \ -t SE \ -e rmats_output/SE.MATS.JC.txt \ --l1 Control \ --l2 Treatment \ -o sashimi_rmats \ --exon_s 1 \ --intron_s 5
Goal: Fine-tune sashimi plot appearance for publication-quality figures.
Approach: Adjust ggsashimi visual parameters including intron shrinking, y-axis scaling, aggregation mode, and output format.
python# Advanced ggsashimi options subprocess.run([ 'ggsashimi.py', '-b', 'sashimi_groups.tsv', '-c', 'chr1:1000000-1010000', '-o', 'custom_sashimi', '-g', 'annotation.gtf', # Visual options '-M', '10', # Min junction reads '--alpha', '0.25', # Coverage alpha '--height', '3', # Plot height per track '--width', '10', # Plot width '--base-size', '14', # Font size # Layout options '--shrink', # Shrink introns '--fix-y-scale', # Same y-axis '-A', 'mean', # Aggregate: mean, median, or none # Annotation options '--gtf-filter', 'protein_coding', # Filter GTF features # Output format '-F', 'pdf' # pdf, png, svg, eps ], check=True)
| Tip | Rationale | |-----|-----------| | Use --shrink for large introns | Keeps exons visible | | Set --fix-y-scale for comparisons | Fair visual comparison | | Aggregate replicates with -A mean | Reduces clutter | | Limit to 3-4 groups | More groups become hard to read | | Include flanking exons | Show full splicing context |
| Issue | Solution | |-------|----------| | No junctions shown | Lower -M threshold | | Plot too crowded | Use --shrink, reduce samples | | Annotation missing | Check GTF format, gene name field | | Memory issues | Plot smaller regions |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +32 percentage points is the difference between those two pass rates over the 22 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.