@litfamily/litopencode 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitattributes +8 -0
- package/ATTRIBUTION.md +56 -0
- package/CHANGELOG.md +267 -0
- package/CODE_OF_CONDUCT.md +30 -0
- package/CONTRIBUTING.md +82 -0
- package/LICENSE +21 -0
- package/README-Ko-KR.md +252 -0
- package/README.md +252 -0
- package/SECURITY.md +36 -0
- package/SUPPORT.md +37 -0
- package/bin/litopencode +3 -0
- package/bin/litopencode.cjs +10 -0
- package/dist/activation-managed-prompts.d.ts +2 -0
- package/dist/activation-managed-prompts.js +51 -0
- package/dist/activation-primary-prompts.d.ts +2 -0
- package/dist/activation-primary-prompts.js +176 -0
- package/dist/activation-probe.d.ts +3 -0
- package/dist/activation-probe.js +19 -0
- package/dist/activation-prompt-utils.d.ts +6 -0
- package/dist/activation-prompt-utils.js +36 -0
- package/dist/activation-routing.d.ts +5 -0
- package/dist/activation-routing.js +340 -0
- package/dist/activation-workflow-prompts.d.ts +26 -0
- package/dist/activation-workflow-prompts.js +295 -0
- package/dist/activation.d.ts +24 -0
- package/dist/activation.js +152 -0
- package/dist/agents/defaults.d.ts +15 -0
- package/dist/agents/defaults.js +112 -0
- package/dist/agents/registry.d.ts +65 -0
- package/dist/agents/registry.js +319 -0
- package/dist/agents/specialists.d.ts +49 -0
- package/dist/agents/specialists.js +307 -0
- package/dist/agents/types.d.ts +55 -0
- package/dist/agents/types.js +4 -0
- package/dist/agents.d.ts +4 -0
- package/dist/agents.js +3 -0
- package/dist/benchmark.d.ts +94 -0
- package/dist/benchmark.js +172 -0
- package/dist/bounded-authority-hooks.d.ts +19 -0
- package/dist/bounded-authority-hooks.js +157 -0
- package/dist/bounded-authority.d.ts +184 -0
- package/dist/bounded-authority.js +825 -0
- package/dist/cache-metrics.d.ts +54 -0
- package/dist/cache-metrics.js +81 -0
- package/dist/cli/args.d.ts +5 -0
- package/dist/cli/args.js +415 -0
- package/dist/cli/auto-update.d.ts +117 -0
- package/dist/cli/auto-update.js +604 -0
- package/dist/cli/command-alias-ownership.d.ts +2 -0
- package/dist/cli/command-alias-ownership.js +14 -0
- package/dist/cli/command-aliases.d.ts +12 -0
- package/dist/cli/command-aliases.js +112 -0
- package/dist/cli/doctor.d.ts +2 -0
- package/dist/cli/doctor.js +175 -0
- package/dist/cli/host-capabilities.d.ts +12 -0
- package/dist/cli/host-capabilities.js +25 -0
- package/dist/cli/host-limits.d.ts +21 -0
- package/dist/cli/host-limits.js +83 -0
- package/dist/cli/install-config.d.ts +13 -0
- package/dist/cli/install-config.js +201 -0
- package/dist/cli/install-report.d.ts +2 -0
- package/dist/cli/install-report.js +180 -0
- package/dist/cli/install-tui.d.ts +12 -0
- package/dist/cli/install-tui.js +174 -0
- package/dist/cli/install.d.ts +2 -0
- package/dist/cli/install.js +264 -0
- package/dist/cli/json.d.ts +4 -0
- package/dist/cli/json.js +31 -0
- package/dist/cli/loop.d.ts +3 -0
- package/dist/cli/loop.js +135 -0
- package/dist/cli/lsp-capability.d.ts +17 -0
- package/dist/cli/lsp-capability.js +92 -0
- package/dist/cli/managed-skill-assets.d.ts +23 -0
- package/dist/cli/managed-skill-assets.js +117 -0
- package/dist/cli/model-catalog.d.ts +21 -0
- package/dist/cli/model-catalog.js +107 -0
- package/dist/cli/model-policy.d.ts +3 -0
- package/dist/cli/model-policy.js +143 -0
- package/dist/cli/model-routing.d.ts +5 -0
- package/dist/cli/model-routing.js +208 -0
- package/dist/cli/native-canonical-backup.d.ts +9 -0
- package/dist/cli/native-canonical-backup.js +96 -0
- package/dist/cli/native-canonical-cache.d.ts +9 -0
- package/dist/cli/native-canonical-cache.js +37 -0
- package/dist/cli/native-skill-install.d.ts +2 -0
- package/dist/cli/native-skill-install.js +128 -0
- package/dist/cli/native-skill-integrity.d.ts +25 -0
- package/dist/cli/native-skill-integrity.js +178 -0
- package/dist/cli/native-skill-tree.d.ts +12 -0
- package/dist/cli/native-skill-tree.js +104 -0
- package/dist/cli/native-skills.d.ts +22 -0
- package/dist/cli/native-skills.js +105 -0
- package/dist/cli/plugin-mutation.d.ts +4 -0
- package/dist/cli/plugin-mutation.js +89 -0
- package/dist/cli/scientific-visualization-dependencies.d.ts +18 -0
- package/dist/cli/scientific-visualization-dependencies.js +91 -0
- package/dist/cli/skill-loop.d.ts +3 -0
- package/dist/cli/skill-loop.js +649 -0
- package/dist/cli/types.d.ts +188 -0
- package/dist/cli/types.js +1 -0
- package/dist/cli/update-check.d.ts +2 -0
- package/dist/cli/update-check.js +15 -0
- package/dist/cli/update-notifier.d.ts +70 -0
- package/dist/cli/update-notifier.js +717 -0
- package/dist/cli/vendor-path-migration.d.ts +9 -0
- package/dist/cli/vendor-path-migration.js +96 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.js +250 -0
- package/dist/commands.d.ts +331 -0
- package/dist/commands.js +600 -0
- package/dist/config-parser.d.ts +5 -0
- package/dist/config-parser.js +274 -0
- package/dist/config.d.ts +72 -0
- package/dist/config.js +157 -0
- package/dist/deliverable-hedge-guard.d.ts +26 -0
- package/dist/deliverable-hedge-guard.js +302 -0
- package/dist/durable-plan.d.ts +23 -0
- package/dist/durable-plan.js +349 -0
- package/dist/features.d.ts +828 -0
- package/dist/features.js +1109 -0
- package/dist/hooks.d.ts +17 -0
- package/dist/hooks.js +83 -0
- package/dist/ignition.d.ts +14 -0
- package/dist/ignition.js +33 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.js +30 -0
- package/dist/inert-data.d.ts +2 -0
- package/dist/inert-data.js +13 -0
- package/dist/knowledge.d.ts +98 -0
- package/dist/knowledge.js +961 -0
- package/dist/ledger.d.ts +181 -0
- package/dist/ledger.js +1179 -0
- package/dist/lit-fetch-classify.d.ts +8 -0
- package/dist/lit-fetch-classify.js +107 -0
- package/dist/lit-fetch-content.d.ts +2 -0
- package/dist/lit-fetch-content.js +43 -0
- package/dist/lit-fetch-http.d.ts +10 -0
- package/dist/lit-fetch-http.js +82 -0
- package/dist/lit-fetch-result.d.ts +2 -0
- package/dist/lit-fetch-result.js +65 -0
- package/dist/lit-fetch-ssrf.d.ts +9 -0
- package/dist/lit-fetch-ssrf.js +77 -0
- package/dist/lit-fetch-url.d.ts +3 -0
- package/dist/lit-fetch-url.js +28 -0
- package/dist/lit-fetch.d.ts +69 -0
- package/dist/lit-fetch.js +84 -0
- package/dist/lit-mark.d.ts +17 -0
- package/dist/lit-mark.js +129 -0
- package/dist/logger.d.ts +9 -0
- package/dist/logger.js +21 -0
- package/dist/model-route-policy.d.ts +25 -0
- package/dist/model-route-policy.js +129 -0
- package/dist/reader-facing-output.d.ts +3 -0
- package/dist/reader-facing-output.js +28 -0
- package/dist/rules/discovery.d.ts +36 -0
- package/dist/rules/discovery.js +270 -0
- package/dist/rules/engine.d.ts +43 -0
- package/dist/rules/engine.js +236 -0
- package/dist/rules/frontmatter.d.ts +16 -0
- package/dist/rules/frontmatter.js +179 -0
- package/dist/rules/glob.d.ts +12 -0
- package/dist/rules/glob.js +233 -0
- package/dist/rules/hooks.d.ts +25 -0
- package/dist/rules/hooks.js +75 -0
- package/dist/rules/output-style.d.ts +1 -0
- package/dist/rules/output-style.js +20 -0
- package/dist/scientific-visualization-banner.d.ts +1 -0
- package/dist/scientific-visualization-banner.js +2 -0
- package/dist/search-workflow-ideas.d.ts +67 -0
- package/dist/search-workflow-ideas.js +128 -0
- package/dist/secret-shapes.d.ts +9 -0
- package/dist/secret-shapes.js +63 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.js +129 -0
- package/dist/session-lineage.d.ts +8 -0
- package/dist/session-lineage.js +12 -0
- package/dist/skill-loop/apply.d.ts +19 -0
- package/dist/skill-loop/apply.js +483 -0
- package/dist/skill-loop/config.d.ts +50 -0
- package/dist/skill-loop/config.js +215 -0
- package/dist/skill-loop/curator.d.ts +18 -0
- package/dist/skill-loop/curator.js +232 -0
- package/dist/skill-loop/ledger.d.ts +39 -0
- package/dist/skill-loop/ledger.js +344 -0
- package/dist/skill-loop/proposals.d.ts +48 -0
- package/dist/skill-loop/proposals.js +290 -0
- package/dist/skill-loop/storage.d.ts +72 -0
- package/dist/skill-loop/storage.js +817 -0
- package/dist/skill-loop/time.d.ts +2 -0
- package/dist/skill-loop/time.js +23 -0
- package/dist/skill-loop/transaction.d.ts +62 -0
- package/dist/skill-loop/transaction.js +836 -0
- package/dist/skill-loop/usage.d.ts +31 -0
- package/dist/skill-loop/usage.js +146 -0
- package/dist/skill-observer.d.ts +22 -0
- package/dist/skill-observer.js +1154 -0
- package/dist/skill-renames.d.ts +5 -0
- package/dist/skill-renames.js +8 -0
- package/dist/skills.d.ts +307 -0
- package/dist/skills.js +450 -0
- package/dist/stable-identity.d.ts +14 -0
- package/dist/stable-identity.js +15 -0
- package/dist/state.d.ts +25 -0
- package/dist/state.js +38 -0
- package/dist/strict-json.d.ts +2 -0
- package/dist/strict-json.js +94 -0
- package/dist/tool-guards.d.ts +34 -0
- package/dist/tool-guards.js +210 -0
- package/dist/tool-kit.d.ts +32 -0
- package/dist/tool-kit.js +75 -0
- package/dist/tools.d.ts +43 -0
- package/dist/tools.js +381 -0
- package/dist/uiux-visual-catalog.d.ts +50 -0
- package/dist/uiux-visual-catalog.js +103 -0
- package/dist/user-facing-markdown.d.ts +5 -0
- package/dist/user-facing-markdown.js +93 -0
- package/dist/workflow-families.d.ts +16 -0
- package/dist/workflow-families.js +95 -0
- package/docs/assets/cover.webp +0 -0
- package/docs/assets/litopencode-continuity-1600.webp +0 -0
- package/docs/assets/litopencode-ignition-1600.webp +0 -0
- package/docs/assets/readme/badge-license.svg +1 -0
- package/docs/assets/readme/badge-version.svg +1 -0
- package/docs/assets/readme/litopencode-clay-icon.png +0 -0
- package/docs/assets/readme/litopencode-wordmark.svg +5 -0
- package/docs/lit-mark.md +46 -0
- package/docs/migration.md +162 -0
- package/docs/privacy.md +82 -0
- package/docs/reference-Ko-KR.md +309 -0
- package/docs/reference.md +444 -0
- package/output-styles/asd-ste100-ko.md +41 -0
- package/output-styles/asd-ste100.md +40 -0
- package/output-styles/eli5-ko.md +13 -0
- package/output-styles/eli5.md +11 -0
- package/package.json +57 -0
- package/qa/fixtures/litfamily-harness-speed-v1.json +38 -0
- package/qa/harness-speed-contract.mjs +209 -0
- package/qa/harness-speed-v2-contract.mjs +213 -0
- package/qa/harness-speed-verdict.mjs +105 -0
- package/skills/agent-roster/SKILL.md +262 -0
- package/skills/autoconference/LICENSE +21 -0
- package/skills/autoconference/PROVENANCE.md +20 -0
- package/skills/autoconference/SKILL.md +125 -0
- package/skills/autoconference/assets/conference_template.md +76 -0
- package/skills/autoconference/assets/report_template.md +53 -0
- package/skills/autoconference/assets/synthesis_template.md +39 -0
- package/skills/autoconference/modes/analyze.md +255 -0
- package/skills/autoconference/modes/core.md +112 -0
- package/skills/autoconference/modes/debate.md +373 -0
- package/skills/autoconference/modes/plan.md +310 -0
- package/skills/autoconference/modes/resume.md +48 -0
- package/skills/autoconference/modes/ship.md +57 -0
- package/skills/autoconference/modes/survey.md +109 -0
- package/skills/autoconference/references/agent-prompts.md +134 -0
- package/skills/autoconference/references/conference-protocol.md +102 -0
- package/skills/autoconference/references/convergence-guide.md +167 -0
- package/skills/autoconference/references/core-principles.md +83 -0
- package/skills/autoconference/references/crash-recovery.md +104 -0
- package/skills/autoconference/references/results-logging.md +198 -0
- package/skills/autoconference/references/upstream-family-contract.md +130 -0
- package/skills/autoconference/references/visualization-guide.md +105 -0
- package/skills/autoconference/scripts/check_conference.sh +371 -0
- package/skills/autoconference/scripts/init_conference.py +625 -0
- package/skills/autoconference/scripts/style_presets.py +104 -0
- package/skills/autoresearch/LICENSE +21 -0
- package/skills/autoresearch/PROVENANCE.md +20 -0
- package/skills/autoresearch/SKILL.md +131 -0
- package/skills/autoresearch/assets/report_template.md +50 -0
- package/skills/autoresearch/assets/research_template.md +38 -0
- package/skills/autoresearch/assets/results_template.tsv +1 -0
- package/skills/autoresearch/modes/core.md +216 -0
- package/skills/autoresearch/modes/debug.md +235 -0
- package/skills/autoresearch/modes/fix.md +173 -0
- package/skills/autoresearch/modes/learn.md +91 -0
- package/skills/autoresearch/modes/plan.md +291 -0
- package/skills/autoresearch/modes/predict.md +266 -0
- package/skills/autoresearch/modes/reason.md +170 -0
- package/skills/autoresearch/modes/scenario.md +164 -0
- package/skills/autoresearch/modes/security.md +282 -0
- package/skills/autoresearch/modes/ship.md +49 -0
- package/skills/autoresearch/references/core-principles.md +80 -0
- package/skills/autoresearch/references/evaluator-contract.md +126 -0
- package/skills/autoresearch/references/investigation-techniques.md +205 -0
- package/skills/autoresearch/references/owasp-checklist.md +161 -0
- package/skills/autoresearch/references/persona-templates.md +232 -0
- package/skills/autoresearch/references/results-logging.md +96 -0
- package/skills/autoresearch/references/scenario-dimensions.md +178 -0
- package/skills/autoresearch/references/stride-model.md +196 -0
- package/skills/autoresearch/references/stuck-detection.md +107 -0
- package/skills/autoresearch/references/type-checklists.md +163 -0
- package/skills/autoresearch/references/upstream-family-contract.md +125 -0
- package/skills/autoresearch/references/visualization-guide.md +95 -0
- package/skills/autoresearch/scripts/check_progress.sh +272 -0
- package/skills/autoresearch/scripts/init_research.py +330 -0
- package/skills/autoresearch/scripts/run_with_deadline.py +164 -0
- package/skills/autoresearch/scripts/style_presets.py +104 -0
- package/skills/browser-drive/SKILL.md +133 -0
- package/skills/browser-drive/references/snapshot-act-loop.md +37 -0
- package/skills/browser-drive/scripts/capability-probe.mjs +262 -0
- package/skills/comment-checker/SKILL.md +171 -0
- package/skills/debugging/SKILL.md +202 -0
- package/skills/debugging/references/README.md +15 -0
- package/skills/debugging/references/escalation.md +43 -0
- package/skills/debugging/references/runtimes/README.md +17 -0
- package/skills/debugging/references/runtimes/bundled-js-binary.md +44 -0
- package/skills/debugging/references/runtimes/go.md +37 -0
- package/skills/debugging/references/runtimes/native-binary.md +44 -0
- package/skills/debugging/references/runtimes/node.md +43 -0
- package/skills/debugging/references/runtimes/python.md +41 -0
- package/skills/debugging/references/runtimes/rust.md +37 -0
- package/skills/debugging/references/tools.md +72 -0
- package/skills/deep-interview/SKILL.md +201 -0
- package/skills/doctor-installer/SKILL.md +252 -0
- package/skills/durable-litgoal/SKILL.md +248 -0
- package/skills/frontend-ui-ux/SKILL.md +70 -0
- package/skills/frontend-ui-ux/data/LICENSE +21 -0
- package/skills/frontend-ui-ux/data/PROVENANCE.json +1088 -0
- package/skills/frontend-ui-ux/data/THIRD-PARTY-NOTICE.txt +14 -0
- package/skills/frontend-ui-ux/data/design-intelligence.json +1 -0
- package/skills/frontend-ui-ux/references/_canonical-corpus/ATTRIBUTION.md +217 -0
- package/skills/frontend-ui-ux/references/_canonical-corpus/LICENSE +21 -0
- package/skills/frontend-ui-ux/references/_canonical-corpus/LICENSE-Apache-2.0.txt +201 -0
- package/skills/frontend-ui-ux/references/_canonical-corpus/manifest.json +867 -0
- package/skills/frontend-ui-ux/references/adaptive-layout.md +85 -0
- package/skills/frontend-ui-ux/references/brand-and-imagery.md +79 -0
- package/skills/frontend-ui-ux/references/complete-contract.md +282 -0
- package/skills/frontend-ui-ux/references/composition.md +87 -0
- package/skills/frontend-ui-ux/references/creative-directions.md +83 -0
- package/skills/frontend-ui-ux/references/design/README.md +248 -0
- package/skills/frontend-ui-ux/references/design/_INDEX.md +191 -0
- package/skills/frontend-ui-ux/references/design/airbnb.md +393 -0
- package/skills/frontend-ui-ux/references/design/airtable.md +92 -0
- package/skills/frontend-ui-ux/references/design/apple.md +250 -0
- package/skills/frontend-ui-ux/references/design/aside.md +209 -0
- package/skills/frontend-ui-ux/references/design/binance.md +348 -0
- package/skills/frontend-ui-ux/references/design/bmw.md +183 -0
- package/skills/frontend-ui-ux/references/design/brutalist-skill.md +92 -0
- package/skills/frontend-ui-ux/references/design/bugatti.md +271 -0
- package/skills/frontend-ui-ux/references/design/cal.md +262 -0
- package/skills/frontend-ui-ux/references/design/claude.md +315 -0
- package/skills/frontend-ui-ux/references/design/clay.md +307 -0
- package/skills/frontend-ui-ux/references/design/clickhouse.md +284 -0
- package/skills/frontend-ui-ux/references/design/clone-from-url.md +65 -0
- package/skills/frontend-ui-ux/references/design/cohere.md +269 -0
- package/skills/frontend-ui-ux/references/design/coinbase.md +132 -0
- package/skills/frontend-ui-ux/references/design/composio.md +310 -0
- package/skills/frontend-ui-ux/references/design/cursor.md +312 -0
- package/skills/frontend-ui-ux/references/design/design-system-architecture.md +244 -0
- package/skills/frontend-ui-ux/references/design/elevenlabs.md +268 -0
- package/skills/frontend-ui-ux/references/design/expo.md +284 -0
- package/skills/frontend-ui-ux/references/design/ferrari.md +317 -0
- package/skills/frontend-ui-ux/references/design/figma.md +223 -0
- package/skills/frontend-ui-ux/references/design/framer.md +249 -0
- package/skills/frontend-ui-ux/references/design/gpt-tasteskill.md +74 -0
- package/skills/frontend-ui-ux/references/design/hashicorp.md +281 -0
- package/skills/frontend-ui-ux/references/design/ibm.md +335 -0
- package/skills/frontend-ui-ux/references/design/image-to-code-skill.md +1228 -0
- package/skills/frontend-ui-ux/references/design/imagegen-brandkit.md +798 -0
- package/skills/frontend-ui-ux/references/design/imagegen-frontend-mobile.md +1465 -0
- package/skills/frontend-ui-ux/references/design/imagegen-frontend-web.md +987 -0
- package/skills/frontend-ui-ux/references/design/intercom.md +149 -0
- package/skills/frontend-ui-ux/references/design/kraken.md +128 -0
- package/skills/frontend-ui-ux/references/design/lamborghini.md +291 -0
- package/skills/frontend-ui-ux/references/design/layout-skill.md +107 -0
- package/skills/frontend-ui-ux/references/design/lazyweb.md +77 -0
- package/skills/frontend-ui-ux/references/design/linear.app.md +370 -0
- package/skills/frontend-ui-ux/references/design/lovable.md +301 -0
- package/skills/frontend-ui-ux/references/design/mastercard.md +368 -0
- package/skills/frontend-ui-ux/references/design/meta.md +369 -0
- package/skills/frontend-ui-ux/references/design/minimalist-skill.md +85 -0
- package/skills/frontend-ui-ux/references/design/minimax.md +260 -0
- package/skills/frontend-ui-ux/references/design/mintlify.md +329 -0
- package/skills/frontend-ui-ux/references/design/miro.md +111 -0
- package/skills/frontend-ui-ux/references/design/mistral.ai.md +264 -0
- package/skills/frontend-ui-ux/references/design/mongodb.md +269 -0
- package/skills/frontend-ui-ux/references/design/nike.md +366 -0
- package/skills/frontend-ui-ux/references/design/notion.md +312 -0
- package/skills/frontend-ui-ux/references/design/nvidia.md +296 -0
- package/skills/frontend-ui-ux/references/design/ollama.md +270 -0
- package/skills/frontend-ui-ux/references/design/opencode.ai.md +284 -0
- package/skills/frontend-ui-ux/references/design/output-skill.md +49 -0
- package/skills/frontend-ui-ux/references/design/pinterest.md +233 -0
- package/skills/frontend-ui-ux/references/design/playstation.md +367 -0
- package/skills/frontend-ui-ux/references/design/posthog.md +259 -0
- package/skills/frontend-ui-ux/references/design/raycast.md +271 -0
- package/skills/frontend-ui-ux/references/design/react-dev-tooling-skill.md +230 -0
- package/skills/frontend-ui-ux/references/design/redesign-skill.md +178 -0
- package/skills/frontend-ui-ux/references/design/renault.md +314 -0
- package/skills/frontend-ui-ux/references/design/replicate.md +264 -0
- package/skills/frontend-ui-ux/references/design/resend.md +306 -0
- package/skills/frontend-ui-ux/references/design/revolut.md +188 -0
- package/skills/frontend-ui-ux/references/design/runwayml.md +247 -0
- package/skills/frontend-ui-ux/references/design/sanity.md +360 -0
- package/skills/frontend-ui-ux/references/design/sentry.md +265 -0
- package/skills/frontend-ui-ux/references/design/shopify.md +353 -0
- package/skills/frontend-ui-ux/references/design/soft-skill.md +98 -0
- package/skills/frontend-ui-ux/references/design/spacex.md +197 -0
- package/skills/frontend-ui-ux/references/design/spotify.md +249 -0
- package/skills/frontend-ui-ux/references/design/starbucks.md +583 -0
- package/skills/frontend-ui-ux/references/design/stitch-design-example.md +121 -0
- package/skills/frontend-ui-ux/references/design/stitch-skill.md +184 -0
- package/skills/frontend-ui-ux/references/design/stripe.md +325 -0
- package/skills/frontend-ui-ux/references/design/supabase.md +258 -0
- package/skills/frontend-ui-ux/references/design/superhuman.md +255 -0
- package/skills/frontend-ui-ux/references/design/taste-skill.md +1206 -0
- package/skills/frontend-ui-ux/references/design/tesla.md +289 -0
- package/skills/frontend-ui-ux/references/design/theverge.md +342 -0
- package/skills/frontend-ui-ux/references/design/together.ai.md +266 -0
- package/skills/frontend-ui-ux/references/design/uber.md +298 -0
- package/skills/frontend-ui-ux/references/design/vercel.md +313 -0
- package/skills/frontend-ui-ux/references/design/vodafone.md +426 -0
- package/skills/frontend-ui-ux/references/design/voltagent.md +326 -0
- package/skills/frontend-ui-ux/references/design/warp.md +256 -0
- package/skills/frontend-ui-ux/references/design/webflow.md +95 -0
- package/skills/frontend-ui-ux/references/design/wired.md +281 -0
- package/skills/frontend-ui-ux/references/design/wise.md +176 -0
- package/skills/frontend-ui-ux/references/design/x.ai.md +260 -0
- package/skills/frontend-ui-ux/references/design/zapier.md +331 -0
- package/skills/frontend-ui-ux/references/designpowers/EVIDENCE.md +97 -0
- package/skills/frontend-ui-ux/references/designpowers/README.md +48 -0
- package/skills/frontend-ui-ux/references/designpowers/UPSTREAM.md +80 -0
- package/skills/frontend-ui-ux/references/designpowers/lane-a-direction.md +64 -0
- package/skills/frontend-ui-ux/references/designpowers/lane-b-execution.md +65 -0
- package/skills/frontend-ui-ux/references/designpowers/lane-c-review.md +65 -0
- package/skills/frontend-ui-ux/references/designpowers/lane-d-memory.md +83 -0
- package/skills/frontend-ui-ux/references/designpowers/orchestration.md +80 -0
- package/skills/frontend-ui-ux/references/designpowers/routing.md +79 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/LICENSE +21 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/content-writer.md +132 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-builder.md +109 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-critic.md +89 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-lead.md +113 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-scout.md +78 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-strategist.md +121 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/inspiration-scout.md +107 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/agents/motion-designer.md +120 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/accessible-content/reference.md +101 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/adaptive-interfaces/reference.md +109 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/cognitive-accessibility/reference.md +107 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-debate/reference.md +199 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-debt-tracker/reference.md +174 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-handoff/reference.md +125 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-md/reference.md +106 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-retrospective/reference.md +266 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-review/reference.md +123 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-system-alignment/reference.md +120 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/designpowers-critique/reference.md +164 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/heuristic-evaluation/reference.md +85 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/inclusive-personas/reference.md +98 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/inspiration-scouting/reference.md +165 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/interaction-design/reference.md +122 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/motion-choreography/reference.md +81 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/research-planning/reference.md +96 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/responsive-patterns/reference.md +77 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/synthetic-user-testing/reference.md +192 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/taste-feedback/reference.md +165 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/taste-report/reference.md +78 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/token-architecture/reference.md +75 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/ui-composition/reference.md +117 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/usability-testing/reference.md +78 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/verification-before-shipping/reference.md +125 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/voice-and-tone/reference.md +79 -0
- package/skills/frontend-ui-ux/references/designpowers/vendor/skills/writing-design-plans/reference.md +119 -0
- package/skills/frontend-ui-ux/references/evidence-review.md +103 -0
- package/skills/frontend-ui-ux/references/implementation-platforms.md +94 -0
- package/skills/frontend-ui-ux/references/inclusive-interface.md +85 -0
- package/skills/frontend-ui-ux/references/interaction-motion.md +93 -0
- package/skills/frontend-ui-ux/references/operating-lanes.md +80 -0
- package/skills/frontend-ui-ux/references/perfection/README.md +160 -0
- package/skills/frontend-ui-ux/references/perfection/react-perf-tooling.md +127 -0
- package/skills/frontend-ui-ux/references/performance-delivery.md +77 -0
- package/skills/frontend-ui-ux/references/product-direction.md +84 -0
- package/skills/frontend-ui-ux/references/redesign-playbook.md +88 -0
- package/skills/frontend-ui-ux/references/system-foundations.md +86 -0
- package/skills/frontend-ui-ux/references/taste-direction.md +55 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/README.md +659 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/charts.csv +26 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/colors.csv +162 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/icons.csv +106 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/landing.csv +35 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/products.csv +162 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/react-performance.csv +45 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/astro.csv +54 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/flutter.csv +53 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/html-tailwind.csv +56 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/jetpack-compose.csv +53 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nextjs.csv +53 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nuxt-ui.csv +51 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nuxtjs.csv +59 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/react-native.csv +52 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/react.csv +54 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/shadcn.csv +61 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/svelte.csv +54 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/swiftui.csv +51 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/vue.csv +50 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/styles.csv +85 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/typography.csv +74 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/ui-reasoning.csv +162 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/ux-guidelines.csv +100 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/data/web-interface.csv +31 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/scripts/core.py +262 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/scripts/design_system.py +1148 -0
- package/skills/frontend-ui-ux/references/ui-ux-db/scripts/search.py +114 -0
- package/skills/frontend-ui-ux/references/visual-language.md +84 -0
- package/skills/frontend-ui-ux/references/visual-reconstruction.md +87 -0
- package/skills/frontend-ui-ux/schemas/design-contract-v1alpha1.json +570 -0
- package/skills/frontend-ui-ux/schemas/design-contract-v1beta1.json +32 -0
- package/skills/frontend-ui-ux/schemas/design-contract-v1beta2.json +34 -0
- package/skills/frontend-ui-ux/scripts/bounded-json.mjs +45 -0
- package/skills/frontend-ui-ux/scripts/canonical-json.mjs +26 -0
- package/skills/frontend-ui-ux/scripts/contract-error.mjs +15 -0
- package/skills/frontend-ui-ux/scripts/csv.mjs +64 -0
- package/skills/frontend-ui-ux/scripts/dataset.mjs +65 -0
- package/skills/frontend-ui-ux/scripts/design-contract.mjs +609 -0
- package/skills/frontend-ui-ux/scripts/import-design-intelligence.mjs +193 -0
- package/skills/frontend-ui-ux/scripts/retrieval.mjs +92 -0
- package/skills/frontend-ui-ux/scripts/stable-file-read.mjs +237 -0
- package/skills/frontend-ui-ux/scripts/stdin-json.mjs +16 -0
- package/skills/frontend-ui-ux/scripts/strict-json.mjs +102 -0
- package/skills/frontend-ui-ux/scripts/uiux.mjs +86 -0
- package/skills/frontend-ui-ux/scripts/verify-canonical-corpus.mjs +266 -0
- package/skills/lit-burnoff/SKILL.md +227 -0
- package/skills/lit-burnoff-file/SKILL.md +175 -0
- package/skills/lit-code/SKILL.md +266 -0
- package/skills/lit-code/references/README.md +18 -0
- package/skills/lit-code/references/go/README.md +12 -0
- package/skills/lit-code/references/go/concurrency.md +42 -0
- package/skills/lit-code/references/go/error-handling.md +47 -0
- package/skills/lit-code/references/go/testing.md +55 -0
- package/skills/lit-code/references/go/tooling.md +35 -0
- package/skills/lit-code/references/go/type-patterns.md +50 -0
- package/skills/lit-code/references/python/README.md +12 -0
- package/skills/lit-code/references/python/async.md +50 -0
- package/skills/lit-code/references/python/error-handling.md +44 -0
- package/skills/lit-code/references/python/testing.md +50 -0
- package/skills/lit-code/references/python/tooling.md +38 -0
- package/skills/lit-code/references/python/type-patterns.md +46 -0
- package/skills/lit-code/references/rust/README.md +12 -0
- package/skills/lit-code/references/rust/concurrency.md +45 -0
- package/skills/lit-code/references/rust/error-handling.md +43 -0
- package/skills/lit-code/references/rust/tooling.md +36 -0
- package/skills/lit-code/references/rust/type-patterns.md +46 -0
- package/skills/lit-code/references/rust/unsafe.md +47 -0
- package/skills/lit-code/references/typescript/README.md +11 -0
- package/skills/lit-code/references/typescript/error-handling.md +56 -0
- package/skills/lit-code/references/typescript/testing.md +42 -0
- package/skills/lit-code/references/typescript/tsconfig-strict.md +40 -0
- package/skills/lit-code/references/typescript/type-patterns.md +60 -0
- package/skills/lit-commit/SKILL.md +222 -0
- package/skills/lit-comprehend/SKILL.md +278 -0
- package/skills/lit-comprehend/assets/explainer-scaffold.html +104 -0
- package/skills/lit-comprehend/references/artifact-template.md +114 -0
- package/skills/lit-comprehend/references/micro-worlds.md +115 -0
- package/skills/lit-comprehend/scripts/verify-explainer.ts +339 -0
- package/skills/lit-crucible/SKILL.md +212 -0
- package/skills/lit-fetch/SKILL.md +242 -0
- package/skills/lit-handoff/SKILL.md +199 -0
- package/skills/lit-init/SKILL.md +214 -0
- package/skills/lit-korean/SKILL.md +231 -0
- package/skills/lit-plan/SKILL.md +351 -0
- package/skills/lit-plan/scripts/scaffold-plan.mjs +275 -0
- package/skills/lit-recap/SKILL.md +233 -0
- package/skills/lit-scientific-visualization/SKILL.md +175 -0
- package/skills/litresearch/SKILL.md +436 -0
- package/skills/litwork/SKILL.md +227 -0
- package/skills/lsp/SKILL.md +186 -0
- package/skills/lsp-setup/SKILL.md +187 -0
- package/skills/lsp-setup/references/README.md +40 -0
- package/skills/lsp-setup/references/bash.md +31 -0
- package/skills/lsp-setup/references/c-cpp.md +43 -0
- package/skills/lsp-setup/references/csharp.md +29 -0
- package/skills/lsp-setup/references/dart.md +25 -0
- package/skills/lsp-setup/references/elixir.md +30 -0
- package/skills/lsp-setup/references/go.md +33 -0
- package/skills/lsp-setup/references/haskell.md +27 -0
- package/skills/lsp-setup/references/java.md +28 -0
- package/skills/lsp-setup/references/julia.md +28 -0
- package/skills/lsp-setup/references/kotlin.md +25 -0
- package/skills/lsp-setup/references/lua.md +26 -0
- package/skills/lsp-setup/references/php.md +30 -0
- package/skills/lsp-setup/references/python.md +33 -0
- package/skills/lsp-setup/references/ruby.md +34 -0
- package/skills/lsp-setup/references/rust.md +34 -0
- package/skills/lsp-setup/references/swift.md +26 -0
- package/skills/lsp-setup/references/terraform.md +26 -0
- package/skills/lsp-setup/references/typescript.md +35 -0
- package/skills/lsp-setup/references/yaml.md +27 -0
- package/skills/lsp-setup/references/zig.md +28 -0
- package/skills/managed-skill-manifest.json +1386 -0
- package/skills/native-goal-verdict/SKILL.md +216 -0
- package/skills/refactor/SKILL.md +221 -0
- package/skills/reference-benchmark-claims/SKILL.md +204 -0
- package/skills/release-guardrails/SKILL.md +245 -0
- package/skills/review-work/SKILL.md +301 -0
- package/skills/rules/SKILL.md +196 -0
- package/skills/search-workflow-ideas/SKILL.md +223 -0
- package/skills/skill-observer/SKILL.md +148 -0
- package/skills/skill-observer/references/review-contract.md +95 -0
- package/skills/skill-rename-aliases.json +10 -0
- package/skills/start-work/SKILL.md +334 -0
- package/skills/structural-search/SKILL.md +234 -0
- package/skills/tool-guards/SKILL.md +223 -0
- package/skills/visual-qa/SKILL.md +61 -0
- package/skills/visual-qa/references/capture-playbook.md +105 -0
- package/skills/visual-qa/references/complete-contract.md +411 -0
- package/skills/visual-qa/schemas/evidence-manifest-v1alpha1.json +201 -0
- package/skills/visual-qa/schemas/evidence-manifest-v1beta1.json +141 -0
- package/skills/visual-qa/schemas/review-receipt-v1alpha1.json +113 -0
- package/skills/visual-qa/scripts/artifact.mjs +123 -0
- package/skills/visual-qa/scripts/bounded-json.mjs +47 -0
- package/skills/visual-qa/scripts/canonical-json.mjs +28 -0
- package/skills/visual-qa/scripts/capabilities.mjs +66 -0
- package/skills/visual-qa/scripts/contract-text.mjs +15 -0
- package/skills/visual-qa/scripts/design-contract.mjs +611 -0
- package/skills/visual-qa/scripts/evidence-evaluate.mjs +521 -0
- package/skills/visual-qa/scripts/evidence.mjs +271 -0
- package/skills/visual-qa/scripts/png-decode.mjs +146 -0
- package/skills/visual-qa/scripts/png.mjs +154 -0
- package/skills/visual-qa/scripts/review.mjs +188 -0
- package/skills/visual-qa/scripts/stdin-json.mjs +16 -0
- package/skills/visual-qa/scripts/strict-json.mjs +102 -0
- package/skills/visual-qa/scripts/tui.mjs +149 -0
- package/skills/visual-qa/scripts/visual-qa.mjs +90 -0
- package/skills/wikify/LICENSE +21 -0
- package/skills/wikify/PROVENANCE.md +18 -0
- package/skills/wikify/SKILL.md +176 -0
- package/skills/wikify/assets/home-template.md +44 -0
- package/skills/wikify/assets/maintenance-report-template.md +46 -0
- package/skills/wikify/assets/paper-source-note-template.md +137 -0
- package/skills/wikify/assets/source-note-template.md +45 -0
- package/skills/wikify/assets/wiki-rules-template.md +117 -0
- package/skills/wikify/modes/ingest.md +57 -0
- package/skills/wikify/modes/init.md +44 -0
- package/skills/wikify/modes/lint.md +60 -0
- package/skills/wikify/modes/query.md +38 -0
- package/skills/wikify/modes/save.md +45 -0
- package/skills/wikify/references-upstream-contract.md +758 -0
- package/skills/workflow-loop/SKILL.md +387 -0
- package/tools/check-pack-payload.mjs +410 -0
- package/tools/check-payload-substance.mjs +738 -0
- package/tools/check-version-lockstep.mjs +238 -0
- package/tools/gen-canonical-frontend-manifest.mjs +66 -0
- package/tools/gen-managed-skill-manifest.mjs +135 -0
- package/tools/harness-speed-local.mjs +261 -0
- package/tools/payload-reference-exemptions.json +49 -0
- package/tools/payload-substance-allowlist.json +46 -0
- package/tools/payload-substance-parity.json +571 -0
- package/tools/qa-real-surface-fixtures.mjs +428 -0
- package/tools/qa-real-surface-harness.mjs +173 -0
- package/tools/run-behavior-replacement-probes.mjs +296 -0
- package/tools/run-build.mjs +101 -0
- package/tools/run-harness-speed-local.mjs +52 -0
- package/tools/run-harness-speed-v2.mjs +36 -0
- package/tools/run-installed-resource-tamper-probe.mjs +62 -0
- package/tools/run-negative-gate-matrix.mjs +516 -0
- package/tools/run-rules-glob-differential.mjs +232 -0
- package/tools/run-typecheck.mjs +25 -0
- package/tools/run-uiux-visual-qa-scenarios.mjs +234 -0
- package/tools/run-wikify-surface-probe.mjs +170 -0
- package/tools/scan-legacy-tokens.mjs +431 -0
- package/tools/version-manifests.json +60 -0
- package/tsconfig.build.json +12 -0
- package/tsconfig.json +13 -0
- package/vendor/NOTICE.md +21 -0
- package/vendor/handoff/SKILL.md +199 -0
- package/vendor/handoff/evals/evals.json +154 -0
- package/vendor/handoff/examples/HANDOFF-example-generic-auth-refactor.md +97 -0
- package/vendor/handoff/templates/HANDOFF.md +121 -0
- package/vendor/licenses/022_handoff-MIT.txt +21 -0
- package/vendor/licenses/045_scientific-visualization-MIT.txt +21 -0
- package/vendor/provenance/022_handoff.md +19 -0
- package/vendor/provenance/045_scientific-visualization.md +36 -0
- package/vendor/scientific-visualization/SKILL.md +283 -0
- package/vendor/scientific-visualization/assets/color_palettes.py +197 -0
- package/vendor/scientific-visualization/assets/nature.mplstyle +75 -0
- package/vendor/scientific-visualization/assets/presentation.mplstyle +74 -0
- package/vendor/scientific-visualization/assets/publication.mplstyle +78 -0
- package/vendor/scientific-visualization/evals/evals.json +158 -0
- package/vendor/scientific-visualization/references/color_palettes.md +380 -0
- package/vendor/scientific-visualization/references/journal_requirements.md +359 -0
- package/vendor/scientific-visualization/references/matplotlib_examples.md +608 -0
- package/vendor/scientific-visualization/references/mdanalysis_martini_visualization.md +85 -0
- package/vendor/scientific-visualization/references/publication_guidelines.md +217 -0
- package/vendor/scientific-visualization/references/seaborn_for_publications.md +293 -0
- package/vendor/scientific-visualization/scripts/figure_export.py +238 -0
- package/vendor/scientific-visualization/scripts/style_presets.py +467 -0
- package/vendor/scientific-visualization/tests/test_figure_export.py +51 -0
- package/vendor/scientific-visualization/tests/test_style_presets.py +114 -0
|
@@ -0,0 +1,608 @@
|
|
|
1
|
+
## Table of Contents
|
|
2
|
+
|
|
3
|
+
- [Overview](#overview)
|
|
4
|
+
- [Setup and Configuration](#setup-and-configuration)
|
|
5
|
+
- [Publication-Quality Matplotlib Configuration](#publication-quality-matplotlib-configuration)
|
|
6
|
+
- [Helper Function for Saving](#helper-function-for-saving)
|
|
7
|
+
- [Example 1: Line Plot with Error Bars](#example-1-line-plot-with-error-bars)
|
|
8
|
+
- [Example 2: Multi-Panel Figure](#example-2-multi-panel-figure)
|
|
9
|
+
- [Example 3: Box Plot with Individual Points](#example-3-box-plot-with-individual-points)
|
|
10
|
+
- [Example 4: Heatmap with Colorbar](#example-4-heatmap-with-colorbar)
|
|
11
|
+
- [Example 5: Seaborn Violin Plot](#example-5-seaborn-violin-plot)
|
|
12
|
+
- [Example 6: Scientific Scatter with Regression](#example-6-scientific-scatter-with-regression)
|
|
13
|
+
- [Example 7: Time Series with Shaded Error](#example-7-time-series-with-shaded-error)
|
|
14
|
+
- [Example 8: Plotly Interactive Figure](#example-8-plotly-interactive-figure)
|
|
15
|
+
- [Example 9: Grouped Bar Plot with Significance](#example-9-grouped-bar-plot-with-significance)
|
|
16
|
+
- [Example 10: Publication-Ready Figure for Nature](#example-10-publication-ready-figure-for-nature)
|
|
17
|
+
- [Tips for Each Library](#tips-for-each-library)
|
|
18
|
+
- [Matplotlib](#matplotlib)
|
|
19
|
+
- [Seaborn](#seaborn)
|
|
20
|
+
- [Plotly](#plotly)
|
|
21
|
+
- [Common Workflow](#common-workflow)
|
|
22
|
+
- [Resources](#resources)
|
|
23
|
+
|
|
24
|
+
# Publication-Ready Matplotlib Examples
|
|
25
|
+
|
|
26
|
+
> Current skill contract: call `rcparams()` before figure creation, keep grids off unless requested, prefer `layout='constrained'`, use `style_legend()` for black-border legends, use `ensure_zero_origin_ticks()` for zero-baseline axes, and export rasters at 600+ DPI with `bbox_inches='tight'`. Upgrade any legacy low-DPI, frameless-legend, or direct-rcParams snippets to the current helpers before use.
|
|
27
|
+
|
|
28
|
+
> Scatter-only warning: if the data are independent observations, replicate clouds, correlations, or embeddings, use `plot_scatter_only()`/`ax.scatter()` and do not connect points with lines. Lines are only for ordered trajectories or justified fitted/model curves.
|
|
29
|
+
|
|
30
|
+
## Overview
|
|
31
|
+
|
|
32
|
+
This reference provides practical code examples for creating publication-ready scientific figures using Matplotlib, Seaborn, and Plotly. All examples follow best practices from `publication_guidelines.md` and use colorblind-friendly palettes from `color_palettes.md`.
|
|
33
|
+
|
|
34
|
+
## Setup and Configuration
|
|
35
|
+
|
|
36
|
+
### Publication-Quality Matplotlib Configuration
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
import matplotlib.pyplot as plt
|
|
40
|
+
import numpy as np
|
|
41
|
+
from style_presets import rcparams
|
|
42
|
+
|
|
43
|
+
# Set publication quality parameters from the skill single source of truth.
|
|
44
|
+
rcparams()
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Helper Function for Saving
|
|
48
|
+
|
|
49
|
+
```python
|
|
50
|
+
from figure_export import save_publication_figure
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Example 1: Line Plot with Error Bars
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
import matplotlib.pyplot as plt
|
|
57
|
+
import numpy as np
|
|
58
|
+
|
|
59
|
+
# Generate sample data
|
|
60
|
+
x = np.linspace(0, 10, 50)
|
|
61
|
+
y1 = 2 * x + 1 + np.random.normal(0, 1, 50)
|
|
62
|
+
y2 = 1.5 * x + 2 + np.random.normal(0, 1.2, 50)
|
|
63
|
+
|
|
64
|
+
# Calculate means and standard errors for binned data
|
|
65
|
+
bins = np.linspace(0, 10, 11)
|
|
66
|
+
y1_mean = [y1[(x >= bins[i]) & (x < bins[i+1])].mean() for i in range(len(bins)-1)]
|
|
67
|
+
y1_sem = [y1[(x >= bins[i]) & (x < bins[i+1])].std() /
|
|
68
|
+
np.sqrt(len(y1[(x >= bins[i]) & (x < bins[i+1])]))
|
|
69
|
+
for i in range(len(bins)-1)]
|
|
70
|
+
x_binned = (bins[:-1] + bins[1:]) / 2
|
|
71
|
+
|
|
72
|
+
# Create figure with appropriate size (single column width = 3.5 inches)
|
|
73
|
+
fig, ax = plt.subplots(figsize=(3.5, 2.5))
|
|
74
|
+
|
|
75
|
+
# Plot with error bars
|
|
76
|
+
ax.errorbar(x_binned, y1_mean, yerr=y1_sem,
|
|
77
|
+
marker='o', markersize=4, capsize=3, capthick=0.5,
|
|
78
|
+
label='Condition A', linewidth=1.5)
|
|
79
|
+
|
|
80
|
+
# Add labels with units
|
|
81
|
+
ax.set_xlabel('Time (hours)')
|
|
82
|
+
ax.set_ylabel('Fluorescence intensity (a.u.)')
|
|
83
|
+
|
|
84
|
+
# Add legend
|
|
85
|
+
ax.legend(frameon=True, edgecolor='black', framealpha=1, loc='upper left')
|
|
86
|
+
|
|
87
|
+
# Remove top and right spines
|
|
88
|
+
ax.spines['top'].set_visible(False)
|
|
89
|
+
ax.spines['right'].set_visible(False)
|
|
90
|
+
|
|
91
|
+
# Tight layout
|
|
92
|
+
fig.tight_layout()
|
|
93
|
+
|
|
94
|
+
# Save
|
|
95
|
+
save_publication_figure(fig, 'line_plot_with_errors')
|
|
96
|
+
plt.show()
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Example 2: Multi-Panel Figure
|
|
100
|
+
|
|
101
|
+
```python
|
|
102
|
+
import matplotlib.pyplot as plt
|
|
103
|
+
import numpy as np
|
|
104
|
+
from string import ascii_uppercase
|
|
105
|
+
|
|
106
|
+
# Create figure with multiple panels (double column width = 7 inches)
|
|
107
|
+
fig = plt.figure(figsize=(7, 4))
|
|
108
|
+
|
|
109
|
+
# Define grid for panels
|
|
110
|
+
gs = fig.add_gridspec(2, 3, hspace=0.4, wspace=0.4,
|
|
111
|
+
left=0.08, right=0.98, top=0.95, bottom=0.08)
|
|
112
|
+
|
|
113
|
+
# Panel A: Line plot
|
|
114
|
+
ax_a = fig.add_subplot(gs[0, :2])
|
|
115
|
+
x = np.linspace(0, 10, 100)
|
|
116
|
+
for i, offset in enumerate([0, 0.5, 1.0]):
|
|
117
|
+
ax_a.plot(x, np.sin(x) + offset, label=f'Dataset {i+1}')
|
|
118
|
+
ax_a.set_xlabel('Time (s)')
|
|
119
|
+
ax_a.set_ylabel('Amplitude (V)')
|
|
120
|
+
ax_a.legend(frameon=True, edgecolor='black', framealpha=1, fontsize=6)
|
|
121
|
+
ax_a.spines['top'].set_visible(False)
|
|
122
|
+
ax_a.spines['right'].set_visible(False)
|
|
123
|
+
|
|
124
|
+
# Panel B: Bar plot
|
|
125
|
+
ax_b = fig.add_subplot(gs[0, 2])
|
|
126
|
+
categories = ['Control', 'Treatment\nA', 'Treatment\nB']
|
|
127
|
+
values = [100, 125, 140]
|
|
128
|
+
errors = [5, 8, 6]
|
|
129
|
+
ax_b.bar(categories, values, yerr=errors, capsize=3,
|
|
130
|
+
color=['#0072B2', '#E69F00', '#009E73'], alpha=0.8)
|
|
131
|
+
ax_b.set_ylabel('Response (%)')
|
|
132
|
+
ax_b.spines['top'].set_visible(False)
|
|
133
|
+
ax_b.spines['right'].set_visible(False)
|
|
134
|
+
ax_b.set_ylim(0, 160)
|
|
135
|
+
|
|
136
|
+
# Panel C: Scatter plot
|
|
137
|
+
ax_c = fig.add_subplot(gs[1, 0])
|
|
138
|
+
x = np.random.randn(100)
|
|
139
|
+
y = 2*x + np.random.randn(100)
|
|
140
|
+
ax_c.scatter(x, y, s=10, alpha=0.6, color='#0072B2')
|
|
141
|
+
ax_c.set_xlabel('Variable X')
|
|
142
|
+
ax_c.set_ylabel('Variable Y')
|
|
143
|
+
ax_c.spines['top'].set_visible(False)
|
|
144
|
+
ax_c.spines['right'].set_visible(False)
|
|
145
|
+
|
|
146
|
+
# Panel D: Heatmap
|
|
147
|
+
ax_d = fig.add_subplot(gs[1, 1:])
|
|
148
|
+
data = np.random.randn(10, 20)
|
|
149
|
+
im = ax_d.imshow(data, cmap='viridis', aspect='auto')
|
|
150
|
+
ax_d.set_xlabel('Sample number')
|
|
151
|
+
ax_d.set_ylabel('Feature')
|
|
152
|
+
cbar = plt.colorbar(im, ax=ax_d, fraction=0.046, pad=0.04)
|
|
153
|
+
cbar.set_label('Intensity (a.u.)', rotation=270, labelpad=12)
|
|
154
|
+
|
|
155
|
+
# Add panel labels
|
|
156
|
+
panels = [ax_a, ax_b, ax_c, ax_d]
|
|
157
|
+
for i, ax in enumerate(panels):
|
|
158
|
+
ax.text(-0.15, 1.05, ascii_uppercase[i], transform=ax.transAxes,
|
|
159
|
+
fontsize=10, fontweight='bold', va='top')
|
|
160
|
+
|
|
161
|
+
save_publication_figure(fig, 'multi_panel_figure')
|
|
162
|
+
plt.show()
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Example 3: Box Plot with Individual Points
|
|
166
|
+
|
|
167
|
+
```python
|
|
168
|
+
import matplotlib.pyplot as plt
|
|
169
|
+
import numpy as np
|
|
170
|
+
|
|
171
|
+
# Generate sample data
|
|
172
|
+
np.random.seed(42)
|
|
173
|
+
data = [np.random.normal(100, 15, 30),
|
|
174
|
+
np.random.normal(120, 20, 30),
|
|
175
|
+
np.random.normal(140, 18, 30),
|
|
176
|
+
np.random.normal(110, 22, 30)]
|
|
177
|
+
|
|
178
|
+
fig, ax = plt.subplots(figsize=(3.5, 3))
|
|
179
|
+
|
|
180
|
+
# Create box plot
|
|
181
|
+
bp = ax.boxplot(data, widths=0.5, patch_artist=True,
|
|
182
|
+
showfliers=False, # We'll add points manually
|
|
183
|
+
boxprops=dict(facecolor='lightgray', edgecolor='black', linewidth=0.8),
|
|
184
|
+
medianprops=dict(color='black', linewidth=1.5),
|
|
185
|
+
whiskerprops=dict(linewidth=0.8),
|
|
186
|
+
capprops=dict(linewidth=0.8))
|
|
187
|
+
|
|
188
|
+
# Overlay individual points
|
|
189
|
+
colors = ['#0072B2', '#E69F00', '#009E73', '#D55E00']
|
|
190
|
+
for i, (d, color) in enumerate(zip(data, colors)):
|
|
191
|
+
# Add jitter to x positions
|
|
192
|
+
x = np.random.normal(i+1, 0.04, size=len(d))
|
|
193
|
+
ax.scatter(x, d, alpha=0.4, s=8, color=color)
|
|
194
|
+
|
|
195
|
+
# Customize
|
|
196
|
+
ax.set_xticklabels(['Control', 'Treatment A', 'Treatment B', 'Treatment C'])
|
|
197
|
+
ax.set_ylabel('Cell count')
|
|
198
|
+
ax.spines['top'].set_visible(False)
|
|
199
|
+
ax.spines['right'].set_visible(False)
|
|
200
|
+
ax.set_ylim(50, 200)
|
|
201
|
+
|
|
202
|
+
fig.tight_layout()
|
|
203
|
+
save_publication_figure(fig, 'boxplot_with_points')
|
|
204
|
+
plt.show()
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Example 4: Heatmap with Colorbar
|
|
208
|
+
|
|
209
|
+
```python
|
|
210
|
+
import matplotlib.pyplot as plt
|
|
211
|
+
import numpy as np
|
|
212
|
+
|
|
213
|
+
# Generate correlation matrix
|
|
214
|
+
np.random.seed(42)
|
|
215
|
+
n = 10
|
|
216
|
+
A = np.random.randn(n, n)
|
|
217
|
+
corr_matrix = np.corrcoef(A)
|
|
218
|
+
|
|
219
|
+
# Create figure
|
|
220
|
+
fig, ax = plt.subplots(figsize=(4, 3.5))
|
|
221
|
+
|
|
222
|
+
# Plot heatmap
|
|
223
|
+
im = ax.imshow(corr_matrix, cmap='RdBu_r', vmin=-1, vmax=1, aspect='auto')
|
|
224
|
+
|
|
225
|
+
# Add colorbar
|
|
226
|
+
cbar = plt.colorbar(im, ax=ax, fraction=0.046, pad=0.04)
|
|
227
|
+
cbar.set_label('Correlation coefficient', rotation=270, labelpad=15)
|
|
228
|
+
|
|
229
|
+
# Set ticks and labels
|
|
230
|
+
gene_names = [f'Gene{i+1}' for i in range(n)]
|
|
231
|
+
ax.set_xticks(np.arange(n))
|
|
232
|
+
ax.set_yticks(np.arange(n))
|
|
233
|
+
ax.set_xticklabels(gene_names, rotation=45, ha='right')
|
|
234
|
+
ax.set_yticklabels(gene_names)
|
|
235
|
+
|
|
236
|
+
# Add grid
|
|
237
|
+
ax.set_xticks(np.arange(n)-.5, minor=True)
|
|
238
|
+
ax.set_yticks(np.arange(n)-.5, minor=True)
|
|
239
|
+
ax.grid(which='minor', color='white', linestyle='-', linewidth=0.5)
|
|
240
|
+
|
|
241
|
+
fig.tight_layout()
|
|
242
|
+
save_publication_figure(fig, 'correlation_heatmap')
|
|
243
|
+
plt.show()
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
## Example 5: Seaborn Violin Plot
|
|
247
|
+
|
|
248
|
+
```python
|
|
249
|
+
import matplotlib.pyplot as plt
|
|
250
|
+
import seaborn as sns
|
|
251
|
+
import pandas as pd
|
|
252
|
+
import numpy as np
|
|
253
|
+
|
|
254
|
+
# Generate sample data
|
|
255
|
+
np.random.seed(42)
|
|
256
|
+
data = pd.DataFrame({
|
|
257
|
+
'condition': np.repeat(['Control', 'Drug A', 'Drug B'], 50),
|
|
258
|
+
'value': np.concatenate([
|
|
259
|
+
np.random.normal(100, 15, 50),
|
|
260
|
+
np.random.normal(120, 20, 50),
|
|
261
|
+
np.random.normal(140, 18, 50)
|
|
262
|
+
])
|
|
263
|
+
})
|
|
264
|
+
|
|
265
|
+
# Set style
|
|
266
|
+
sns.set_style('ticks')
|
|
267
|
+
sns.set_palette(['#0072B2', '#E69F00', '#009E73'])
|
|
268
|
+
|
|
269
|
+
fig, ax = plt.subplots(figsize=(3.5, 3))
|
|
270
|
+
|
|
271
|
+
# Create violin plot
|
|
272
|
+
sns.violinplot(data=data, x='condition', y='value', ax=ax,
|
|
273
|
+
inner='box', linewidth=0.8)
|
|
274
|
+
|
|
275
|
+
# Add strip plot
|
|
276
|
+
sns.stripplot(data=data, x='condition', y='value', ax=ax,
|
|
277
|
+
size=2, alpha=0.3, color='black')
|
|
278
|
+
|
|
279
|
+
# Customize
|
|
280
|
+
ax.set_xlabel('')
|
|
281
|
+
ax.set_ylabel('Expression level (AU)')
|
|
282
|
+
ax.spines['top'].set_visible(False)
|
|
283
|
+
ax.spines['right'].set_visible(False)
|
|
284
|
+
|
|
285
|
+
fig.tight_layout()
|
|
286
|
+
save_publication_figure(fig, 'violin_plot')
|
|
287
|
+
plt.show()
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
## Example 6: Scientific Scatter with Regression
|
|
291
|
+
|
|
292
|
+
```python
|
|
293
|
+
import matplotlib.pyplot as plt
|
|
294
|
+
import numpy as np
|
|
295
|
+
from scipy import stats
|
|
296
|
+
|
|
297
|
+
# Generate data with correlation
|
|
298
|
+
np.random.seed(42)
|
|
299
|
+
x = np.random.randn(100)
|
|
300
|
+
y = 2.5 * x + np.random.randn(100) * 0.8
|
|
301
|
+
|
|
302
|
+
# Calculate regression
|
|
303
|
+
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
|
|
304
|
+
|
|
305
|
+
# Create figure
|
|
306
|
+
fig, ax = plt.subplots(figsize=(3.5, 3.5))
|
|
307
|
+
|
|
308
|
+
# Scatter plot
|
|
309
|
+
from style_presets import plot_scatter_only
|
|
310
|
+
|
|
311
|
+
plot_scatter_only(ax, x, y, s=15, alpha=0.6, color='#0072B2')
|
|
312
|
+
|
|
313
|
+
# Regression line
|
|
314
|
+
x_line = np.array([x.min(), x.max()])
|
|
315
|
+
y_line = slope * x_line + intercept
|
|
316
|
+
ax.plot(x_line, y_line, 'r-', linewidth=1.5, label=f'y = {slope:.2f}x + {intercept:.2f}')
|
|
317
|
+
|
|
318
|
+
# Add statistics text
|
|
319
|
+
stats_text = f'$R^2$ = {r_value**2:.3f}\n$p$ < 0.001' if p_value < 0.001 else f'$R^2$ = {r_value**2:.3f}\n$p$ = {p_value:.3f}'
|
|
320
|
+
ax.text(0.05, 0.95, stats_text, transform=ax.transAxes,
|
|
321
|
+
verticalalignment='top', fontsize=7,
|
|
322
|
+
bbox=dict(boxstyle='round', facecolor='white', alpha=0.8, edgecolor='gray', linewidth=0.5))
|
|
323
|
+
|
|
324
|
+
# Customize
|
|
325
|
+
ax.set_xlabel('Predictor variable')
|
|
326
|
+
ax.set_ylabel('Response variable')
|
|
327
|
+
ax.spines['top'].set_visible(False)
|
|
328
|
+
ax.spines['right'].set_visible(False)
|
|
329
|
+
|
|
330
|
+
fig.tight_layout()
|
|
331
|
+
save_publication_figure(fig, 'scatter_regression')
|
|
332
|
+
plt.show()
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
## Example 7: Time Series with Shaded Error
|
|
336
|
+
|
|
337
|
+
```python
|
|
338
|
+
import matplotlib.pyplot as plt
|
|
339
|
+
import numpy as np
|
|
340
|
+
|
|
341
|
+
# Generate time series data
|
|
342
|
+
np.random.seed(42)
|
|
343
|
+
time = np.linspace(0, 24, 100)
|
|
344
|
+
n_replicates = 5
|
|
345
|
+
|
|
346
|
+
# Simulate multiple replicates
|
|
347
|
+
data = np.array([10 * np.exp(-time/10) + np.random.normal(0, 0.5, 100)
|
|
348
|
+
for _ in range(n_replicates)])
|
|
349
|
+
|
|
350
|
+
# Calculate mean and SEM
|
|
351
|
+
mean = data.mean(axis=0)
|
|
352
|
+
sem = data.std(axis=0) / np.sqrt(n_replicates)
|
|
353
|
+
|
|
354
|
+
# Create figure
|
|
355
|
+
fig, ax = plt.subplots(figsize=(4, 2.5))
|
|
356
|
+
|
|
357
|
+
# Plot mean line
|
|
358
|
+
ax.plot(time, mean, linewidth=1.5, color='#0072B2', label='Mean ± SEM')
|
|
359
|
+
|
|
360
|
+
# Add shaded error region
|
|
361
|
+
ax.fill_between(time, mean - sem, mean + sem,
|
|
362
|
+
alpha=0.3, color='#0072B2', linewidth=0)
|
|
363
|
+
|
|
364
|
+
# Customize
|
|
365
|
+
ax.set_xlabel('Time (hours)')
|
|
366
|
+
ax.set_ylabel('Concentration (μM)')
|
|
367
|
+
ax.legend(frameon=True, edgecolor='black', framealpha=1, loc='upper right')
|
|
368
|
+
ax.spines['top'].set_visible(False)
|
|
369
|
+
ax.spines['right'].set_visible(False)
|
|
370
|
+
ax.set_xlim(0, 24)
|
|
371
|
+
ax.set_ylim(0, 12)
|
|
372
|
+
|
|
373
|
+
fig.tight_layout()
|
|
374
|
+
save_publication_figure(fig, 'timeseries_shaded')
|
|
375
|
+
plt.show()
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
## Example 8: Plotly Interactive Figure
|
|
379
|
+
|
|
380
|
+
```python
|
|
381
|
+
import plotly.graph_objects as go
|
|
382
|
+
import numpy as np
|
|
383
|
+
|
|
384
|
+
# Generate data
|
|
385
|
+
np.random.seed(42)
|
|
386
|
+
x = np.random.randn(100)
|
|
387
|
+
y = 2*x + np.random.randn(100)
|
|
388
|
+
colors = np.random.choice(['Group A', 'Group B'], 100)
|
|
389
|
+
|
|
390
|
+
# Okabe-Ito colors for Plotly
|
|
391
|
+
okabe_ito_plotly = ['#E69F00', '#56B4E9']
|
|
392
|
+
|
|
393
|
+
# Create figure
|
|
394
|
+
fig = go.Figure()
|
|
395
|
+
|
|
396
|
+
for group, color in zip(['Group A', 'Group B'], okabe_ito_plotly):
|
|
397
|
+
mask = colors == group
|
|
398
|
+
fig.add_trace(go.Scatter(
|
|
399
|
+
x=x[mask], y=y[mask],
|
|
400
|
+
mode='markers',
|
|
401
|
+
name=group,
|
|
402
|
+
marker=dict(size=6, color=color, opacity=0.6)
|
|
403
|
+
))
|
|
404
|
+
|
|
405
|
+
# Update layout for publication quality
|
|
406
|
+
fig.update_layout(
|
|
407
|
+
width=500,
|
|
408
|
+
height=400,
|
|
409
|
+
font=dict(family='Arial, sans-serif', size=10),
|
|
410
|
+
plot_bgcolor='white',
|
|
411
|
+
xaxis=dict(
|
|
412
|
+
title='Variable X',
|
|
413
|
+
showgrid=False,
|
|
414
|
+
showline=True,
|
|
415
|
+
linewidth=1,
|
|
416
|
+
linecolor='black',
|
|
417
|
+
mirror=False
|
|
418
|
+
),
|
|
419
|
+
yaxis=dict(
|
|
420
|
+
title='Variable Y',
|
|
421
|
+
showgrid=False,
|
|
422
|
+
showline=True,
|
|
423
|
+
linewidth=1,
|
|
424
|
+
linecolor='black',
|
|
425
|
+
mirror=False
|
|
426
|
+
),
|
|
427
|
+
legend=dict(
|
|
428
|
+
x=0.02,
|
|
429
|
+
y=0.98,
|
|
430
|
+
bgcolor='rgba(255,255,255,0.8)',
|
|
431
|
+
bordercolor='gray',
|
|
432
|
+
borderwidth=0.5
|
|
433
|
+
)
|
|
434
|
+
)
|
|
435
|
+
|
|
436
|
+
# Save as static image (requires kaleido)
|
|
437
|
+
fig.write_image('plotly_scatter.png', width=500, height=400, scale=3) # scale=3 gives ~300 DPI
|
|
438
|
+
fig.write_html('plotly_scatter.html') # Interactive version
|
|
439
|
+
|
|
440
|
+
fig.show()
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
## Example 9: Grouped Bar Plot with Significance
|
|
444
|
+
|
|
445
|
+
```python
|
|
446
|
+
import matplotlib.pyplot as plt
|
|
447
|
+
import numpy as np
|
|
448
|
+
|
|
449
|
+
# Data
|
|
450
|
+
categories = ['WT', 'Mutant A', 'Mutant B']
|
|
451
|
+
control_means = [100, 85, 70]
|
|
452
|
+
control_sem = [5, 6, 5]
|
|
453
|
+
treatment_means = [100, 120, 140]
|
|
454
|
+
treatment_sem = [6, 8, 9]
|
|
455
|
+
|
|
456
|
+
x = np.arange(len(categories))
|
|
457
|
+
width = 0.35
|
|
458
|
+
|
|
459
|
+
fig, ax = plt.subplots(figsize=(3.5, 3))
|
|
460
|
+
|
|
461
|
+
# Create bars
|
|
462
|
+
bars1 = ax.bar(x - width/2, control_means, width, yerr=control_sem,
|
|
463
|
+
capsize=3, label='Control', color='#0072B2', alpha=0.8)
|
|
464
|
+
bars2 = ax.bar(x + width/2, treatment_means, width, yerr=treatment_sem,
|
|
465
|
+
capsize=3, label='Treatment', color='#E69F00', alpha=0.8)
|
|
466
|
+
|
|
467
|
+
# Add significance markers
|
|
468
|
+
def add_significance_bar(ax, x1, x2, y, h, text):
|
|
469
|
+
"""Add significance bar between two bars"""
|
|
470
|
+
ax.plot([x1, x1, x2, x2], [y, y+h, y+h, y], linewidth=0.8, c='black')
|
|
471
|
+
ax.text((x1+x2)/2, y+h, text, ha='center', va='bottom', fontsize=7)
|
|
472
|
+
|
|
473
|
+
# Mark significant differences
|
|
474
|
+
add_significance_bar(ax, x[1]-width/2, x[1]+width/2, 135, 3, '***')
|
|
475
|
+
add_significance_bar(ax, x[2]-width/2, x[2]+width/2, 155, 3, '***')
|
|
476
|
+
|
|
477
|
+
# Customize
|
|
478
|
+
ax.set_ylabel('Activity (% of WT control)')
|
|
479
|
+
ax.set_xticks(x)
|
|
480
|
+
ax.set_xticklabels(categories)
|
|
481
|
+
ax.legend(frameon=True, edgecolor='black', framealpha=1, loc='upper left')
|
|
482
|
+
ax.spines['top'].set_visible(False)
|
|
483
|
+
ax.spines['right'].set_visible(False)
|
|
484
|
+
ax.set_ylim(0, 180)
|
|
485
|
+
|
|
486
|
+
# Add note about significance
|
|
487
|
+
ax.text(0.98, 0.02, '*** p < 0.001', transform=ax.transAxes,
|
|
488
|
+
ha='right', va='bottom', fontsize=6)
|
|
489
|
+
|
|
490
|
+
fig.tight_layout()
|
|
491
|
+
save_publication_figure(fig, 'grouped_bar_significance')
|
|
492
|
+
plt.show()
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
## Example 10: Publication-Ready Figure for Nature
|
|
496
|
+
|
|
497
|
+
```python
|
|
498
|
+
import matplotlib.pyplot as plt
|
|
499
|
+
import numpy as np
|
|
500
|
+
from string import ascii_lowercase
|
|
501
|
+
|
|
502
|
+
# Nature specifications: 89mm single column
|
|
503
|
+
inch_per_mm = 0.0393701
|
|
504
|
+
width_mm = 89
|
|
505
|
+
height_mm = 110
|
|
506
|
+
figsize = (width_mm * inch_per_mm, height_mm * inch_per_mm)
|
|
507
|
+
|
|
508
|
+
fig = plt.figure(figsize=figsize)
|
|
509
|
+
gs = fig.add_gridspec(3, 2, hspace=0.5, wspace=0.4,
|
|
510
|
+
left=0.12, right=0.95, top=0.96, bottom=0.08)
|
|
511
|
+
|
|
512
|
+
# Panel a: Time course
|
|
513
|
+
ax_a = fig.add_subplot(gs[0, :])
|
|
514
|
+
time = np.linspace(0, 48, 100)
|
|
515
|
+
for i, label in enumerate(['Control', 'Treatment']):
|
|
516
|
+
y = (1 + i*0.5) * np.exp(-time/20) * (1 + 0.3*np.sin(time/5))
|
|
517
|
+
ax_a.plot(time, y, linewidth=1.2, label=label)
|
|
518
|
+
ax_a.set_xlabel('Time (h)', fontsize=7)
|
|
519
|
+
ax_a.set_ylabel('Growth (OD$_{600}$)', fontsize=7)
|
|
520
|
+
ax_a.legend(frameon=True, edgecolor='black', framealpha=1, fontsize=6)
|
|
521
|
+
ax_a.tick_params(labelsize=6)
|
|
522
|
+
ax_a.spines['top'].set_visible(False)
|
|
523
|
+
ax_a.spines['right'].set_visible(False)
|
|
524
|
+
|
|
525
|
+
# Panel b: Bar plot
|
|
526
|
+
ax_b = fig.add_subplot(gs[1, 0])
|
|
527
|
+
categories = ['A', 'B', 'C']
|
|
528
|
+
values = [1.0, 1.5, 2.2]
|
|
529
|
+
errors = [0.1, 0.15, 0.2]
|
|
530
|
+
ax_b.bar(categories, values, yerr=errors, capsize=2, width=0.6,
|
|
531
|
+
color='#0072B2', alpha=0.8)
|
|
532
|
+
ax_b.set_ylabel('Fold change', fontsize=7)
|
|
533
|
+
ax_b.tick_params(labelsize=6)
|
|
534
|
+
ax_b.spines['top'].set_visible(False)
|
|
535
|
+
ax_b.spines['right'].set_visible(False)
|
|
536
|
+
|
|
537
|
+
# Panel c: Heatmap
|
|
538
|
+
ax_c = fig.add_subplot(gs[1, 1])
|
|
539
|
+
data = np.random.randn(8, 6)
|
|
540
|
+
im = ax_c.imshow(data, cmap='viridis', aspect='auto')
|
|
541
|
+
ax_c.set_xlabel('Sample', fontsize=7)
|
|
542
|
+
ax_c.set_ylabel('Gene', fontsize=7)
|
|
543
|
+
ax_c.tick_params(labelsize=6)
|
|
544
|
+
|
|
545
|
+
# Panel d: Scatter
|
|
546
|
+
ax_d = fig.add_subplot(gs[2, :])
|
|
547
|
+
x = np.random.randn(50)
|
|
548
|
+
y = 2*x + np.random.randn(50)*0.5
|
|
549
|
+
ax_d.scatter(x, y, s=8, alpha=0.6, color='#E69F00')
|
|
550
|
+
ax_d.set_xlabel('Expression gene X', fontsize=7)
|
|
551
|
+
ax_d.set_ylabel('Expression gene Y', fontsize=7)
|
|
552
|
+
ax_d.tick_params(labelsize=6)
|
|
553
|
+
ax_d.spines['top'].set_visible(False)
|
|
554
|
+
ax_d.spines['right'].set_visible(False)
|
|
555
|
+
|
|
556
|
+
# Add lowercase panel labels (Nature style)
|
|
557
|
+
for i, ax in enumerate([ax_a, ax_b, ax_c, ax_d]):
|
|
558
|
+
ax.text(-0.2, 1.1, f'{ascii_lowercase[i]}', transform=ax.transAxes,
|
|
559
|
+
fontsize=9, fontweight='bold', va='top')
|
|
560
|
+
|
|
561
|
+
# Save in Nature-preferred format
|
|
562
|
+
fig.savefig('nature_figure.pdf', dpi=1000, bbox_inches='tight',
|
|
563
|
+
facecolor='white', edgecolor='none')
|
|
564
|
+
fig.savefig('nature_figure.png', dpi=600, bbox_inches='tight',
|
|
565
|
+
facecolor='white', edgecolor='none')
|
|
566
|
+
|
|
567
|
+
plt.show()
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
## Tips for Each Library
|
|
571
|
+
|
|
572
|
+
### Matplotlib
|
|
573
|
+
- Use `fig.tight_layout()` or `constrained_layout=True` to prevent overlapping
|
|
574
|
+
- Set DPI to 300-600 for publication
|
|
575
|
+
- Use vector formats (PDF, EPS) for line plots
|
|
576
|
+
- Embed fonts in PDF/EPS files
|
|
577
|
+
|
|
578
|
+
### Seaborn
|
|
579
|
+
- Built on matplotlib, so all matplotlib customizations work
|
|
580
|
+
- Use `sns.set_style('ticks')` or `'whitegrid'` for clean looks
|
|
581
|
+
- `sns.despine()` removes top and right spines
|
|
582
|
+
- Set custom palette with `sns.set_palette()`
|
|
583
|
+
|
|
584
|
+
### Plotly
|
|
585
|
+
- Great for interactive exploratory analysis
|
|
586
|
+
- Export static images with `fig.write_image()` (requires kaleido package)
|
|
587
|
+
- Use `scale` parameter to control DPI (scale=3 ≈ 300 DPI)
|
|
588
|
+
- Update layout extensively for publication quality
|
|
589
|
+
|
|
590
|
+
## Common Workflow
|
|
591
|
+
|
|
592
|
+
1. **Explore with default settings**
|
|
593
|
+
2. **Apply publication configuration** (see Setup section)
|
|
594
|
+
3. **Create plot with appropriate size** (check journal requirements)
|
|
595
|
+
4. **Customize colors** (use colorblind-friendly palettes)
|
|
596
|
+
5. **Adjust fonts and line widths** (readable at final size)
|
|
597
|
+
6. **Remove chart junk** (top/right spines, excessive grid)
|
|
598
|
+
7. **Add clear labels with units**
|
|
599
|
+
8. **Test in grayscale**
|
|
600
|
+
9. **Save in multiple formats** (PDF for vector, PNG for raster)
|
|
601
|
+
10. **Verify in final context** (import into manuscript to check size)
|
|
602
|
+
|
|
603
|
+
## Resources
|
|
604
|
+
|
|
605
|
+
- Matplotlib documentation: https://matplotlib.org/
|
|
606
|
+
- Seaborn gallery: https://seaborn.pydata.org/examples/index.html
|
|
607
|
+
- Plotly documentation: https://plotly.com/python/
|
|
608
|
+
- Nature Methods Points of View: Data visualization column archive
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# MDAnalysis-based MARTINI / coarse-grained trajectory visualization
|
|
2
|
+
|
|
3
|
+
Use this reference when the user needs practical visualization of MARTINI or other coarse-grained MD trajectories, especially when VMD auto-bond rendering is awkward or water beads dominate the scene.
|
|
4
|
+
|
|
5
|
+
## Durable lesson
|
|
6
|
+
|
|
7
|
+
Coarse-grained MARTINI systems are often easier to visualize as particle clouds than as molecule/bond drawings:
|
|
8
|
+
|
|
9
|
+
- Hide water by default; otherwise tens of thousands of water beads obscure the morphology.
|
|
10
|
+
- Use `.gro` topology/coordinates with MDAnalysis when `.tpr` support is uncertain or too new for the installed MDAnalysis version.
|
|
11
|
+
- Treat the visualization as bead-class rendering: CP/oil beads, surfactant heads, surfactant tails, counterions, optional water.
|
|
12
|
+
- For morphology work, pair static PNG snapshots with an interactive HTML/WebGL or GUI viewer. Static images are good for reports; interactive orbit/slider is good for intuition.
|
|
13
|
+
|
|
14
|
+
## Recommended output pattern
|
|
15
|
+
|
|
16
|
+
For a trajectory visualization task, produce both:
|
|
17
|
+
|
|
18
|
+
1. Interactive HTML viewer
|
|
19
|
+
- sampled frames embedded
|
|
20
|
+
- slider/play controls
|
|
21
|
+
- drag/orbit and wheel/zoom if possible
|
|
22
|
+
- water hidden by default
|
|
23
|
+
|
|
24
|
+
2. PNG outputs
|
|
25
|
+
- one last-frame PNG
|
|
26
|
+
- optionally a sampled frame sequence directory
|
|
27
|
+
- include frame/time annotation
|
|
28
|
+
- label colors for each bead class
|
|
29
|
+
|
|
30
|
+
If the user asks casually to “just run/open/shoot it,” do the action: generate the artifact and open it locally when possible. Do not only print the command unless they ask for instructions.
|
|
31
|
+
|
|
32
|
+
## Minimal MDAnalysis bead-selection scaffold
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
import MDAnalysis as mda
|
|
36
|
+
import numpy as np
|
|
37
|
+
import matplotlib.pyplot as plt
|
|
38
|
+
from style_presets import rcparams, style_legend
|
|
39
|
+
|
|
40
|
+
rcparams()
|
|
41
|
+
|
|
42
|
+
u = mda.Universe("eq_whole.gro", "traj.xtc")
|
|
43
|
+
|
|
44
|
+
# Common MARTINI CP/SDS labels from the CP-SDS emulsion project.
|
|
45
|
+
cp = u.select_atoms("resname CYP CYPE")
|
|
46
|
+
sds_head = u.select_atoms("resname SDS and name S1")
|
|
47
|
+
sds_tail = u.select_atoms("resname SDS and name C1 C2 C3")
|
|
48
|
+
na = u.select_atoms("resname NA or name NA")
|
|
49
|
+
|
|
50
|
+
u.trajectory[-1]
|
|
51
|
+
fig = plt.figure(figsize=(8, 7))
|
|
52
|
+
ax = fig.add_subplot(111, projection="3d")
|
|
53
|
+
for group, label, color, size in [
|
|
54
|
+
(cp, "CP", "#18a999", 8),
|
|
55
|
+
(sds_tail, "SDS tail", "#b8b8b8", 8),
|
|
56
|
+
(sds_head, "SDS head", "#d62728", 18),
|
|
57
|
+
(na, "Na+", "#8e44ad", 8),
|
|
58
|
+
]:
|
|
59
|
+
if len(group):
|
|
60
|
+
p = group.positions / 10.0 # MDAnalysis positions are Angstrom; plot nm.
|
|
61
|
+
ax.scatter(p[:,0], p[:,1], p[:,2], s=size, c=color, label=label, alpha=0.85, edgecolors="none")
|
|
62
|
+
box = u.trajectory.ts.dimensions[:3] / 10.0
|
|
63
|
+
ax.set_xlim(0, box[0]); ax.set_ylim(0, box[1]); ax.set_zlim(0, box[2])
|
|
64
|
+
ax.set_xlabel("x (nm)"); ax.set_ylabel("y (nm)"); ax.set_zlabel("z (nm)")
|
|
65
|
+
ax.text2D(0.02, 0.96, f"frame {u.trajectory.frame}, t={u.trajectory.time/1000:.2f} ns", transform=ax.transAxes)
|
|
66
|
+
style_legend(ax, outside=True)
|
|
67
|
+
fig.savefig("mda_last.png", dpi=600, bbox_inches="tight", transparent=True)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Practical tool ranking
|
|
71
|
+
|
|
72
|
+
- MDAnalysis: best for analysis-coupled visuals, automated PNGs, sampled frame sequences, and reproducible reports.
|
|
73
|
+
- OVITO: good GUI choice for bead/particle systems, slicing, particle radii, and quick visual exploration.
|
|
74
|
+
- VMD: still useful for MD trajectory handling, but MARTINI needs explicit representation setup because bonds may be absent and water beads dominate.
|
|
75
|
+
|
|
76
|
+
## Verification checklist
|
|
77
|
+
|
|
78
|
+
Before claiming completion:
|
|
79
|
+
|
|
80
|
+
- Run the script with the actual `.gro`/`.xtc` pair.
|
|
81
|
+
- Confirm output files exist and have nontrivial size.
|
|
82
|
+
- Open/check at least one PNG or browser-rendered HTML page.
|
|
83
|
+
- Verify water is hidden unless the user asked for water.
|
|
84
|
+
- Verify CP/SDS/head/tail/counterion colors and legend match the intended selections.
|
|
85
|
+
- If a PNG sequence is produced, count expected frame files and inspect first/last image dimensions.
|