@wentorai/research-plugins 1.0.0 → 1.2.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/README.md +22 -22
- package/curated/analysis/README.md +82 -56
- package/curated/domains/README.md +225 -69
- package/curated/literature/README.md +115 -46
- package/curated/research/README.md +106 -58
- package/curated/tools/README.md +107 -87
- package/curated/writing/README.md +92 -45
- package/mcp-configs/academic-db/alphafold-mcp.json +20 -0
- package/mcp-configs/academic-db/brightspace-mcp.json +21 -0
- package/mcp-configs/academic-db/climatiq-mcp.json +20 -0
- package/mcp-configs/academic-db/gibs-mcp.json +20 -0
- package/mcp-configs/academic-db/gis-mcp-server.json +22 -0
- package/mcp-configs/academic-db/google-earth-engine-mcp.json +21 -0
- package/mcp-configs/academic-db/m4-clinical-mcp.json +21 -0
- package/mcp-configs/academic-db/medical-mcp.json +21 -0
- package/mcp-configs/academic-db/nexonco-mcp.json +20 -0
- package/mcp-configs/academic-db/omop-mcp.json +20 -0
- package/mcp-configs/academic-db/onekgpd-mcp.json +20 -0
- package/mcp-configs/academic-db/openedu-mcp.json +20 -0
- package/mcp-configs/academic-db/opengenes-mcp.json +20 -0
- package/mcp-configs/academic-db/openstax-mcp.json +21 -0
- package/mcp-configs/academic-db/openstreetmap-mcp.json +21 -0
- package/mcp-configs/academic-db/opentargets-mcp.json +21 -0
- package/mcp-configs/academic-db/pdb-mcp.json +21 -0
- package/mcp-configs/academic-db/smithsonian-mcp.json +20 -0
- package/mcp-configs/ai-platform/magi-researchers.json +21 -0
- package/mcp-configs/ai-platform/mcp-academic-researcher.json +22 -0
- package/mcp-configs/ai-platform/open-paper-machine.json +21 -0
- package/mcp-configs/ai-platform/paper-intelligence.json +21 -0
- package/mcp-configs/ai-platform/paper-reader.json +21 -0
- package/mcp-configs/ai-platform/paperdebugger.json +21 -0
- package/mcp-configs/browser/exa-mcp.json +20 -0
- package/mcp-configs/browser/mcp-searxng.json +21 -0
- package/mcp-configs/browser/mcp-webresearch.json +20 -0
- package/mcp-configs/cloud-docs/confluence-mcp.json +37 -0
- package/mcp-configs/cloud-docs/google-drive-mcp.json +35 -0
- package/mcp-configs/cloud-docs/notion-mcp.json +29 -0
- package/mcp-configs/communication/discord-mcp.json +29 -0
- package/mcp-configs/communication/discourse-mcp.json +21 -0
- package/mcp-configs/communication/slack-mcp.json +29 -0
- package/mcp-configs/communication/telegram-mcp.json +28 -0
- package/mcp-configs/data-platform/automl-stat-mcp.json +21 -0
- package/mcp-configs/data-platform/jefferson-stats-mcp.json +22 -0
- package/mcp-configs/data-platform/mcp-excel-server.json +21 -0
- package/mcp-configs/data-platform/mcp-stata.json +21 -0
- package/mcp-configs/data-platform/mcpstack-jupyter.json +21 -0
- package/mcp-configs/data-platform/ml-mcp.json +21 -0
- package/mcp-configs/data-platform/nasdaq-data-link-mcp.json +20 -0
- package/mcp-configs/data-platform/numpy-mcp.json +21 -0
- package/mcp-configs/database/neo4j-mcp.json +37 -0
- package/mcp-configs/database/postgres-mcp.json +28 -0
- package/mcp-configs/database/sqlite-mcp.json +29 -0
- package/mcp-configs/dev-platform/geogebra-mcp.json +21 -0
- package/mcp-configs/dev-platform/github-mcp.json +31 -0
- package/mcp-configs/dev-platform/gitlab-mcp.json +34 -0
- package/mcp-configs/dev-platform/latex-mcp-server.json +21 -0
- package/mcp-configs/dev-platform/manim-mcp.json +20 -0
- package/mcp-configs/dev-platform/mcp-echarts.json +20 -0
- package/mcp-configs/dev-platform/panel-viz-mcp.json +20 -0
- package/mcp-configs/dev-platform/paperbanana.json +20 -0
- package/mcp-configs/dev-platform/texflow-mcp.json +20 -0
- package/mcp-configs/dev-platform/texmcp.json +20 -0
- package/mcp-configs/dev-platform/typst-mcp.json +21 -0
- package/mcp-configs/dev-platform/vizro-mcp.json +20 -0
- package/mcp-configs/email/email-mcp.json +40 -0
- package/mcp-configs/email/gmail-mcp.json +37 -0
- package/mcp-configs/note-knowledge/local-faiss-mcp.json +21 -0
- package/mcp-configs/note-knowledge/mcp-memory-service.json +21 -0
- package/mcp-configs/note-knowledge/mcp-obsidian.json +23 -0
- package/mcp-configs/note-knowledge/mcp-ragdocs.json +20 -0
- package/mcp-configs/note-knowledge/mcp-summarizer.json +21 -0
- package/mcp-configs/note-knowledge/mediawiki-mcp.json +21 -0
- package/mcp-configs/note-knowledge/openzim-mcp.json +20 -0
- package/mcp-configs/note-knowledge/zettelkasten-mcp.json +21 -0
- package/mcp-configs/reference-mgr/academic-paper-mcp-http.json +20 -0
- package/mcp-configs/reference-mgr/academix.json +20 -0
- package/mcp-configs/reference-mgr/arxiv-research-mcp.json +21 -0
- package/mcp-configs/reference-mgr/google-scholar-abstract-mcp.json +19 -0
- package/mcp-configs/reference-mgr/google-scholar-mcp.json +20 -0
- package/mcp-configs/reference-mgr/mcp-paperswithcode.json +21 -0
- package/mcp-configs/reference-mgr/mcp-scholarly.json +20 -0
- package/mcp-configs/reference-mgr/mcp-simple-arxiv.json +20 -0
- package/mcp-configs/reference-mgr/mcp-simple-pubmed.json +20 -0
- package/mcp-configs/reference-mgr/mcp-zotero.json +21 -0
- package/mcp-configs/reference-mgr/mendeley-mcp.json +20 -0
- package/mcp-configs/reference-mgr/ncbi-mcp-server.json +22 -0
- package/mcp-configs/reference-mgr/onecite.json +21 -0
- package/mcp-configs/reference-mgr/paper-search-mcp.json +21 -0
- package/mcp-configs/reference-mgr/pubmed-search-mcp.json +21 -0
- package/mcp-configs/reference-mgr/scholar-mcp.json +21 -0
- package/mcp-configs/reference-mgr/scholar-multi-mcp.json +21 -0
- package/mcp-configs/reference-mgr/seerai.json +21 -0
- package/mcp-configs/reference-mgr/semantic-scholar-fastmcp.json +21 -0
- package/mcp-configs/reference-mgr/sourcelibrary.json +20 -0
- package/mcp-configs/registry.json +178 -149
- package/mcp-configs/repository/dataverse-mcp.json +33 -0
- package/mcp-configs/repository/huggingface-mcp.json +29 -0
- package/openclaw.plugin.json +2 -2
- package/package.json +2 -2
- package/skills/analysis/dataviz/algorithm-visualizer-guide/SKILL.md +259 -0
- package/skills/analysis/dataviz/bokeh-visualization-guide/SKILL.md +270 -0
- package/skills/analysis/dataviz/chart-image-generator/SKILL.md +229 -0
- package/skills/analysis/dataviz/citation-map-guide/SKILL.md +184 -0
- package/skills/analysis/dataviz/d3-visualization-guide/SKILL.md +281 -0
- package/skills/analysis/dataviz/data-visualization-principles/SKILL.md +171 -0
- package/skills/analysis/dataviz/echarts-visualization-guide/SKILL.md +250 -0
- package/skills/analysis/dataviz/metabase-analytics-guide/SKILL.md +242 -0
- package/skills/analysis/dataviz/plotly-interactive-guide/SKILL.md +266 -0
- package/skills/analysis/dataviz/redash-analytics-guide/SKILL.md +284 -0
- package/skills/analysis/econometrics/econml-causal-guide/SKILL.md +163 -0
- package/skills/analysis/econometrics/empirical-paper-analysis/SKILL.md +192 -0
- package/skills/analysis/econometrics/mostly-harmless-guide/SKILL.md +139 -0
- package/skills/analysis/econometrics/panel-data-analyst/SKILL.md +259 -0
- package/skills/analysis/econometrics/panel-data-regression-workflow/SKILL.md +267 -0
- package/skills/analysis/econometrics/python-causality-guide/SKILL.md +134 -0
- package/skills/analysis/econometrics/stata-accounting-guide/SKILL.md +269 -0
- package/skills/analysis/econometrics/stata-analyst-guide/SKILL.md +245 -0
- package/skills/analysis/econometrics/stata-reference-guide/SKILL.md +293 -0
- package/skills/analysis/statistics/data-anomaly-detection/SKILL.md +157 -0
- package/skills/analysis/statistics/general-statistics-guide/SKILL.md +226 -0
- package/skills/analysis/statistics/infiagent-benchmark-guide/SKILL.md +106 -0
- package/skills/analysis/statistics/ml-experiment-tracker/SKILL.md +212 -0
- package/skills/analysis/statistics/pywayne-statistics-guide/SKILL.md +192 -0
- package/skills/analysis/statistics/quantitative-methods-guide/SKILL.md +193 -0
- package/skills/analysis/statistics/senior-data-scientist-guide/SKILL.md +223 -0
- package/skills/analysis/wrangling/claude-data-analysis-guide/SKILL.md +100 -0
- package/skills/analysis/wrangling/csv-data-analyzer/SKILL.md +170 -0
- package/skills/analysis/wrangling/data-cleaning-pipeline/SKILL.md +266 -0
- package/skills/analysis/wrangling/data-cog-guide/SKILL.md +178 -0
- package/skills/analysis/wrangling/open-data-scientist-guide/SKILL.md +197 -0
- package/skills/analysis/wrangling/stata-data-cleaning/SKILL.md +276 -0
- package/skills/analysis/wrangling/streamline-analyst-guide/SKILL.md +119 -0
- package/skills/analysis/wrangling/survey-data-processing/SKILL.md +298 -0
- package/skills/domains/ai-ml/ai-agent-papers-guide/SKILL.md +146 -0
- package/skills/domains/ai-ml/ai-model-benchmarking/SKILL.md +209 -0
- package/skills/domains/ai-ml/annotated-dl-papers-guide/SKILL.md +159 -0
- package/skills/domains/ai-ml/anomaly-detection-papers-guide/SKILL.md +167 -0
- package/skills/domains/ai-ml/autonomous-agents-papers-guide/SKILL.md +178 -0
- package/skills/domains/ai-ml/dl-transformer-finetune/SKILL.md +239 -0
- package/skills/domains/ai-ml/domain-adaptation-papers-guide/SKILL.md +173 -0
- package/skills/domains/ai-ml/generative-ai-guide/SKILL.md +146 -0
- package/skills/domains/ai-ml/graph-learning-papers-guide/SKILL.md +125 -0
- package/skills/domains/ai-ml/huggingface-inference-guide/SKILL.md +196 -0
- package/skills/domains/ai-ml/keras-deep-learning/SKILL.md +210 -0
- package/skills/domains/ai-ml/kolmogorov-arnold-networks-guide/SKILL.md +185 -0
- package/skills/domains/ai-ml/llm-from-scratch-guide/SKILL.md +124 -0
- package/skills/domains/ai-ml/ml-pipeline-guide/SKILL.md +295 -0
- package/skills/domains/ai-ml/nlp-toolkit-guide/SKILL.md +247 -0
- package/skills/domains/ai-ml/npcpy-research-guide/SKILL.md +137 -0
- package/skills/domains/ai-ml/pytorch-guide/SKILL.md +281 -0
- package/skills/domains/ai-ml/pytorch-lightning-guide/SKILL.md +244 -0
- package/skills/domains/ai-ml/responsible-ai-guide/SKILL.md +126 -0
- package/skills/domains/ai-ml/tensorflow-guide/SKILL.md +241 -0
- package/skills/domains/ai-ml/vmas-simulator-guide/SKILL.md +129 -0
- package/skills/domains/biomedical/bioagents-guide/SKILL.md +308 -0
- package/skills/domains/biomedical/clawbio-guide/SKILL.md +167 -0
- package/skills/domains/biomedical/clinical-dialogue-agents-guide/SKILL.md +145 -0
- package/skills/domains/biomedical/ena-sequence-api/SKILL.md +175 -0
- package/skills/domains/biomedical/genomas-guide/SKILL.md +126 -0
- package/skills/domains/biomedical/genotex-benchmark-guide/SKILL.md +125 -0
- package/skills/domains/biomedical/med-researcher-guide/SKILL.md +161 -0
- package/skills/domains/biomedical/med-researcher-r1-guide/SKILL.md +146 -0
- package/skills/domains/biomedical/medgeclaw-guide/SKILL.md +345 -0
- package/skills/domains/biomedical/medical-imaging-guide/SKILL.md +305 -0
- package/skills/domains/biomedical/ncbi-blast-api/SKILL.md +195 -0
- package/skills/domains/biomedical/ncbi-datasets-api/SKILL.md +220 -0
- package/skills/domains/biomedical/quickgo-api/SKILL.md +181 -0
- package/skills/domains/business/architecture-design-guide/SKILL.md +279 -0
- package/skills/domains/business/innovation-management-guide/SKILL.md +257 -0
- package/skills/domains/business/operations-research-guide/SKILL.md +258 -0
- package/skills/domains/business/xpert-bi-guide/SKILL.md +84 -0
- package/skills/domains/chemistry/cactus-cheminformatics-guide/SKILL.md +89 -0
- package/skills/domains/chemistry/chemeagle-guide/SKILL.md +147 -0
- package/skills/domains/chemistry/chemgraph-agent-guide/SKILL.md +120 -0
- package/skills/domains/chemistry/molecular-dynamics-guide/SKILL.md +237 -0
- package/skills/domains/chemistry/pubchem-api-guide/SKILL.md +180 -0
- package/skills/domains/chemistry/spectroscopy-analysis-guide/SKILL.md +290 -0
- package/skills/domains/cs/ai-security-papers-guide/SKILL.md +103 -0
- package/skills/domains/cs/code-llm-papers-guide/SKILL.md +131 -0
- package/skills/domains/cs/distributed-systems-guide/SKILL.md +268 -0
- package/skills/domains/cs/formal-verification-guide/SKILL.md +298 -0
- package/skills/domains/cs/gaussian-splatting-papers-guide/SKILL.md +158 -0
- package/skills/domains/cs/llm-aiops-guide/SKILL.md +70 -0
- package/skills/domains/cs/software-heritage-api/SKILL.md +200 -0
- package/skills/domains/ecology/species-distribution-guide/SKILL.md +343 -0
- package/skills/domains/economics/imf-data-api-guide/SKILL.md +174 -0
- package/skills/domains/economics/nber-working-papers-api/SKILL.md +177 -0
- package/skills/domains/economics/post-labor-economics/SKILL.md +254 -0
- package/skills/domains/economics/pricing-psychology-guide/SKILL.md +273 -0
- package/skills/domains/economics/repec-economics-api/SKILL.md +188 -0
- package/skills/domains/economics/world-bank-data-guide/SKILL.md +179 -0
- package/skills/domains/education/academic-study-methods/SKILL.md +228 -0
- package/skills/domains/education/assessment-design-guide/SKILL.md +213 -0
- package/skills/domains/education/educational-research-methods/SKILL.md +179 -0
- package/skills/domains/education/edumcp-guide/SKILL.md +74 -0
- package/skills/domains/education/mooc-analytics-guide/SKILL.md +206 -0
- package/skills/domains/education/open-syllabus-api/SKILL.md +171 -0
- package/skills/domains/finance/akshare-finance-data/SKILL.md +207 -0
- package/skills/domains/finance/finsight-research-guide/SKILL.md +113 -0
- package/skills/domains/finance/options-analytics-agent-guide/SKILL.md +117 -0
- package/skills/domains/finance/portfolio-optimization-guide/SKILL.md +279 -0
- package/skills/domains/finance/risk-modeling-guide/SKILL.md +260 -0
- package/skills/domains/finance/stata-accounting-research/SKILL.md +372 -0
- package/skills/domains/geoscience/climate-modeling-guide/SKILL.md +215 -0
- package/skills/domains/geoscience/pangaea-data-api/SKILL.md +197 -0
- package/skills/domains/geoscience/satellite-remote-sensing/SKILL.md +193 -0
- package/skills/domains/geoscience/seismology-data-guide/SKILL.md +208 -0
- package/skills/domains/humanities/digital-humanities-methods/SKILL.md +232 -0
- package/skills/domains/humanities/ethical-philosophy-guide/SKILL.md +244 -0
- package/skills/domains/humanities/history-research-guide/SKILL.md +260 -0
- package/skills/domains/humanities/political-history-guide/SKILL.md +241 -0
- package/skills/domains/law/caselaw-access-api/SKILL.md +149 -0
- package/skills/domains/law/legal-agent-skills-guide/SKILL.md +132 -0
- package/skills/domains/law/legal-nlp-guide/SKILL.md +236 -0
- package/skills/domains/law/legal-research-methods/SKILL.md +190 -0
- package/skills/domains/law/opencontracts-guide/SKILL.md +168 -0
- package/skills/domains/law/patent-analysis-guide/SKILL.md +257 -0
- package/skills/domains/law/regulatory-compliance-guide/SKILL.md +267 -0
- package/skills/domains/math/lean-theorem-proving-guide/SKILL.md +140 -0
- package/skills/domains/math/symbolic-computation-guide/SKILL.md +263 -0
- package/skills/domains/math/topology-data-analysis/SKILL.md +305 -0
- package/skills/domains/pharma/clinical-trial-design-guide/SKILL.md +271 -0
- package/skills/domains/pharma/drug-target-interaction/SKILL.md +242 -0
- package/skills/domains/pharma/madd-drug-discovery-guide/SKILL.md +153 -0
- package/skills/domains/pharma/pharmacovigilance-guide/SKILL.md +216 -0
- package/skills/domains/physics/astrophysics-data-guide/SKILL.md +305 -0
- package/skills/domains/physics/particle-physics-guide/SKILL.md +287 -0
- package/skills/domains/social-science/ipums-microdata-api/SKILL.md +211 -0
- package/skills/domains/social-science/network-analysis-guide/SKILL.md +310 -0
- package/skills/domains/social-science/psychology-research-guide/SKILL.md +270 -0
- package/skills/domains/social-science/sociology-research-guide/SKILL.md +238 -0
- package/skills/domains/social-science/sociology-research-methods/SKILL.md +181 -0
- package/skills/literature/discovery/arxiv-paper-monitoring/SKILL.md +233 -0
- package/skills/literature/discovery/paper-recommendation-guide/SKILL.md +120 -0
- package/skills/literature/discovery/papers-we-love-guide/SKILL.md +169 -0
- package/skills/literature/discovery/semantic-paper-radar/SKILL.md +144 -0
- package/skills/literature/discovery/zotero-arxiv-daily-guide/SKILL.md +94 -0
- package/skills/literature/fulltext/bioc-pmc-api/SKILL.md +146 -0
- package/skills/literature/fulltext/core-api-guide/SKILL.md +144 -0
- package/skills/literature/fulltext/dataverse-api/SKILL.md +215 -0
- package/skills/literature/fulltext/hal-archive-api/SKILL.md +218 -0
- package/skills/literature/fulltext/institutional-repository-guide/SKILL.md +212 -0
- package/skills/literature/fulltext/open-access-mining-guide/SKILL.md +341 -0
- package/skills/literature/fulltext/osf-api/SKILL.md +212 -0
- package/skills/literature/fulltext/pmc-ftp-bulk-download/SKILL.md +182 -0
- package/skills/literature/fulltext/zotero-ai-butler-guide/SKILL.md +166 -0
- package/skills/literature/fulltext/zotero-scihub-guide/SKILL.md +168 -0
- package/skills/literature/metadata/academic-paper-summarizer/SKILL.md +101 -0
- package/skills/literature/metadata/bibliometrix-guide/SKILL.md +164 -0
- package/skills/literature/metadata/crossref-event-data-api/SKILL.md +183 -0
- package/skills/literature/metadata/doi-content-negotiation/SKILL.md +202 -0
- package/skills/literature/metadata/orkg-api/SKILL.md +153 -0
- package/skills/literature/metadata/plumx-metrics-api/SKILL.md +188 -0
- package/skills/literature/metadata/ror-organization-api/SKILL.md +208 -0
- package/skills/literature/metadata/sophosia-reference-guide/SKILL.md +110 -0
- package/skills/literature/metadata/viaf-authority-api/SKILL.md +209 -0
- package/skills/literature/metadata/wikidata-api-guide/SKILL.md +156 -0
- package/skills/literature/metadata/zoplicate-dedup-guide/SKILL.md +147 -0
- package/skills/literature/metadata/zotero-actions-tags-guide/SKILL.md +212 -0
- package/skills/literature/metadata/zotmoov-guide/SKILL.md +120 -0
- package/skills/literature/metadata/zutilo-guide/SKILL.md +140 -0
- package/skills/literature/search/arxiv-batch-reporting/SKILL.md +133 -0
- package/skills/literature/search/arxiv-cli-tools/SKILL.md +172 -0
- package/skills/literature/search/arxiv-osiris/SKILL.md +199 -0
- package/skills/literature/search/arxiv-paper-processor/SKILL.md +141 -0
- package/skills/literature/search/baidu-scholar-guide/SKILL.md +110 -0
- package/skills/literature/search/base-academic-search/SKILL.md +196 -0
- package/skills/literature/search/chatpaper-guide/SKILL.md +122 -0
- package/skills/literature/search/citeseerx-api/SKILL.md +183 -0
- package/skills/literature/search/deep-literature-search/SKILL.md +149 -0
- package/skills/literature/search/deepgit-search-guide/SKILL.md +147 -0
- package/skills/literature/search/eric-education-api/SKILL.md +199 -0
- package/skills/literature/search/findpapers-guide/SKILL.md +177 -0
- package/skills/literature/search/ieee-xplore-api/SKILL.md +177 -0
- package/skills/literature/search/lens-scholarly-api/SKILL.md +211 -0
- package/skills/literature/search/multi-database-literature-search/SKILL.md +198 -0
- package/skills/literature/search/open-library-api/SKILL.md +196 -0
- package/skills/literature/search/open-semantic-search-guide/SKILL.md +190 -0
- package/skills/literature/search/openaire-api/SKILL.md +141 -0
- package/skills/literature/search/paper-search-mcp-guide/SKILL.md +107 -0
- package/skills/literature/search/papers-chat-guide/SKILL.md +194 -0
- package/skills/literature/search/pasa-paper-search-guide/SKILL.md +138 -0
- package/skills/literature/search/plos-open-access-api/SKILL.md +203 -0
- package/skills/literature/search/scielo-api/SKILL.md +182 -0
- package/skills/literature/search/share-research-api/SKILL.md +129 -0
- package/skills/literature/search/worldcat-search-api/SKILL.md +224 -0
- package/skills/research/automation/ai-scientist-v2-guide/SKILL.md +284 -0
- package/skills/research/automation/aim-experiment-guide/SKILL.md +234 -0
- package/skills/research/automation/claude-academic-workflow-guide/SKILL.md +202 -0
- package/skills/research/automation/coexist-ai-guide/SKILL.md +149 -0
- package/skills/research/automation/datagen-research-guide/SKILL.md +131 -0
- package/skills/research/automation/foam-agent-guide/SKILL.md +203 -0
- package/skills/research/automation/kedro-pipeline-guide/SKILL.md +216 -0
- package/skills/research/automation/mle-agent-guide/SKILL.md +139 -0
- package/skills/research/automation/paper-to-agent-guide/SKILL.md +116 -0
- package/skills/research/automation/rd-agent-guide/SKILL.md +246 -0
- package/skills/research/automation/research-paper-orchestrator/SKILL.md +254 -0
- package/skills/research/deep-research/academic-deep-research/SKILL.md +190 -0
- package/skills/research/deep-research/auto-deep-research-guide/SKILL.md +141 -0
- package/skills/research/deep-research/cognitive-kernel-guide/SKILL.md +200 -0
- package/skills/research/deep-research/corvus-research-guide/SKILL.md +132 -0
- package/skills/research/deep-research/deep-research-pro/SKILL.md +213 -0
- package/skills/research/deep-research/deep-research-work/SKILL.md +204 -0
- package/skills/research/deep-research/deep-searcher-guide/SKILL.md +253 -0
- package/skills/research/deep-research/gpt-researcher-guide/SKILL.md +191 -0
- package/skills/research/deep-research/in-depth-research-guide/SKILL.md +205 -0
- package/skills/research/deep-research/khoj-research-guide/SKILL.md +200 -0
- package/skills/research/deep-research/kosmos-scientist-guide/SKILL.md +185 -0
- package/skills/research/deep-research/llm-scientific-discovery-guide/SKILL.md +178 -0
- package/skills/research/deep-research/local-deep-research-guide/SKILL.md +253 -0
- package/skills/research/deep-research/open-researcher-guide/SKILL.md +138 -0
- package/skills/research/deep-research/tongyi-deep-research-guide/SKILL.md +217 -0
- package/skills/research/funding/eu-horizon-guide/SKILL.md +244 -0
- package/skills/research/funding/grant-budget-guide/SKILL.md +284 -0
- package/skills/research/funding/nih-reporter-api-guide/SKILL.md +166 -0
- package/skills/research/funding/nsf-award-api-guide/SKILL.md +133 -0
- package/skills/research/methodology/academic-mentor-guide/SKILL.md +169 -0
- package/skills/research/methodology/claude-scientific-guide/SKILL.md +122 -0
- package/skills/research/methodology/deep-innovator-guide/SKILL.md +242 -0
- package/skills/research/methodology/osf-api-guide/SKILL.md +165 -0
- package/skills/research/methodology/parsifal-slr-guide/SKILL.md +154 -0
- package/skills/research/methodology/research-paper-kb/SKILL.md +263 -0
- package/skills/research/methodology/research-pipeline-units-guide/SKILL.md +169 -0
- package/skills/research/methodology/research-town-guide/SKILL.md +263 -0
- package/skills/research/methodology/slr-automation-guide/SKILL.md +235 -0
- package/skills/research/paper-review/automated-review-guide/SKILL.md +281 -0
- package/skills/research/paper-review/latte-review-guide/SKILL.md +175 -0
- package/skills/research/paper-review/paper-compare-guide/SKILL.md +238 -0
- package/skills/research/paper-review/paper-critique-framework/SKILL.md +181 -0
- package/skills/research/paper-review/paper-digest-guide/SKILL.md +240 -0
- package/skills/research/paper-review/paper-research-assistant/SKILL.md +231 -0
- package/skills/research/paper-review/research-quality-filter/SKILL.md +261 -0
- package/skills/research/paper-review/review-response-guide/SKILL.md +275 -0
- package/skills/tools/code-exec/contextplus-mcp-guide/SKILL.md +110 -0
- package/skills/tools/code-exec/google-colab-guide/SKILL.md +276 -0
- package/skills/tools/code-exec/kaggle-api-guide/SKILL.md +216 -0
- package/skills/tools/code-exec/overleaf-cli-guide/SKILL.md +279 -0
- package/skills/tools/diagram/clawphd-guide/SKILL.md +149 -0
- package/skills/tools/diagram/code-flow-visualizer/SKILL.md +197 -0
- package/skills/tools/diagram/excalidraw-diagram-guide/SKILL.md +170 -0
- package/skills/tools/diagram/json-data-visualizer/SKILL.md +270 -0
- package/skills/tools/diagram/kroki-diagram-api/SKILL.md +198 -0
- package/skills/tools/diagram/mermaid-architect-guide/SKILL.md +219 -0
- package/skills/tools/diagram/scientific-graphical-abstract/SKILL.md +201 -0
- package/skills/tools/diagram/tldraw-whiteboard-guide/SKILL.md +397 -0
- package/skills/tools/document/docsgpt-guide/SKILL.md +130 -0
- package/skills/tools/document/large-document-reader/SKILL.md +202 -0
- package/skills/tools/document/md2pdf-xelatex/SKILL.md +212 -0
- package/skills/tools/document/openpaper-guide/SKILL.md +232 -0
- package/skills/tools/document/paper-parse-guide/SKILL.md +243 -0
- package/skills/tools/document/weknora-guide/SKILL.md +216 -0
- package/skills/tools/document/zotero-addon-market-guide/SKILL.md +108 -0
- package/skills/tools/document/zotero-night-theme-guide/SKILL.md +142 -0
- package/skills/tools/document/zotero-style-guide/SKILL.md +217 -0
- package/skills/tools/knowledge-graph/citation-network-builder/SKILL.md +244 -0
- package/skills/tools/knowledge-graph/concept-map-generator/SKILL.md +284 -0
- package/skills/tools/knowledge-graph/graphiti-guide/SKILL.md +219 -0
- package/skills/tools/knowledge-graph/mimir-memory-guide/SKILL.md +135 -0
- package/skills/tools/knowledge-graph/notero-zotero-notion-guide/SKILL.md +187 -0
- package/skills/tools/knowledge-graph/open-webui-tools-guide/SKILL.md +156 -0
- package/skills/tools/knowledge-graph/openspg-guide/SKILL.md +210 -0
- package/skills/tools/knowledge-graph/paperpile-notion-guide/SKILL.md +84 -0
- package/skills/tools/knowledge-graph/zotero-markdb-connect-guide/SKILL.md +162 -0
- package/skills/tools/ocr-translate/latex-translation-guide/SKILL.md +176 -0
- package/skills/tools/ocr-translate/math-equation-renderer/SKILL.md +198 -0
- package/skills/tools/ocr-translate/pdf-math-translate-guide/SKILL.md +141 -0
- package/skills/tools/ocr-translate/zotero-pdf-translate-guide/SKILL.md +95 -0
- package/skills/tools/ocr-translate/zotero-pdf2zh-guide/SKILL.md +143 -0
- package/skills/tools/scraping/dataset-finder-guide/SKILL.md +253 -0
- package/skills/tools/scraping/easy-spider-guide/SKILL.md +250 -0
- package/skills/tools/scraping/google-scholar-scraper/SKILL.md +255 -0
- package/skills/tools/scraping/repository-harvesting-guide/SKILL.md +310 -0
- package/skills/writing/citation/academic-citation-manager/SKILL.md +314 -0
- package/skills/writing/citation/academic-citation-manager-guide/SKILL.md +182 -0
- package/skills/writing/citation/citation-assistant-skill/SKILL.md +192 -0
- package/skills/writing/citation/jabref-reference-guide/SKILL.md +127 -0
- package/skills/writing/citation/jasminum-zotero-guide/SKILL.md +103 -0
- package/skills/writing/citation/mendeley-api/SKILL.md +231 -0
- package/skills/writing/citation/obsidian-citation-guide/SKILL.md +164 -0
- package/skills/writing/citation/obsidian-zotero-guide/SKILL.md +137 -0
- package/skills/writing/citation/onecite-reference-guide/SKILL.md +168 -0
- package/skills/writing/citation/papersgpt-zotero-guide/SKILL.md +132 -0
- package/skills/writing/citation/papis-cli-guide/SKILL.md +213 -0
- package/skills/writing/citation/zotero-better-bibtex-guide/SKILL.md +107 -0
- package/skills/writing/citation/zotero-better-notes-guide/SKILL.md +121 -0
- package/skills/writing/citation/zotero-gpt-guide/SKILL.md +111 -0
- package/skills/writing/citation/zotero-mcp-guide/SKILL.md +164 -0
- package/skills/writing/citation/zotero-mdnotes-guide/SKILL.md +162 -0
- package/skills/writing/citation/zotero-reference-guide/SKILL.md +139 -0
- package/skills/writing/citation/zotero-scholar-guide/SKILL.md +294 -0
- package/skills/writing/citation/zotfile-attachment-guide/SKILL.md +140 -0
- package/skills/writing/composition/ml-paper-writing/SKILL.md +163 -0
- package/skills/writing/composition/opendraft-thesis-guide/SKILL.md +200 -0
- package/skills/writing/composition/paper-debugger-guide/SKILL.md +143 -0
- package/skills/writing/composition/paperforge-guide/SKILL.md +205 -0
- package/skills/writing/composition/research-paper-writer/SKILL.md +226 -0
- package/skills/writing/composition/scientific-writing-resources/SKILL.md +151 -0
- package/skills/writing/composition/scientific-writing-wrapper/SKILL.md +153 -0
- package/skills/writing/latex/academic-writing-latex/SKILL.md +285 -0
- package/skills/writing/latex/latex-drawing-collection/SKILL.md +154 -0
- package/skills/writing/latex/latex-templates-collection/SKILL.md +159 -0
- package/skills/writing/latex/md-to-pdf-academic/SKILL.md +230 -0
- package/skills/writing/latex/tex-render-guide/SKILL.md +243 -0
- package/skills/writing/polish/academic-tone-guide/SKILL.md +209 -0
- package/skills/writing/polish/chinese-text-humanizer/SKILL.md +140 -0
- package/skills/writing/polish/conciseness-editing-guide/SKILL.md +225 -0
- package/skills/writing/polish/paper-polish-guide/SKILL.md +160 -0
- package/skills/writing/templates/arxiv-preprint-template/SKILL.md +184 -0
- package/skills/writing/templates/elegant-paper-template/SKILL.md +141 -0
- package/skills/writing/templates/graphical-abstract-guide/SKILL.md +183 -0
- package/skills/writing/templates/novathesis-guide/SKILL.md +152 -0
- package/skills/writing/templates/scientific-article-pdf/SKILL.md +261 -0
- package/skills/writing/templates/sjtuthesis-guide/SKILL.md +197 -0
- package/skills/writing/templates/thuthesis-guide/SKILL.md +181 -0
- package/skills/literature/fulltext/repository-harvesting-guide/SKILL.md +0 -207
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: chart-image-generator
|
|
3
|
+
description: "Generate publication-quality chart images from research data"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "📉"
|
|
7
|
+
category: "analysis"
|
|
8
|
+
subcategory: "dataviz"
|
|
9
|
+
keywords: ["chart generation", "data visualization", "matplotlib", "publication figures", "scientific plots", "graph export"]
|
|
10
|
+
source: "https://github.com/AcademicSkills/chart-image-generator"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Chart Image Generator
|
|
14
|
+
|
|
15
|
+
A skill for generating publication-quality chart images from research data using Python visualization libraries. Covers chart type selection, styling for academic journals, multi-panel layouts, color accessibility, and export at the correct resolution and format for submission.
|
|
16
|
+
|
|
17
|
+
## Overview
|
|
18
|
+
|
|
19
|
+
Creating figures for academic publications requires more than just plotting data. Journals have specific requirements for resolution (typically 300-600 DPI), file format (TIFF, EPS, PDF, or high-resolution PNG), font sizes (often 8-12pt in the final printed figure), line weights, and color accessibility. This skill automates the production of figures that meet these standards, reducing the time researchers spend on manual formatting and ensuring consistency across all figures in a manuscript.
|
|
20
|
+
|
|
21
|
+
The skill supports common chart types used in academic research: scatter plots, bar charts, line plots, box plots, violin plots, heatmaps, forest plots, Kaplan-Meier curves, and multi-panel composite figures. All examples use matplotlib and seaborn with a custom academic styling configuration.
|
|
22
|
+
|
|
23
|
+
## Academic Figure Styling
|
|
24
|
+
|
|
25
|
+
### Journal-Ready Style Configuration
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
import matplotlib.pyplot as plt
|
|
29
|
+
import matplotlib as mpl
|
|
30
|
+
|
|
31
|
+
def set_academic_style():
|
|
32
|
+
"""
|
|
33
|
+
Configure matplotlib for publication-quality figures.
|
|
34
|
+
Matches common requirements for Nature, Science, PLOS, IEEE journals.
|
|
35
|
+
"""
|
|
36
|
+
plt.rcParams.update({
|
|
37
|
+
# Font settings
|
|
38
|
+
'font.family': 'sans-serif',
|
|
39
|
+
'font.sans-serif': ['Arial', 'Helvetica', 'DejaVu Sans'],
|
|
40
|
+
'font.size': 8,
|
|
41
|
+
'axes.titlesize': 9,
|
|
42
|
+
'axes.labelsize': 8,
|
|
43
|
+
'xtick.labelsize': 7,
|
|
44
|
+
'ytick.labelsize': 7,
|
|
45
|
+
'legend.fontsize': 7,
|
|
46
|
+
|
|
47
|
+
# Line and marker settings
|
|
48
|
+
'lines.linewidth': 1.0,
|
|
49
|
+
'lines.markersize': 4,
|
|
50
|
+
'axes.linewidth': 0.5,
|
|
51
|
+
'xtick.major.width': 0.5,
|
|
52
|
+
'ytick.major.width': 0.5,
|
|
53
|
+
|
|
54
|
+
# Grid and background
|
|
55
|
+
'axes.grid': False,
|
|
56
|
+
'axes.facecolor': 'white',
|
|
57
|
+
'figure.facecolor': 'white',
|
|
58
|
+
|
|
59
|
+
# Legend
|
|
60
|
+
'legend.frameon': False,
|
|
61
|
+
'legend.borderpad': 0.3,
|
|
62
|
+
|
|
63
|
+
# Save settings
|
|
64
|
+
'savefig.dpi': 300,
|
|
65
|
+
'savefig.bbox': 'tight',
|
|
66
|
+
'savefig.pad_inches': 0.05,
|
|
67
|
+
|
|
68
|
+
# Use Type 1 fonts for EPS/PDF (required by many journals)
|
|
69
|
+
'pdf.fonttype': 42,
|
|
70
|
+
'ps.fonttype': 42,
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
# Common journal figure widths (in inches):
|
|
74
|
+
SINGLE_COLUMN = 3.5 # ~89mm (Nature, Science, PLOS)
|
|
75
|
+
DOUBLE_COLUMN = 7.0 # ~178mm
|
|
76
|
+
ONE_AND_HALF = 5.5 # ~140mm
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Accessible Color Palettes
|
|
80
|
+
|
|
81
|
+
```python
|
|
82
|
+
# Colorblind-safe palettes for academic figures
|
|
83
|
+
PALETTES = {
|
|
84
|
+
'categorical_8': [
|
|
85
|
+
'#332288', '#88CCEE', '#44AA99', '#117733',
|
|
86
|
+
'#999933', '#DDCC77', '#CC6677', '#882255'
|
|
87
|
+
], # Tol's qualitative palette
|
|
88
|
+
|
|
89
|
+
'sequential': 'viridis', # Perceptually uniform
|
|
90
|
+
|
|
91
|
+
'diverging': 'RdBu_r', # Red-Blue diverging
|
|
92
|
+
|
|
93
|
+
'binary': ['#0072B2', '#D55E00'], # Blue and vermilion
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Chart Type Selection Guide
|
|
98
|
+
|
|
99
|
+
| Data Pattern | Recommended Chart | When to Use |
|
|
100
|
+
|-------------|------------------|-------------|
|
|
101
|
+
| Distribution of one variable | Histogram, KDE, violin | Showing data spread |
|
|
102
|
+
| Comparing groups | Box plot, violin, bar + error bars | Group differences |
|
|
103
|
+
| Two continuous variables | Scatter plot | Correlation, regression |
|
|
104
|
+
| Trends over time | Line plot | Time series, longitudinal |
|
|
105
|
+
| Proportions | Stacked bar, pie (sparingly) | Composition |
|
|
106
|
+
| Correlation matrix | Heatmap | Many variable pairs |
|
|
107
|
+
| Effect sizes + CIs | Forest plot | Meta-analysis, multi-model |
|
|
108
|
+
| Survival data | Kaplan-Meier curve | Time-to-event |
|
|
109
|
+
|
|
110
|
+
## Generating Common Academic Charts
|
|
111
|
+
|
|
112
|
+
### Scatter Plot with Regression Line
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
import numpy as np
|
|
116
|
+
import seaborn as sns
|
|
117
|
+
|
|
118
|
+
def scatter_with_regression(x, y, xlabel, ylabel, title, output_path,
|
|
119
|
+
groups=None, group_label=None):
|
|
120
|
+
"""
|
|
121
|
+
Create a scatter plot with regression line and confidence interval.
|
|
122
|
+
"""
|
|
123
|
+
set_academic_style()
|
|
124
|
+
fig, ax = plt.subplots(figsize=(SINGLE_COLUMN, SINGLE_COLUMN * 0.8))
|
|
125
|
+
|
|
126
|
+
if groups is not None:
|
|
127
|
+
for group_val in sorted(set(groups)):
|
|
128
|
+
mask = groups == group_val
|
|
129
|
+
ax.scatter(x[mask], y[mask], s=15, alpha=0.7, label=group_val)
|
|
130
|
+
ax.legend(title=group_label)
|
|
131
|
+
else:
|
|
132
|
+
ax.scatter(x, y, s=15, alpha=0.7, color=PALETTES['binary'][0])
|
|
133
|
+
|
|
134
|
+
# Add regression line
|
|
135
|
+
from scipy import stats
|
|
136
|
+
slope, intercept, r, p, se = stats.linregress(x, y)
|
|
137
|
+
x_line = np.linspace(x.min(), x.max(), 100)
|
|
138
|
+
ax.plot(x_line, slope * x_line + intercept, color='#CC6677',
|
|
139
|
+
linewidth=1.0, linestyle='--')
|
|
140
|
+
|
|
141
|
+
# Annotate with statistics
|
|
142
|
+
ax.text(0.05, 0.95, f'r = {r:.3f}\np = {p:.3f}',
|
|
143
|
+
transform=ax.transAxes, verticalalignment='top', fontsize=7)
|
|
144
|
+
|
|
145
|
+
ax.set_xlabel(xlabel)
|
|
146
|
+
ax.set_ylabel(ylabel)
|
|
147
|
+
ax.set_title(title)
|
|
148
|
+
|
|
149
|
+
fig.savefig(output_path, dpi=300, bbox_inches='tight')
|
|
150
|
+
plt.close(fig)
|
|
151
|
+
return output_path
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Multi-Panel Composite Figure
|
|
155
|
+
|
|
156
|
+
```python
|
|
157
|
+
def create_multipanel_figure(panels: list, ncols: int = 2,
|
|
158
|
+
output_path: str = 'figure.pdf'):
|
|
159
|
+
"""
|
|
160
|
+
Create a multi-panel figure with automatic panel labels (A, B, C, ...).
|
|
161
|
+
|
|
162
|
+
Args:
|
|
163
|
+
panels: List of dicts with 'plot_func', 'args', 'title'
|
|
164
|
+
ncols: Number of columns
|
|
165
|
+
output_path: Output file path
|
|
166
|
+
"""
|
|
167
|
+
set_academic_style()
|
|
168
|
+
nrows = int(np.ceil(len(panels) / ncols))
|
|
169
|
+
fig, axes = plt.subplots(nrows, ncols,
|
|
170
|
+
figsize=(DOUBLE_COLUMN, 3.0 * nrows))
|
|
171
|
+
axes = axes.flatten() if hasattr(axes, 'flatten') else [axes]
|
|
172
|
+
|
|
173
|
+
for i, (ax, panel) in enumerate(zip(axes, panels)):
|
|
174
|
+
panel['plot_func'](ax, **panel.get('args', {}))
|
|
175
|
+
# Add panel label (A, B, C, ...)
|
|
176
|
+
ax.text(-0.15, 1.08, chr(65 + i), transform=ax.transAxes,
|
|
177
|
+
fontsize=11, fontweight='bold', va='top')
|
|
178
|
+
if 'title' in panel:
|
|
179
|
+
ax.set_title(panel['title'])
|
|
180
|
+
|
|
181
|
+
# Hide unused panels
|
|
182
|
+
for ax in axes[len(panels):]:
|
|
183
|
+
ax.set_visible(False)
|
|
184
|
+
|
|
185
|
+
fig.tight_layout()
|
|
186
|
+
fig.savefig(output_path, dpi=300, bbox_inches='tight')
|
|
187
|
+
plt.close(fig)
|
|
188
|
+
return output_path
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Export Specifications by Journal
|
|
192
|
+
|
|
193
|
+
| Journal / Publisher | Format | DPI | Max Width | Color Mode |
|
|
194
|
+
|--------------------|--------|-----|-----------|------------|
|
|
195
|
+
| Nature | TIFF, EPS, PDF | 300 | 180mm | RGB |
|
|
196
|
+
| Science | EPS, PDF | 300 | 174mm | RGB |
|
|
197
|
+
| PLOS | TIFF, EPS | 300 | 174mm | RGB |
|
|
198
|
+
| IEEE | EPS, PDF, PNG | 300 | 3.5in (1-col) | RGB or CMYK |
|
|
199
|
+
| Elsevier | TIFF, EPS, PDF | 300-600 | 190mm | RGB or CMYK |
|
|
200
|
+
| Springer | TIFF, EPS, PDF | 300 | 174mm | RGB or CMYK |
|
|
201
|
+
|
|
202
|
+
### Export Function
|
|
203
|
+
|
|
204
|
+
```python
|
|
205
|
+
def export_figure(fig, basename: str, formats=('pdf', 'png', 'tiff'), dpi=300):
|
|
206
|
+
"""Export a figure in multiple formats for journal submission."""
|
|
207
|
+
paths = []
|
|
208
|
+
for fmt in formats:
|
|
209
|
+
path = f"{basename}.{fmt}"
|
|
210
|
+
fig.savefig(path, format=fmt, dpi=dpi, bbox_inches='tight',
|
|
211
|
+
facecolor='white', edgecolor='none')
|
|
212
|
+
paths.append(path)
|
|
213
|
+
return paths
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## Best Practices
|
|
217
|
+
|
|
218
|
+
- Always use vector formats (PDF, EPS) for line art and plots; raster (TIFF, PNG) only when required.
|
|
219
|
+
- Set figure dimensions to the exact column width of your target journal.
|
|
220
|
+
- Use the same font and size across all figures in a manuscript for consistency.
|
|
221
|
+
- Test figures in grayscale to ensure they remain readable without color.
|
|
222
|
+
- Include all figure generation code in your supplementary materials for reproducibility.
|
|
223
|
+
- Label axes with units (e.g., "Temperature (K)") and avoid abbreviations unless defined.
|
|
224
|
+
|
|
225
|
+
## References
|
|
226
|
+
|
|
227
|
+
- Rougier, N. P., Droettboom, M., & Borne, P. E. (2014). Ten Simple Rules for Better Figures. *PLoS Computational Biology*, 10(9).
|
|
228
|
+
- Tufte, E. R. (2001). *The Visual Display of Quantitative Information* (2nd ed.). Graphics Press.
|
|
229
|
+
- Wong, B. (2011). Color Blindness. *Nature Methods*, 8(6), 441.
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: citation-map-guide
|
|
3
|
+
description: "Generate citation world maps from Google Scholar profiles"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "🗺️"
|
|
7
|
+
category: "analysis"
|
|
8
|
+
subcategory: "dataviz"
|
|
9
|
+
keywords: ["citation map", "Google Scholar", "geospatial", "academic impact", "visualization", "world map"]
|
|
10
|
+
source: "https://github.com/ChenLiu-1996/CitationMap"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Citation Map Guide
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
CitationMap generates geographical world maps showing where your citations come from, based on Google Scholar data. It geocodes citing authors' affiliations and plots them on an interactive map, revealing the global reach and geographical distribution of your research impact. Useful for CV enhancement, grant applications, and understanding your research's international footprint.
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
pip install citationmap
|
|
23
|
+
|
|
24
|
+
# Or from source
|
|
25
|
+
git clone https://github.com/ChenLiu-1996/CitationMap.git
|
|
26
|
+
cd CitationMap
|
|
27
|
+
pip install -e .
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
```python
|
|
33
|
+
from citationmap import CitationMap
|
|
34
|
+
|
|
35
|
+
# Generate map from Google Scholar ID
|
|
36
|
+
cmap = CitationMap(scholar_id="YOUR_SCHOLAR_ID")
|
|
37
|
+
|
|
38
|
+
# Fetch citation data
|
|
39
|
+
cmap.fetch_citations()
|
|
40
|
+
|
|
41
|
+
print(f"Total citations: {cmap.total_citations}")
|
|
42
|
+
print(f"Unique citing authors: {cmap.unique_authors}")
|
|
43
|
+
print(f"Countries represented: {cmap.unique_countries}")
|
|
44
|
+
|
|
45
|
+
# Generate interactive map
|
|
46
|
+
cmap.plot_map(
|
|
47
|
+
output="citation_map.html",
|
|
48
|
+
style="heatmap", # heatmap, markers, clusters
|
|
49
|
+
color_by="count", # count, year, paper
|
|
50
|
+
)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Map Styles
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
# Marker map — individual pins per institution
|
|
57
|
+
cmap.plot_map(
|
|
58
|
+
output="markers.html",
|
|
59
|
+
style="markers",
|
|
60
|
+
show_labels=True,
|
|
61
|
+
popup_info=["author", "paper", "year"],
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
# Heatmap — density visualization
|
|
65
|
+
cmap.plot_map(
|
|
66
|
+
output="heatmap.html",
|
|
67
|
+
style="heatmap",
|
|
68
|
+
radius=30,
|
|
69
|
+
blur=20,
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
# Cluster map — grouped by proximity
|
|
73
|
+
cmap.plot_map(
|
|
74
|
+
output="clusters.html",
|
|
75
|
+
style="clusters",
|
|
76
|
+
max_cluster_radius=50,
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
# Static image (for publications/CVs)
|
|
80
|
+
cmap.plot_static(
|
|
81
|
+
output="citation_map.png",
|
|
82
|
+
dpi=300,
|
|
83
|
+
projection="robinson",
|
|
84
|
+
figsize=(14, 8),
|
|
85
|
+
)
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Analysis Features
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
# Geographic distribution stats
|
|
92
|
+
stats = cmap.get_stats()
|
|
93
|
+
|
|
94
|
+
print("\nTop countries:")
|
|
95
|
+
for country, count in stats.top_countries[:10]:
|
|
96
|
+
print(f" {country}: {count} citations")
|
|
97
|
+
|
|
98
|
+
print("\nTop institutions:")
|
|
99
|
+
for inst, count in stats.top_institutions[:10]:
|
|
100
|
+
print(f" {inst}: {count} citations")
|
|
101
|
+
|
|
102
|
+
print("\nContinental distribution:")
|
|
103
|
+
for continent, pct in stats.continental_distribution.items():
|
|
104
|
+
print(f" {continent}: {pct:.1f}%")
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Time Evolution
|
|
108
|
+
|
|
109
|
+
```python
|
|
110
|
+
# Animate citation spread over time
|
|
111
|
+
cmap.plot_animated(
|
|
112
|
+
output="citation_evolution.html",
|
|
113
|
+
time_field="year",
|
|
114
|
+
interval=1000, # ms per year
|
|
115
|
+
cumulative=True,
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
# Year-by-year breakdown
|
|
119
|
+
for year in range(2020, 2026):
|
|
120
|
+
year_stats = cmap.filter_by_year(year)
|
|
121
|
+
print(f"{year}: {year_stats.count} citations, "
|
|
122
|
+
f"{year_stats.countries} countries")
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Paper-Specific Maps
|
|
126
|
+
|
|
127
|
+
```python
|
|
128
|
+
# Map for a specific paper
|
|
129
|
+
cmap.plot_map(
|
|
130
|
+
paper_title="Your Specific Paper Title",
|
|
131
|
+
output="paper_citations.html",
|
|
132
|
+
style="markers",
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
# Compare papers
|
|
136
|
+
papers = cmap.get_papers()
|
|
137
|
+
for paper in papers[:5]:
|
|
138
|
+
print(f"\n{paper.title} ({paper.year})")
|
|
139
|
+
print(f" Citations: {paper.citation_count}")
|
|
140
|
+
print(f" Countries: {paper.country_count}")
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Export
|
|
144
|
+
|
|
145
|
+
```python
|
|
146
|
+
# Export citation data
|
|
147
|
+
cmap.export_csv("citations.csv")
|
|
148
|
+
# Columns: citing_author, affiliation, country, lat, lon,
|
|
149
|
+
# citing_paper, cited_paper, year
|
|
150
|
+
|
|
151
|
+
# Export for GIS software
|
|
152
|
+
cmap.export_geojson("citations.geojson")
|
|
153
|
+
|
|
154
|
+
# Export summary statistics
|
|
155
|
+
cmap.export_report("citation_report.md")
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Configuration
|
|
159
|
+
|
|
160
|
+
```python
|
|
161
|
+
cmap = CitationMap(
|
|
162
|
+
scholar_id="YOUR_ID",
|
|
163
|
+
config={
|
|
164
|
+
"geocoding_service": "nominatim", # or "google"
|
|
165
|
+
"cache_dir": ".citationmap_cache",
|
|
166
|
+
"rate_limit": 1.0, # seconds between API calls
|
|
167
|
+
"affiliation_parsing": "heuristic", # or "llm"
|
|
168
|
+
},
|
|
169
|
+
)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Use Cases
|
|
173
|
+
|
|
174
|
+
1. **CV enhancement**: Show global research impact visually
|
|
175
|
+
2. **Grant applications**: Demonstrate international reach
|
|
176
|
+
3. **Department reports**: Aggregate maps for research groups
|
|
177
|
+
4. **Collaboration discovery**: Find active citing institutions
|
|
178
|
+
5. **Impact assessment**: Geographic diversity of citations
|
|
179
|
+
|
|
180
|
+
## References
|
|
181
|
+
|
|
182
|
+
- [CitationMap GitHub](https://github.com/ChenLiu-1996/CitationMap)
|
|
183
|
+
- [Google Scholar](https://scholar.google.com/)
|
|
184
|
+
- [Folium](https://python-visualization.github.io/folium/) — Map rendering
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: d3-visualization-guide
|
|
3
|
+
description: "Guide to D3.js for building custom interactive data visualizations"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "📊"
|
|
7
|
+
category: "analysis"
|
|
8
|
+
subcategory: "dataviz"
|
|
9
|
+
keywords: ["data visualization", "D3.js", "interactive charts", "SVG", "web visualization", "scientific plots"]
|
|
10
|
+
source: "https://github.com/d3/d3"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# D3.js Visualization Guide
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
D3.js (Data-Driven Documents) is the most powerful and flexible JavaScript library for producing dynamic, interactive data visualizations in web browsers. With over 112K stars on GitHub, D3 has become the de facto standard for custom data visualization on the web. It uses HTML, SVG, and CSS to bring data to life, giving researchers full control over the final visual output.
|
|
18
|
+
|
|
19
|
+
Unlike higher-level charting libraries, D3 operates at the level of individual SVG elements and data bindings, which means researchers can create entirely bespoke visualizations tailored to their specific datasets and publication requirements. This makes it particularly valuable for academic work where standard chart types may not adequately represent complex research findings.
|
|
20
|
+
|
|
21
|
+
D3 provides a comprehensive ecosystem of modules covering everything from scales and axes to geographic projections, force-directed layouts, and hierarchical data structures. The library follows a functional, composable design that allows researchers to combine modules as needed for their specific visualization tasks.
|
|
22
|
+
|
|
23
|
+
## Core Concepts for Research Visualizations
|
|
24
|
+
|
|
25
|
+
D3 revolves around the concept of binding data to DOM elements and applying data-driven transformations. The key patterns every researcher should understand are selections, data joins, scales, and axes.
|
|
26
|
+
|
|
27
|
+
### Data Binding and Selections
|
|
28
|
+
|
|
29
|
+
```javascript
|
|
30
|
+
// Load research data from CSV
|
|
31
|
+
const data = await d3.csv("experiment_results.csv", d => ({
|
|
32
|
+
condition: d.condition,
|
|
33
|
+
measurement: +d.measurement,
|
|
34
|
+
error: +d.standard_error
|
|
35
|
+
}));
|
|
36
|
+
|
|
37
|
+
// Create an SVG container
|
|
38
|
+
const svg = d3.select("#chart")
|
|
39
|
+
.append("svg")
|
|
40
|
+
.attr("width", 800)
|
|
41
|
+
.attr("height", 500);
|
|
42
|
+
|
|
43
|
+
// Binddata to elements using the enter-update-exit pattern
|
|
44
|
+
svg.selectAll("circle")
|
|
45
|
+
.data(data)
|
|
46
|
+
.join("circle")
|
|
47
|
+
.attr("cx", d => xScale(d.condition))
|
|
48
|
+
.attr("cy", d => yScale(d.measurement))
|
|
49
|
+
.attr("r", 5)
|
|
50
|
+
.attr("fill", "#3B82F6");
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Scales and Axes
|
|
54
|
+
|
|
55
|
+
```javascript
|
|
56
|
+
// Linear scale for continuous measurements
|
|
57
|
+
const yScale = d3.scaleLinear()
|
|
58
|
+
.domain([0, d3.max(data, d => d.measurement)])
|
|
59
|
+
.range([height - margin.bottom, margin.top]);
|
|
60
|
+
|
|
61
|
+
// Band scale for categorical conditions
|
|
62
|
+
const xScale = d3.scaleBand()
|
|
63
|
+
.domain(data.map(d => d.condition))
|
|
64
|
+
.range([margin.left, width - margin.right])
|
|
65
|
+
.padding(0.3);
|
|
66
|
+
|
|
67
|
+
// Add axes with proper formatting
|
|
68
|
+
svg.append("g")
|
|
69
|
+
.attr("transform", `translate(0,${height - margin.bottom})`)
|
|
70
|
+
.call(d3.axisBottom(xScale));
|
|
71
|
+
|
|
72
|
+
svg.append("g")
|
|
73
|
+
.attr("transform", `translate(${margin.left},0)`)
|
|
74
|
+
.call(d3.axisLeft(yScale).tickFormat(d3.format(".2f")));
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Publication-Quality Scientific Charts
|
|
78
|
+
|
|
79
|
+
### Error Bar Plot for Experimental Results
|
|
80
|
+
|
|
81
|
+
```javascript
|
|
82
|
+
function createErrorBarPlot(data, container) {
|
|
83
|
+
const margin = { top: 40, right: 30, bottom: 60, left: 70 };
|
|
84
|
+
const width = 700 - margin.left - margin.right;
|
|
85
|
+
const height = 450 - margin.top - margin.bottom;
|
|
86
|
+
|
|
87
|
+
const svg = d3.select(container)
|
|
88
|
+
.append("svg")
|
|
89
|
+
.attr("width", width + margin.left + margin.right)
|
|
90
|
+
.attr("height", height + margin.top + margin.bottom)
|
|
91
|
+
.append("g")
|
|
92
|
+
.attr("transform", `translate(${margin.left},${margin.top})`);
|
|
93
|
+
|
|
94
|
+
const x = d3.scaleBand()
|
|
95
|
+
.domain(data.map(d => d.group))
|
|
96
|
+
.range([0, width])
|
|
97
|
+
.padding(0.4);
|
|
98
|
+
|
|
99
|
+
const y = d3.scaleLinear()
|
|
100
|
+
.domain([0, d3.max(data, d => d.mean + d.sem) * 1.15])
|
|
101
|
+
.range([height, 0]);
|
|
102
|
+
|
|
103
|
+
// Draw bars
|
|
104
|
+
svg.selectAll(".bar")
|
|
105
|
+
.data(data)
|
|
106
|
+
.join("rect")
|
|
107
|
+
.attr("class", "bar")
|
|
108
|
+
.attr("x", d => x(d.group))
|
|
109
|
+
.attr("y", d => y(d.mean))
|
|
110
|
+
.attr("width", x.bandwidth())
|
|
111
|
+
.attr("height", d => height - y(d.mean))
|
|
112
|
+
.attr("fill", (d, i) => d3.schemeTableau10[i]);
|
|
113
|
+
|
|
114
|
+
// Draw error bars
|
|
115
|
+
svg.selectAll(".error-line")
|
|
116
|
+
.data(data)
|
|
117
|
+
.join("line")
|
|
118
|
+
.attr("x1", d => x(d.group) + x.bandwidth() / 2)
|
|
119
|
+
.attr("x2", d => x(d.group) + x.bandwidth() / 2)
|
|
120
|
+
.attr("y1", d => y(d.mean - d.sem))
|
|
121
|
+
.attr("y2", d => y(d.mean + d.sem))
|
|
122
|
+
.attr("stroke", "#333")
|
|
123
|
+
.attr("stroke-width", 1.5);
|
|
124
|
+
|
|
125
|
+
// Error bar caps
|
|
126
|
+
const capWidth = 10;
|
|
127
|
+
["top", "bottom"].forEach(pos => {
|
|
128
|
+
svg.selectAll(`.cap-${pos}`)
|
|
129
|
+
.data(data)
|
|
130
|
+
.join("line")
|
|
131
|
+
.attr("x1", d => x(d.group) + x.bandwidth() / 2 - capWidth)
|
|
132
|
+
.attr("x2", d => x(d.group) + x.bandwidth() / 2 + capWidth)
|
|
133
|
+
.attr("y1", d => y(d.mean + (pos === "top" ? d.sem : -d.sem)))
|
|
134
|
+
.attr("y2", d => y(d.mean + (pos === "top" ? d.sem : -d.sem)))
|
|
135
|
+
.attr("stroke", "#333")
|
|
136
|
+
.attr("stroke-width", 1.5);
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
// Axes
|
|
140
|
+
svg.append("g")
|
|
141
|
+
.attr("transform", `translate(0,${height})`)
|
|
142
|
+
.call(d3.axisBottom(x))
|
|
143
|
+
.selectAll("text")
|
|
144
|
+
.style("font-size", "12px");
|
|
145
|
+
|
|
146
|
+
svg.append("g")
|
|
147
|
+
.call(d3.axisLeft(y))
|
|
148
|
+
.selectAll("text")
|
|
149
|
+
.style("font-size", "12px");
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Heatmap for Correlation Matrices
|
|
154
|
+
|
|
155
|
+
```javascript
|
|
156
|
+
function createCorrelationHeatmap(matrix, labels, container) {
|
|
157
|
+
const size = 500;
|
|
158
|
+
const cellSize = size / labels.length;
|
|
159
|
+
|
|
160
|
+
const colorScale = d3.scaleSequential(d3.interpolateRdBu)
|
|
161
|
+
.domain([1, -1]);
|
|
162
|
+
|
|
163
|
+
const svg = d3.select(container)
|
|
164
|
+
.append("svg")
|
|
165
|
+
.attr("width", size + 120)
|
|
166
|
+
.attr("height", size + 120);
|
|
167
|
+
|
|
168
|
+
const g = svg.append("g")
|
|
169
|
+
.attr("transform", "translate(100, 20)");
|
|
170
|
+
|
|
171
|
+
// Draw cells
|
|
172
|
+
labels.forEach((rowLabel, i) => {
|
|
173
|
+
labels.forEach((colLabel, j) => {
|
|
174
|
+
g.append("rect")
|
|
175
|
+
.attr("x", j * cellSize)
|
|
176
|
+
.attr("y", i * cellSize)
|
|
177
|
+
.attr("width", cellSize - 1)
|
|
178
|
+
.attr("height", cellSize - 1)
|
|
179
|
+
.attr("fill", colorScale(matrix[i][j]))
|
|
180
|
+
.append("title")
|
|
181
|
+
.text(`${rowLabel} vs ${colLabel}: ${matrix[i][j].toFixed(3)}`);
|
|
182
|
+
|
|
183
|
+
g.append("text")
|
|
184
|
+
.attr("x", j * cellSize + cellSize / 2)
|
|
185
|
+
.attr("y", i * cellSize + cellSize / 2)
|
|
186
|
+
.attr("text-anchor", "middle")
|
|
187
|
+
.attr("dominant-baseline", "central")
|
|
188
|
+
.style("font-size", "10px")
|
|
189
|
+
.text(matrix[i][j].toFixed(2));
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
// Row and column labels
|
|
194
|
+
g.selectAll(".row-label")
|
|
195
|
+
.data(labels)
|
|
196
|
+
.join("text")
|
|
197
|
+
.attr("x", -8)
|
|
198
|
+
.attr("y", (d, i) => i * cellSize + cellSize / 2)
|
|
199
|
+
.attr("text-anchor", "end")
|
|
200
|
+
.attr("dominant-baseline", "central")
|
|
201
|
+
.style("font-size", "11px")
|
|
202
|
+
.text(d => d);
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Interactive Techniques for Research Presentations
|
|
207
|
+
|
|
208
|
+
D3 excels at adding interactivity to visualizations, which is valuable for research presentations, supplementary materials, and data exploration during analysis.
|
|
209
|
+
|
|
210
|
+
### Tooltips and Hover Effects
|
|
211
|
+
|
|
212
|
+
```javascript
|
|
213
|
+
// Create a tooltip div
|
|
214
|
+
const tooltip = d3.select("body").append("div")
|
|
215
|
+
.attr("class", "tooltip")
|
|
216
|
+
.style("position", "absolute")
|
|
217
|
+
.style("background", "rgba(0,0,0,0.8)")
|
|
218
|
+
.style("color", "#fff")
|
|
219
|
+
.style("padding", "8px 12px")
|
|
220
|
+
.style("border-radius", "4px")
|
|
221
|
+
.style("font-size", "12px")
|
|
222
|
+
.style("pointer-events", "none")
|
|
223
|
+
.style("opacity", 0);
|
|
224
|
+
|
|
225
|
+
// Attach to data points
|
|
226
|
+
svg.selectAll("circle")
|
|
227
|
+
.on("mouseover", (event, d) => {
|
|
228
|
+
tooltip.transition().duration(200).style("opacity", 1);
|
|
229
|
+
tooltip.html(
|
|
230
|
+
`<strong>${d.sample_id}</strong><br/>` +
|
|
231
|
+
`Value: ${d.measurement.toFixed(3)}<br/>` +
|
|
232
|
+
`p-value: ${d.pvalue.toExponential(2)}`
|
|
233
|
+
)
|
|
234
|
+
.style("left", (event.pageX + 12) + "px")
|
|
235
|
+
.style("top", (event.pageY - 28) + "px");
|
|
236
|
+
})
|
|
237
|
+
.on("mouseout", () => {
|
|
238
|
+
tooltip.transition().duration(300).style("opacity", 0);
|
|
239
|
+
});
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Zoom and Pan for Large Datasets
|
|
243
|
+
|
|
244
|
+
```javascript
|
|
245
|
+
const zoom = d3.zoom()
|
|
246
|
+
.scaleExtent([1, 20])
|
|
247
|
+
.on("zoom", (event) => {
|
|
248
|
+
chartGroup.attr("transform", event.transform);
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
svg.call(zoom);
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
## Exporting for Publications
|
|
255
|
+
|
|
256
|
+
When preparing figures for journal submissions, D3 SVG output can be exported directly to vector formats.
|
|
257
|
+
|
|
258
|
+
```javascript
|
|
259
|
+
// Extract SVG markup for saving
|
|
260
|
+
function exportSVG(svgElement) {
|
|
261
|
+
const serializer = new XMLSerializer();
|
|
262
|
+
const svgString = serializer.serializeToString(svgElement);
|
|
263
|
+
const blob = new Blob([svgString], { type: "image/svg+xml" });
|
|
264
|
+
const url = URL.createObjectURL(blob);
|
|
265
|
+
|
|
266
|
+
const link = document.createElement("a");
|
|
267
|
+
link.href = url;
|
|
268
|
+
link.download = "figure.svg";
|
|
269
|
+
link.click();
|
|
270
|
+
URL.revokeObjectURL(url);
|
|
271
|
+
}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Researchers can then convert SVG to PDF or EPS using tools like Inkscape or cairosvg for submission to journals that require specific formats.
|
|
275
|
+
|
|
276
|
+
## References
|
|
277
|
+
|
|
278
|
+
- D3.js official documentation: https://d3js.org
|
|
279
|
+
- D3 GitHub repository: https://github.com/d3/d3
|
|
280
|
+
- Observable D3 tutorials: https://observablehq.com/@d3
|
|
281
|
+
- D3 Graph Gallery (examples): https://d3-graph-gallery.com
|