S

Scientific Slides Elite

Powerful skill for build, slide, decks, presentations. Includes structured workflows, validation checks, and reusable patterns for scientific.

SkillClipticsscientificv1.0.0MIT
0 views0 copies

Scientific Slides Elite

Create compelling scientific presentations with structured slide decks, data-driven visuals, and clear narrative flow using Python-based automation. This skill covers slide generation with python-pptx, figure integration from matplotlib/plotly, template customization, speaker notes generation, and batch export for conferences and lab meetings.

When to Use This Skill

Choose Scientific Slides Elite when you need to:

  • Generate presentation slides programmatically from research data and figures
  • Build reusable slide templates for lab meetings, conferences, or thesis defenses
  • Automate figure placement and formatting across multi-slide decks
  • Create consistent, publication-quality presentations with minimal manual work

Consider alternatives when:

  • You need general-purpose presentation design (use PowerPoint or Google Slides directly)
  • You need interactive web-based slides (use reveal.js or RISE for Jupyter)
  • You need poster layouts rather than slides (use Advanced PPTX Posters)

Quick Start

pip install python-pptx matplotlib Pillow
from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.enum.text import PP_ALIGN from pptx.dml.color import RGBColor # Create a scientific presentation prs = Presentation() prs.slide_width = Inches(13.333) # Widescreen 16:9 prs.slide_height = Inches(7.5) # Title slide slide = prs.slides.add_slide(prs.slide_layouts[6]) # Blank layout txBox = slide.shapes.add_textbox(Inches(1), Inches(2), Inches(11), Inches(2)) tf = txBox.text_frame p = tf.paragraphs[0] p.text = "RNA-Seq Analysis of Tumor Microenvironment" p.font.size = Pt(36) p.font.bold = True p.font.color.rgb = RGBColor(0x1B, 0x3A, 0x5C) p.alignment = PP_ALIGN.CENTER # Add subtitle p2 = tf.add_paragraph() p2.text = "Department of Computational Biology — Lab Meeting 2025" p2.font.size = Pt(18) p2.font.color.rgb = RGBColor(0x66, 0x66, 0x66) p2.alignment = PP_ALIGN.CENTER # Data slide with figure import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots(figsize=(8, 5)) genes = ['TP53', 'BRCA1', 'EGFR', 'KRAS', 'MYC'] fold_changes = [3.2, -2.1, 4.5, 1.8, -1.5] colors = ['#e74c3c' if fc > 0 else '#3498db' for fc in fold_changes] ax.barh(genes, fold_changes, color=colors) ax.set_xlabel('Log2 Fold Change') ax.set_title('Differentially Expressed Genes') ax.axvline(x=0, color='black', linewidth=0.5) fig.tight_layout() fig.savefig('/tmp/deg_plot.png', dpi=200, bbox_inches='tight') plt.close() slide2 = prs.slides.add_slide(prs.slide_layouts[6]) slide2.shapes.add_picture('/tmp/deg_plot.png', Inches(3), Inches(1.5), Inches(7), Inches(5)) title_box = slide2.shapes.add_textbox(Inches(0.5), Inches(0.3), Inches(12), Inches(1)) title_box.text_frame.paragraphs[0].text = "Differential Expression Results" title_box.text_frame.paragraphs[0].font.size = Pt(28) title_box.text_frame.paragraphs[0].font.bold = True prs.save('lab_meeting.pptx') print("Presentation saved with 2 slides")

Core Concepts

Slide Building Blocks

Componentpython-pptx ClassPurpose
PresentationPresentation()Top-level container
Slideprs.slides.add_slide()Individual slide
TextBoxslide.shapes.add_textbox()Text content areas
Pictureslide.shapes.add_picture()Images and figures
Tableslide.shapes.add_table()Data tables
Shapeslide.shapes.add_shape()Geometric shapes
Groupslide.shapes.add_group_shape()Grouped elements
Notesslide.notes_slideSpeaker notes

Multi-Slide Deck Builder

from pptx import Presentation from pptx.util import Inches, Pt from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN import matplotlib.pyplot as plt import numpy as np class ScientificDeck: """Builds a structured scientific presentation.""" def __init__(self, title, subtitle, width=13.333, height=7.5): self.prs = Presentation() self.prs.slide_width = Inches(width) self.prs.slide_height = Inches(height) self.colors = { 'title': RGBColor(0x1B, 0x3A, 0x5C), 'body': RGBColor(0x33, 0x33, 0x33), 'accent': RGBColor(0x27, 0xAE, 0x60), } self._add_title_slide(title, subtitle) def _add_title_slide(self, title, subtitle): slide = self.prs.slides.add_slide(self.prs.slide_layouts[6]) self._add_text(slide, title, Inches(1), Inches(2.5), Inches(11), Pt(40), bold=True, center=True) self._add_text(slide, subtitle, Inches(1), Inches(4), Inches(11), Pt(20), color=RGBColor(0x99,0x99,0x99), center=True) def add_figure_slide(self, title, fig_path, notes=""): slide = self.prs.slides.add_slide(self.prs.slide_layouts[6]) self._add_text(slide, title, Inches(0.5), Inches(0.3), Inches(12), Pt(28), bold=True) slide.shapes.add_picture(fig_path, Inches(2.5), Inches(1.3), Inches(8), Inches(5.5)) if notes: slide.notes_slide.notes_text_frame.text = notes return slide def add_bullet_slide(self, title, bullets, notes=""): slide = self.prs.slides.add_slide(self.prs.slide_layouts[6]) self._add_text(slide, title, Inches(0.5), Inches(0.3), Inches(12), Pt(28), bold=True) txBox = slide.shapes.add_textbox(Inches(1), Inches(1.5), Inches(11), Inches(5)) tf = txBox.text_frame tf.word_wrap = True for i, bullet in enumerate(bullets): p = tf.paragraphs[0] if i == 0 else tf.add_paragraph() p.text = f"• {bullet}" p.font.size = Pt(20) p.space_after = Pt(12) if notes: slide.notes_slide.notes_text_frame.text = notes return slide def _add_text(self, slide, text, left, top, width, size, bold=False, center=False, color=None): box = slide.shapes.add_textbox(left, top, width, Inches(1)) p = box.text_frame.paragraphs[0] p.text = text p.font.size = size p.font.bold = bold p.font.color.rgb = color or self.colors['title'] if center: p.alignment = PP_ALIGN.CENTER def save(self, path): self.prs.save(path) print(f"Saved {len(self.prs.slides)} slides to {path}") # Usage deck = ScientificDeck( "Metagenomic Survey of Coastal Sediments", "Marine Biology Lab — Weekly Update" ) deck.add_bullet_slide("Key Findings", [ "Alpha diversity significantly higher in intertidal zones (p < 0.001)", "Proteobacteria dominated all sample sites (42-68%)", "Novel MAGs assembled from deep sediment samples", "Antibiotic resistance genes enriched near outfall sites" ], notes="Emphasize the ARG finding — this is the most publishable result") deck.save("lab_update.pptx")

Configuration

ParameterDescriptionDefault
slide_widthSlide width in inches13.333 (16:9)
slide_heightSlide height in inches7.5 (16:9)
figure_dpiResolution for embedded figures200
font_familyPrimary font for text"Calibri"
title_sizeTitle text size in points28
body_sizeBody text size in points18
figure_formatExport format for matplotlib figures"png"
color_schemeNamed color palette"academic_blue"

Best Practices

  1. Use widescreen 16:9 aspect ratio — Modern projectors and screens expect 16:9 (13.333" × 7.5"). Standard 4:3 wastes screen space and looks dated. Set dimensions explicitly in the Presentation object rather than relying on default template dimensions.

  2. Limit text to 6 lines per slide maximum — Dense text slides lose the audience. Each slide should make one point with supporting visuals. Move detailed methods and supplementary data to backup slides after the conclusion. Use speaker notes for details you want to say but not show.

  3. Export figures at 200 DPI minimum — Figures saved at screen resolution (72 DPI) look pixelated when projected. Save matplotlib figures with dpi=200 and bbox_inches='tight'. For retina displays and print, use 300 DPI. Vector formats (SVG/PDF) avoid this entirely but require conversion for PPTX embedding.

  4. Maintain consistent styling across slides — Use a builder class or template to enforce uniform fonts, colors, margins, and title positions. Inconsistent formatting distracts from the science. Define a color scheme once and reference it throughout.

  5. Add speaker notes to every content slide — Notes serve as your script during the talk and as documentation when sharing the deck. Include key talking points, data sources, and transition phrases. This also makes the presentation self-contained for colleagues who weren't at the talk.

Common Issues

Figures appear blurry or pixelated on slides — The default DPI for matplotlib is 100, which is too low for projection. Always use fig.savefig(path, dpi=200, bbox_inches='tight'). Also ensure the image is sized large enough in the slide — stretching a small image makes it worse. Match the figure's pixel dimensions to the intended display size.

Text overflows the textbox boundaries — python-pptx doesn't auto-resize textboxes. Calculate the required height based on line count and font size, or enable word wrap with text_frame.word_wrap = True. For dynamic content, measure text length and adjust the textbox height: approximately Pt(font_size) * 1.5 * line_count.

Slide layouts from templates don't match expectations — Different PPTX templates define different numbers and types of layouts. Use prs.slide_layouts[6] (blank) for full control, or iterate through prs.slide_layouts and print each layout's name to find the one you want. Relying on layout indices across different templates breaks portability.

Community

Reviews

Write a review

No reviews yet. Be the first to review this template!

Similar Templates