research-copilot 0.1.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/LICENSE +21 -0
- package/README.md +190 -0
- package/app/build/icon.icns +0 -0
- package/app/build/icon.ico +0 -0
- package/app/build/icon.png +0 -0
- package/app/out/main/index.mjs +6719 -0
- package/app/out/preload/index.js +141 -0
- package/app/out/renderer/assets/Inter-Variable-Latin-8kRkwJBP.woff2 +0 -0
- package/app/out/renderer/assets/Inter-Variable-LatinExt-B_-bZUTo.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/app/out/renderer/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/app/out/renderer/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/app/out/renderer/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/app/out/renderer/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/app/out/renderer/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/app/out/renderer/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/app/out/renderer/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/app/out/renderer/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/app/out/renderer/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/app/out/renderer/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/app/out/renderer/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/app/out/renderer/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/app/out/renderer/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/app/out/renderer/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/app/out/renderer/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/app/out/renderer/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/app/out/renderer/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/app/out/renderer/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/app/out/renderer/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/app/out/renderer/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/app/out/renderer/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/app/out/renderer/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/app/out/renderer/assets/MilkdownMarkdownEditor-bLPxrCVb.js +89821 -0
- package/app/out/renderer/assets/MilkdownMarkdownEditor-tTNRIB2K.css +2555 -0
- package/app/out/renderer/assets/Tableau10-BqnYsPR6.js +9 -0
- package/app/out/renderer/assets/apl-fqmucPXA.js +140 -0
- package/app/out/renderer/assets/arc-J47ePHZ2.js +132 -0
- package/app/out/renderer/assets/array-DgktLKBx.js +6 -0
- package/app/out/renderer/assets/asciiarmor-DucZyvP0.js +56 -0
- package/app/out/renderer/assets/asn1-BnOEsgAm.js +144 -0
- package/app/out/renderer/assets/asterisk-QAlztEwS.js +345 -0
- package/app/out/renderer/assets/blockDiagram-c4efeb88-5uRQXgQJ.js +1817 -0
- package/app/out/renderer/assets/brainfuck-DZVCuF_t.js +53 -0
- package/app/out/renderer/assets/c4Diagram-c83219d4-C4iCTPEL.js +2464 -0
- package/app/out/renderer/assets/channel-ZAmhHE3g.js +7 -0
- package/app/out/renderer/assets/classDiagram-beda092f-7NOZxq_W.js +357 -0
- package/app/out/renderer/assets/classDiagram-v2-2358418a-5fPT-cUH.js +291 -0
- package/app/out/renderer/assets/clike-xqXYL6ge.js +805 -0
- package/app/out/renderer/assets/clojure-BhXMqnxz.js +849 -0
- package/app/out/renderer/assets/clone-CsnzsYXQ.js +8 -0
- package/app/out/renderer/assets/cmake-BGaNd9E7.js +71 -0
- package/app/out/renderer/assets/cobol-4yqQntpt.js +120 -0
- package/app/out/renderer/assets/coffeescript-D2dXvhEc.js +308 -0
- package/app/out/renderer/assets/commonlisp-CF_VNHQR.js +130 -0
- package/app/out/renderer/assets/createText-1719965b-Cji7KN4K.js +4904 -0
- package/app/out/renderer/assets/crystal-DyuLTqLs.js +398 -0
- package/app/out/renderer/assets/css-c-jst79C.js +1783 -0
- package/app/out/renderer/assets/cypher-Dlu_3r4V.js +121 -0
- package/app/out/renderer/assets/d-UURgV0Ux.js +179 -0
- package/app/out/renderer/assets/diff-B_Bi2Crb.js +25 -0
- package/app/out/renderer/assets/dockerfile-Bvk733Ga.js +201 -0
- package/app/out/renderer/assets/dtd-Dy74G54E.js +114 -0
- package/app/out/renderer/assets/dylan-TSb-Nfix.js +314 -0
- package/app/out/renderer/assets/ebnf-DAomQUbD.js +139 -0
- package/app/out/renderer/assets/ecl-B59qGGVg.js +178 -0
- package/app/out/renderer/assets/edges-96097737-CD0EvAZQ.js +1844 -0
- package/app/out/renderer/assets/eiffel-Dze7nlu3.js +134 -0
- package/app/out/renderer/assets/elm-DG7jkhNZ.js +176 -0
- package/app/out/renderer/assets/erDiagram-0228fc6a-DRYXBpi7.js +1321 -0
- package/app/out/renderer/assets/erlang-BO6gOnGA.js +674 -0
- package/app/out/renderer/assets/factor-CMxFHDqz.js +65 -0
- package/app/out/renderer/assets/fcl-CDDUNjTj.js +141 -0
- package/app/out/renderer/assets/flowDb-c6c81e3f-CuoIN-Cy.js +1713 -0
- package/app/out/renderer/assets/flowDiagram-50d868cf-CPWPLOml.js +1272 -0
- package/app/out/renderer/assets/flowDiagram-v2-4f6560a1-C_R12s4S.js +33 -0
- package/app/out/renderer/assets/flowchart-elk-definition-6af322e1-BdKUSFpi.js +92921 -0
- package/app/out/renderer/assets/forth-B9D2JCeE.js +116 -0
- package/app/out/renderer/assets/fortran-CAG2BFbe.js +467 -0
- package/app/out/renderer/assets/ganttDiagram-a2739b55-ygqT5HlG.js +3399 -0
- package/app/out/renderer/assets/gas-d3KEcW3x.js +294 -0
- package/app/out/renderer/assets/gherkin-DhZlEZiy.js +115 -0
- package/app/out/renderer/assets/gitGraphDiagram-82fe8481-D97GT4iA.js +1791 -0
- package/app/out/renderer/assets/graph-DpC13d95.js +1237 -0
- package/app/out/renderer/assets/groovy-CpwJiBl7.js +223 -0
- package/app/out/renderer/assets/haskell-BlGBCCe3.js +459 -0
- package/app/out/renderer/assets/haxe-7MlzfeYV.js +514 -0
- package/app/out/renderer/assets/http-BqypyemW.js +79 -0
- package/app/out/renderer/assets/idl-4HIGJlDI.js +985 -0
- package/app/out/renderer/assets/index-4-ziknCv.js +292 -0
- package/app/out/renderer/assets/index-5325376f-Bbs7Fbqr.js +663 -0
- package/app/out/renderer/assets/index-B2jip-rk.js +2489 -0
- package/app/out/renderer/assets/index-BKTVfokE.js +312 -0
- package/app/out/renderer/assets/index-BiJbFgVG.js +118 -0
- package/app/out/renderer/assets/index-Bn433Fat.js +83 -0
- package/app/out/renderer/assets/index-BqDyyRCx.js +39679 -0
- package/app/out/renderer/assets/index-BzFMeMPn.js +158 -0
- package/app/out/renderer/assets/index-C-_uCjZJ.css +2701 -0
- package/app/out/renderer/assets/index-C1ithNW1.js +1765 -0
- package/app/out/renderer/assets/index-CAJkRYkO.js +407 -0
- package/app/out/renderer/assets/index-CleO0-yj.js +690 -0
- package/app/out/renderer/assets/index-Cq4MH3sY.js +1020 -0
- package/app/out/renderer/assets/index-CtA0Xj22.js +705 -0
- package/app/out/renderer/assets/index-CvAZkqBZ.js +83 -0
- package/app/out/renderer/assets/index-D3UDN-5c.js +152 -0
- package/app/out/renderer/assets/index-D4F9R5ao.js +179 -0
- package/app/out/renderer/assets/index-D6RguhZ5.js +328 -0
- package/app/out/renderer/assets/index-DnEowqXv.js +386 -0
- package/app/out/renderer/assets/index-K8c8Mqdy.js +98 -0
- package/app/out/renderer/assets/index-Kh14gO6K.js +62 -0
- package/app/out/renderer/assets/index-WFd2jRnA.js +333 -0
- package/app/out/renderer/assets/index-WgMfkRFp.js +313 -0
- package/app/out/renderer/assets/index-Y4lKyF6t.js +1042 -0
- package/app/out/renderer/assets/index-fx307_f1.js +643 -0
- package/app/out/renderer/assets/infoDiagram-8eee0895-ptaVSwzq.js +511 -0
- package/app/out/renderer/assets/init-ZxktEp_H.js +16 -0
- package/app/out/renderer/assets/javascript-C3MnDRiU.js +994 -0
- package/app/out/renderer/assets/journeyDiagram-c64418c1-aloEGOQp.js +1184 -0
- package/app/out/renderer/assets/julia-Bs6JJhYG.js +407 -0
- package/app/out/renderer/assets/layout-ZeuHE_aY.js +2217 -0
- package/app/out/renderer/assets/line-CAgaGl-S.js +45 -0
- package/app/out/renderer/assets/linear-DIg7lTe1.js +539 -0
- package/app/out/renderer/assets/livescript-DmzgM3Yt.js +296 -0
- package/app/out/renderer/assets/lua-8cJgIlqe.js +256 -0
- package/app/out/renderer/assets/mathematica-DNLOL9PQ.js +110 -0
- package/app/out/renderer/assets/mbox-Ga7d4MMN.js +117 -0
- package/app/out/renderer/assets/mindmap-definition-8da855dc-B8XVoUxz.js +36054 -0
- package/app/out/renderer/assets/mirc-Dma3B8rS.js +107 -0
- package/app/out/renderer/assets/mllike-DHn7xckP.js +334 -0
- package/app/out/renderer/assets/modelica-0d55jYY0.js +147 -0
- package/app/out/renderer/assets/mscgen-DdqZYINH.js +135 -0
- package/app/out/renderer/assets/mumps-Btr8VblO.js +93 -0
- package/app/out/renderer/assets/nginx-DTDtBDVN.js +141 -0
- package/app/out/renderer/assets/nsis-3zG7tgur.js +62 -0
- package/app/out/renderer/assets/ntriples-CvgOYMpL.js +153 -0
- package/app/out/renderer/assets/octave-DYBj3-tl.js +200 -0
- package/app/out/renderer/assets/ordinal-DSZU4PqD.js +76 -0
- package/app/out/renderer/assets/oz-R_e8WMIi.js +231 -0
- package/app/out/renderer/assets/pascal-GD8iposT.js +105 -0
- package/app/out/renderer/assets/path-Cp2qmpkd.js +109 -0
- package/app/out/renderer/assets/perl-DL9mHpoi.js +1105 -0
- package/app/out/renderer/assets/pieDiagram-a8764435-DlwoeBU2.js +770 -0
- package/app/out/renderer/assets/pig-C_4T4YIV.js +101 -0
- package/app/out/renderer/assets/powershell-B0suO7Vd.js +328 -0
- package/app/out/renderer/assets/properties-BR-vP1aU.js +58 -0
- package/app/out/renderer/assets/protobuf-BxgpyhoW.js +77 -0
- package/app/out/renderer/assets/pug-By0kVCfm.js +405 -0
- package/app/out/renderer/assets/puppet-Bdao66PW.js +137 -0
- package/app/out/renderer/assets/python-CvWbmiX4.js +427 -0
- package/app/out/renderer/assets/q-CrbCVq4a.js +131 -0
- package/app/out/renderer/assets/quadrantDiagram-1e28029f-BaSi1XB4.js +1200 -0
- package/app/out/renderer/assets/r-V7nswm59.js +170 -0
- package/app/out/renderer/assets/requirementDiagram-08caed73-D3EFyegZ.js +1092 -0
- package/app/out/renderer/assets/rpm-C-DLY-If.js +109 -0
- package/app/out/renderer/assets/ruby-JDKLJNK0.js +330 -0
- package/app/out/renderer/assets/sankeyDiagram-a04cb91d-Cv44AsnM.js +1174 -0
- package/app/out/renderer/assets/sas-D2UG-yhZ.js +207 -0
- package/app/out/renderer/assets/scheme-BKzrkGJD.js +222 -0
- package/app/out/renderer/assets/sequenceDiagram-c5b8d532-CuUBu-x4.js +3337 -0
- package/app/out/renderer/assets/shell-BlsXDxCn.js +222 -0
- package/app/out/renderer/assets/sieve-CjwBwOY5.js +135 -0
- package/app/out/renderer/assets/simple-mode-DMneyfDu.js +130 -0
- package/app/out/renderer/assets/smalltalk-BOIGQuhN.js +121 -0
- package/app/out/renderer/assets/solr-CwD7U71z.js +69 -0
- package/app/out/renderer/assets/sparql-DYskk2vE.js +249 -0
- package/app/out/renderer/assets/spreadsheet-Bgtt3oLP.js +87 -0
- package/app/out/renderer/assets/sql-BSrOzCRI.js +354 -0
- package/app/out/renderer/assets/stateDiagram-1ecb1508-BOU34Zp4.js +454 -0
- package/app/out/renderer/assets/stateDiagram-v2-c2b004d7-BgRoffou.js +326 -0
- package/app/out/renderer/assets/stex-B6LNC55o.js +231 -0
- package/app/out/renderer/assets/styles-b4e223ce-BMr9TPuj.js +1483 -0
- package/app/out/renderer/assets/styles-ca3715f6-DgbNw99p.js +1363 -0
- package/app/out/renderer/assets/styles-d45a18b0-DtRYKYKf.js +574 -0
- package/app/out/renderer/assets/stylus-BkS-boTH.js +565 -0
- package/app/out/renderer/assets/svgDrawCommon-b86b1483-Bein03PD.js +100 -0
- package/app/out/renderer/assets/swift-FRZi1uvB.js +291 -0
- package/app/out/renderer/assets/tcl-CUcaCdmq.js +114 -0
- package/app/out/renderer/assets/textile-BnFpjsrl.js +414 -0
- package/app/out/renderer/assets/tiddlywiki-CjprD-Qp.js +218 -0
- package/app/out/renderer/assets/tiki-B4EPSQ1G.js +265 -0
- package/app/out/renderer/assets/timeline-definition-faaaa080-BlWpLE_4.js +1212 -0
- package/app/out/renderer/assets/toml-BOuWGMcf.js +76 -0
- package/app/out/renderer/assets/troff-E1bJ0PPL.js +61 -0
- package/app/out/renderer/assets/ttcn-cfg-Dc39-fIP.js +133 -0
- package/app/out/renderer/assets/ttcn-tKd4HLu4.js +192 -0
- package/app/out/renderer/assets/turtle-Dq7-1WAf.js +124 -0
- package/app/out/renderer/assets/vb-Dp90gtsv.js +196 -0
- package/app/out/renderer/assets/vbscript-CI6_mxxU.js +479 -0
- package/app/out/renderer/assets/velocity-BwIZK1TH.js +149 -0
- package/app/out/renderer/assets/verilog-DDCYnHN8.js +430 -0
- package/app/out/renderer/assets/vhdl-DCkMIyT9.js +158 -0
- package/app/out/renderer/assets/webidl-BTLTThCm.js +204 -0
- package/app/out/renderer/assets/xquery-BgiOC5Ce.js +525 -0
- package/app/out/renderer/assets/xychartDiagram-f5964ef8-Bhga-YXm.js +1799 -0
- package/app/out/renderer/assets/yacas-b5lAVEIl.js +130 -0
- package/app/out/renderer/assets/z80-BZV19vqv.js +93 -0
- package/app/out/renderer/index.html +13 -0
- package/app/out/skills/community-builtin/README.md +29 -0
- package/app/out/skills/community-builtin/document-docx/SKILL.md +44 -0
- package/app/out/skills/community-builtin/document-docx/scripts/docx-to-markdown.sh +20 -0
- package/app/out/skills/community-builtin/document-docx/scripts/extract-docx-text.sh +28 -0
- package/app/out/skills/community-builtin/document-docx/scripts/init-docx-template.sh +32 -0
- package/app/out/skills/community-builtin/document-docx/scripts/setup-docx-tools.sh +10 -0
- package/app/out/skills/community-builtin/markitdown/SKILL.md +105 -0
- package/app/out/skills/community-builtin/markitdown/scripts/batch-convert.sh +40 -0
- package/app/out/skills/community-builtin/markitdown/scripts/convert-file.sh +24 -0
- package/app/out/skills/community-builtin/markitdown/scripts/setup-markitdown.sh +10 -0
- package/app/out/skills/community-builtin/repo-quick-audit/SKILL.md +27 -0
- package/app/out/skills/community-builtin/repo-quick-audit/scripts/audit-basics.sh +19 -0
- package/app/out/skills/research-pilot-default-project-skills/README.md +23 -0
- package/app/out/skills/research-pilot-default-project-skills/citation-management/SKILL.md +39 -0
- package/app/out/skills/research-pilot-default-project-skills/citation-management/scripts/doi-to-bibtex.sh +25 -0
- package/app/out/skills/research-pilot-default-project-skills/citation-management/scripts/normalize-bibtex-keys.sh +51 -0
- package/app/out/skills/research-pilot-default-project-skills/citation-management/scripts/setup-citation-tools.sh +10 -0
- package/app/out/skills/research-pilot-default-project-skills/citation-management/scripts/validate-bib.sh +31 -0
- package/app/out/skills/research-pilot-default-project-skills/matplotlib/SKILL.md +34 -0
- package/app/out/skills/research-pilot-default-project-skills/matplotlib/references/api_reference.md +412 -0
- package/app/out/skills/research-pilot-default-project-skills/matplotlib/references/common_issues.md +563 -0
- package/app/out/skills/research-pilot-default-project-skills/matplotlib/references/plot_types.md +476 -0
- package/app/out/skills/research-pilot-default-project-skills/matplotlib/references/styling_guide.md +589 -0
- package/app/out/skills/research-pilot-default-project-skills/matplotlib/references/subagent_quickstart.md +30 -0
- package/app/out/skills/research-pilot-default-project-skills/matplotlib/scripts/plot_template.py +401 -0
- package/app/out/skills/research-pilot-default-project-skills/matplotlib/scripts/style_configurator.py +409 -0
- package/app/out/skills/research-pilot-default-project-skills/research-grants/SKILL.md +38 -0
- package/app/out/skills/research-pilot-default-project-skills/research-grants/scripts/check-grant-compliance.sh +40 -0
- package/app/out/skills/research-pilot-default-project-skills/research-grants/scripts/grant-summary-card.sh +32 -0
- package/app/out/skills/research-pilot-default-project-skills/research-grants/scripts/init-grant-structure.sh +70 -0
- package/app/package.json +77 -0
- package/bin/cli.mjs +56 -0
- package/lib/README.md +145 -0
- package/lib/skills/_generated.ts +13 -0
- package/lib/skills/builtin/brainstorming-research-ideas/SKILL.md +280 -0
- package/lib/skills/builtin/coding/SKILL.md +114 -0
- package/lib/skills/builtin/creative-thinking-for-research/SKILL.md +273 -0
- package/lib/skills/builtin/matplotlib/SKILL.md +361 -0
- package/lib/skills/builtin/matplotlib/references/api_reference.md +412 -0
- package/lib/skills/builtin/matplotlib/references/common_issues.md +563 -0
- package/lib/skills/builtin/matplotlib/references/plot_types.md +476 -0
- package/lib/skills/builtin/matplotlib/references/styling_guide.md +589 -0
- package/lib/skills/builtin/matplotlib/scripts/plot_template.py +401 -0
- package/lib/skills/builtin/matplotlib/scripts/style_configurator.py +409 -0
- package/lib/skills/builtin/paper-writing/SKILL.md +554 -0
- package/lib/skills/builtin/paper-writing/references/checklists.md +524 -0
- package/lib/skills/builtin/paper-writing/references/citation-workflow.md +562 -0
- package/lib/skills/builtin/paper-writing/references/reviewer-guidelines.md +462 -0
- package/lib/skills/builtin/paper-writing/references/sources.md +189 -0
- package/lib/skills/builtin/paper-writing/references/systems-conferences.md +260 -0
- package/lib/skills/builtin/paper-writing/references/writing-guide.md +476 -0
- package/lib/skills/builtin/paper-writing/templates/README.md +408 -0
- package/lib/skills/builtin/paper-writing/templates/aaai2026/README.md +534 -0
- package/lib/skills/builtin/paper-writing/templates/aaai2026/aaai2026-unified-supp.tex +144 -0
- package/lib/skills/builtin/paper-writing/templates/aaai2026/aaai2026-unified-template.tex +952 -0
- package/lib/skills/builtin/paper-writing/templates/aaai2026/aaai2026.bib +111 -0
- package/lib/skills/builtin/paper-writing/templates/aaai2026/aaai2026.bst +1493 -0
- package/lib/skills/builtin/paper-writing/templates/aaai2026/aaai2026.sty +315 -0
- package/lib/skills/builtin/paper-writing/templates/acl/README.md +50 -0
- package/lib/skills/builtin/paper-writing/templates/acl/acl.sty +312 -0
- package/lib/skills/builtin/paper-writing/templates/acl/acl_latex.tex +377 -0
- package/lib/skills/builtin/paper-writing/templates/acl/acl_lualatex.tex +101 -0
- package/lib/skills/builtin/paper-writing/templates/acl/acl_natbib.bst +1940 -0
- package/lib/skills/builtin/paper-writing/templates/acl/anthology.bib.txt +26 -0
- package/lib/skills/builtin/paper-writing/templates/acl/custom.bib +70 -0
- package/lib/skills/builtin/paper-writing/templates/acl/formatting.md +326 -0
- package/lib/skills/builtin/paper-writing/templates/asplos2027/main.tex +459 -0
- package/lib/skills/builtin/paper-writing/templates/asplos2027/references.bib +135 -0
- package/lib/skills/builtin/paper-writing/templates/colm2025/README.md +3 -0
- package/lib/skills/builtin/paper-writing/templates/colm2025/colm2025_conference.bib +11 -0
- package/lib/skills/builtin/paper-writing/templates/colm2025/colm2025_conference.bst +1440 -0
- package/lib/skills/builtin/paper-writing/templates/colm2025/colm2025_conference.pdf +0 -0
- package/lib/skills/builtin/paper-writing/templates/colm2025/colm2025_conference.sty +218 -0
- package/lib/skills/builtin/paper-writing/templates/colm2025/colm2025_conference.tex +305 -0
- package/lib/skills/builtin/paper-writing/templates/colm2025/fancyhdr.sty +485 -0
- package/lib/skills/builtin/paper-writing/templates/colm2025/math_commands.tex +508 -0
- package/lib/skills/builtin/paper-writing/templates/colm2025/natbib.sty +1246 -0
- package/lib/skills/builtin/paper-writing/templates/iclr2026/fancyhdr.sty +485 -0
- package/lib/skills/builtin/paper-writing/templates/iclr2026/iclr2026_conference.bib +24 -0
- package/lib/skills/builtin/paper-writing/templates/iclr2026/iclr2026_conference.bst +1440 -0
- package/lib/skills/builtin/paper-writing/templates/iclr2026/iclr2026_conference.pdf +0 -0
- package/lib/skills/builtin/paper-writing/templates/iclr2026/iclr2026_conference.sty +246 -0
- package/lib/skills/builtin/paper-writing/templates/iclr2026/iclr2026_conference.tex +414 -0
- package/lib/skills/builtin/paper-writing/templates/iclr2026/math_commands.tex +508 -0
- package/lib/skills/builtin/paper-writing/templates/iclr2026/natbib.sty +1246 -0
- package/lib/skills/builtin/paper-writing/templates/icml2026/algorithm.sty +79 -0
- package/lib/skills/builtin/paper-writing/templates/icml2026/algorithmic.sty +201 -0
- package/lib/skills/builtin/paper-writing/templates/icml2026/example_paper.bib +75 -0
- package/lib/skills/builtin/paper-writing/templates/icml2026/example_paper.pdf +0 -0
- package/lib/skills/builtin/paper-writing/templates/icml2026/example_paper.tex +662 -0
- package/lib/skills/builtin/paper-writing/templates/icml2026/fancyhdr.sty +864 -0
- package/lib/skills/builtin/paper-writing/templates/icml2026/icml2026.bst +1443 -0
- package/lib/skills/builtin/paper-writing/templates/icml2026/icml2026.sty +767 -0
- package/lib/skills/builtin/paper-writing/templates/icml2026/icml_numpapers.pdf +0 -0
- package/lib/skills/builtin/paper-writing/templates/neurips2025/Makefile +36 -0
- package/lib/skills/builtin/paper-writing/templates/neurips2025/extra_pkgs.tex +53 -0
- package/lib/skills/builtin/paper-writing/templates/neurips2025/main.tex +38 -0
- package/lib/skills/builtin/paper-writing/templates/neurips2025/neurips.sty +382 -0
- package/lib/skills/builtin/paper-writing/templates/nsdi2027/main.tex +426 -0
- package/lib/skills/builtin/paper-writing/templates/nsdi2027/references.bib +151 -0
- package/lib/skills/builtin/paper-writing/templates/nsdi2027/usenix-2020-09.sty +83 -0
- package/lib/skills/builtin/paper-writing/templates/osdi2026/main.tex +429 -0
- package/lib/skills/builtin/paper-writing/templates/osdi2026/references.bib +150 -0
- package/lib/skills/builtin/paper-writing/templates/osdi2026/usenix-2020-09.sty +83 -0
- package/lib/skills/builtin/paper-writing/templates/sosp2026/main.tex +532 -0
- package/lib/skills/builtin/paper-writing/templates/sosp2026/references.bib +148 -0
- package/lib/skills/builtin/research-grants/SKILL.md +958 -0
- package/lib/skills/builtin/research-grants/assets/budget_justification_template.md +453 -0
- package/lib/skills/builtin/research-grants/assets/nih_specific_aims_template.md +166 -0
- package/lib/skills/builtin/research-grants/assets/nsf_project_summary_template.md +92 -0
- package/lib/skills/builtin/research-grants/references/README.md +285 -0
- package/lib/skills/builtin/research-grants/references/broader_impacts.md +392 -0
- package/lib/skills/builtin/research-grants/references/darpa_guidelines.md +636 -0
- package/lib/skills/builtin/research-grants/references/doe_guidelines.md +586 -0
- package/lib/skills/builtin/research-grants/references/nih_guidelines.md +851 -0
- package/lib/skills/builtin/research-grants/references/nsf_guidelines.md +570 -0
- package/lib/skills/builtin/research-grants/references/nstc_guidelines.md +733 -0
- package/lib/skills/builtin/research-grants/references/specific_aims_guide.md +458 -0
- package/lib/skills/builtin/rewrite-humanize/SKILL.md +116 -0
- package/lib/skills/builtin/rewrite-humanize/references/cs-venue-tone.md +57 -0
- package/lib/skills/builtin/rewrite-humanize/references/lexicon.md +50 -0
- package/lib/skills/builtin/scholar-evaluation/SKILL.md +300 -0
- package/lib/skills/builtin/scholar-evaluation/references/evaluation_framework.md +663 -0
- package/lib/skills/builtin/scholar-evaluation/scripts/calculate_scores.py +379 -0
- package/lib/skills/builtin/scientific-schematics/SKILL.md +603 -0
- package/lib/skills/builtin/scientific-schematics/references/QUICK_REFERENCE.md +182 -0
- package/lib/skills/builtin/scientific-schematics/references/README.md +292 -0
- package/lib/skills/builtin/scientific-schematics/references/best_practices.md +560 -0
- package/lib/skills/builtin/scientific-schematics/scripts/__pycache__/generate_schematic.cpython-312.pyc +0 -0
- package/lib/skills/builtin/scientific-schematics/scripts/__pycache__/generate_schematic_ai.cpython-312.pyc +0 -0
- package/lib/skills/builtin/scientific-schematics/scripts/example_usage.sh +85 -0
- package/lib/skills/builtin/scientific-schematics/scripts/generate_schematic.py +141 -0
- package/lib/skills/builtin/scientific-schematics/scripts/generate_schematic_ai.py +910 -0
- package/lib/skills/builtin/scientific-visualization/SKILL.md +749 -0
- package/lib/skills/builtin/scientific-visualization/assets/color_palettes.py +197 -0
- package/lib/skills/builtin/scientific-visualization/assets/nature.mplstyle +63 -0
- package/lib/skills/builtin/scientific-visualization/assets/presentation.mplstyle +61 -0
- package/lib/skills/builtin/scientific-visualization/assets/publication.mplstyle +68 -0
- package/lib/skills/builtin/scientific-visualization/references/color_palettes.md +348 -0
- package/lib/skills/builtin/scientific-visualization/references/journal_requirements.md +320 -0
- package/lib/skills/builtin/scientific-visualization/references/matplotlib_examples.md +620 -0
- package/lib/skills/builtin/scientific-visualization/references/publication_guidelines.md +205 -0
- package/lib/skills/builtin/scientific-visualization/scripts/figure_export.py +343 -0
- package/lib/skills/builtin/scientific-visualization/scripts/style_presets.py +416 -0
- package/lib/skills/builtin/scientific-writing/SKILL.md +745 -0
- package/lib/skills/builtin/scientific-writing/assets/REPORT_FORMATTING_GUIDE.md +574 -0
- package/lib/skills/builtin/scientific-writing/assets/scientific_report.sty +606 -0
- package/lib/skills/builtin/scientific-writing/assets/scientific_report_template.tex +449 -0
- package/lib/skills/builtin/scientific-writing/references/citation_styles.md +720 -0
- package/lib/skills/builtin/scientific-writing/references/figures_tables.md +806 -0
- package/lib/skills/builtin/scientific-writing/references/imrad_structure.md +686 -0
- package/lib/skills/builtin/scientific-writing/references/professional_report_formatting.md +664 -0
- package/lib/skills/builtin/scientific-writing/references/reporting_guidelines.md +748 -0
- package/lib/skills/builtin/scientific-writing/references/writing_principles.md +824 -0
- package/lib/skills/builtin/seaborn/SKILL.md +674 -0
- package/lib/skills/builtin/seaborn/references/examples.md +822 -0
- package/lib/skills/builtin/seaborn/references/function_reference.md +770 -0
- package/lib/skills/builtin/seaborn/references/objects_interface.md +964 -0
- package/lib/skills/data-analysis/SKILL.md +285 -0
- package/lib/skills/generate-skill-content.mjs +58 -0
- package/lib/skills/index.ts +34 -0
- package/lib/skills/loader.ts +452 -0
- package/package.json +62 -0
|
@@ -0,0 +1,964 @@
|
|
|
1
|
+
# Seaborn Objects Interface
|
|
2
|
+
|
|
3
|
+
The `seaborn.objects` interface provides a modern, declarative API for building visualizations through composition. This guide covers the complete objects interface introduced in seaborn 0.12+.
|
|
4
|
+
|
|
5
|
+
## Core Concept
|
|
6
|
+
|
|
7
|
+
The objects interface separates **what you want to show** (data and mappings) from **how to show it** (marks, stats, and moves). Build plots by:
|
|
8
|
+
|
|
9
|
+
1. Creating a `Plot` object with data and aesthetic mappings
|
|
10
|
+
2. Adding layers with `.add()` combining marks and statistical transformations
|
|
11
|
+
3. Customizing with `.scale()`, `.label()`, `.limit()`, `.theme()`, etc.
|
|
12
|
+
4. Rendering with `.show()` or `.save()`
|
|
13
|
+
|
|
14
|
+
## Basic Usage
|
|
15
|
+
|
|
16
|
+
```python
|
|
17
|
+
from seaborn import objects as so
|
|
18
|
+
import pandas as pd
|
|
19
|
+
|
|
20
|
+
# Create plot with data and mappings
|
|
21
|
+
p = so.Plot(data=df, x='x_var', y='y_var')
|
|
22
|
+
|
|
23
|
+
# Add mark (visual representation)
|
|
24
|
+
p = p.add(so.Dot())
|
|
25
|
+
|
|
26
|
+
# Display (automatic in Jupyter)
|
|
27
|
+
p.show()
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Plot Class
|
|
31
|
+
|
|
32
|
+
The `Plot` class is the foundation of the objects interface.
|
|
33
|
+
|
|
34
|
+
### Initialization
|
|
35
|
+
|
|
36
|
+
```python
|
|
37
|
+
so.Plot(data=None, x=None, y=None, color=None, alpha=None,
|
|
38
|
+
fill=None, fillalpha=None, fillcolor=None, marker=None,
|
|
39
|
+
pointsize=None, stroke=None, text=None, **variables)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Parameters:**
|
|
43
|
+
- `data` - DataFrame or dict of data vectors
|
|
44
|
+
- `x, y` - Variables for position
|
|
45
|
+
- `color` - Variable for color encoding
|
|
46
|
+
- `alpha` - Variable for transparency
|
|
47
|
+
- `marker` - Variable for marker shape
|
|
48
|
+
- `pointsize` - Variable for point size
|
|
49
|
+
- `stroke` - Variable for line width
|
|
50
|
+
- `text` - Variable for text labels
|
|
51
|
+
- `**variables` - Additional mappings using property names
|
|
52
|
+
|
|
53
|
+
**Examples:**
|
|
54
|
+
```python
|
|
55
|
+
# Basic mapping
|
|
56
|
+
so.Plot(df, x='total_bill', y='tip')
|
|
57
|
+
|
|
58
|
+
# Multiple mappings
|
|
59
|
+
so.Plot(df, x='total_bill', y='tip', color='day', pointsize='size')
|
|
60
|
+
|
|
61
|
+
# All variables in Plot
|
|
62
|
+
p = so.Plot(df, x='x', y='y', color='cat')
|
|
63
|
+
p.add(so.Dot()) # Uses all mappings
|
|
64
|
+
|
|
65
|
+
# Some variables in add()
|
|
66
|
+
p = so.Plot(df, x='x', y='y')
|
|
67
|
+
p.add(so.Dot(), color='cat') # Only this layer uses color
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Methods
|
|
71
|
+
|
|
72
|
+
#### add()
|
|
73
|
+
|
|
74
|
+
Add a layer to the plot with mark and optional stat/move.
|
|
75
|
+
|
|
76
|
+
```python
|
|
77
|
+
Plot.add(mark, *transforms, orient=None, legend=True, data=None,
|
|
78
|
+
**variables)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Parameters:**
|
|
82
|
+
- `mark` - Mark object defining visual representation
|
|
83
|
+
- `*transforms` - Stat and/or Move objects for data transformation
|
|
84
|
+
- `orient` - "x", "y", or "v"/"h" for orientation
|
|
85
|
+
- `legend` - Include in legend (True/False)
|
|
86
|
+
- `data` - Override data for this layer
|
|
87
|
+
- `**variables` - Override or add variable mappings
|
|
88
|
+
|
|
89
|
+
**Examples:**
|
|
90
|
+
```python
|
|
91
|
+
# Simple mark
|
|
92
|
+
p.add(so.Dot())
|
|
93
|
+
|
|
94
|
+
# Mark with stat
|
|
95
|
+
p.add(so.Line(), so.PolyFit(order=2))
|
|
96
|
+
|
|
97
|
+
# Mark with multiple transforms
|
|
98
|
+
p.add(so.Bar(), so.Agg(), so.Dodge())
|
|
99
|
+
|
|
100
|
+
# Layer-specific mappings
|
|
101
|
+
p.add(so.Dot(), color='category')
|
|
102
|
+
p.add(so.Line(), so.Agg(), color='category')
|
|
103
|
+
|
|
104
|
+
# Layer-specific data
|
|
105
|
+
p.add(so.Dot())
|
|
106
|
+
p.add(so.Line(), data=summary_df)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
#### facet()
|
|
110
|
+
|
|
111
|
+
Create subplots from categorical variables.
|
|
112
|
+
|
|
113
|
+
```python
|
|
114
|
+
Plot.facet(col=None, row=None, order=None, wrap=None)
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**Parameters:**
|
|
118
|
+
- `col` - Variable for column facets
|
|
119
|
+
- `row` - Variable for row facets
|
|
120
|
+
- `order` - Dict with facet orders (keys: variable names)
|
|
121
|
+
- `wrap` - Wrap columns after this many
|
|
122
|
+
|
|
123
|
+
**Example:**
|
|
124
|
+
```python
|
|
125
|
+
p.facet(col='time', row='sex')
|
|
126
|
+
p.facet(col='category', wrap=3)
|
|
127
|
+
p.facet(col='day', order={'day': ['Thur', 'Fri', 'Sat', 'Sun']})
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
#### pair()
|
|
131
|
+
|
|
132
|
+
Create pairwise subplots for multiple variables.
|
|
133
|
+
|
|
134
|
+
```python
|
|
135
|
+
Plot.pair(x=None, y=None, wrap=None, cross=True)
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**Parameters:**
|
|
139
|
+
- `x` - Variables for x-axis pairings
|
|
140
|
+
- `y` - Variables for y-axis pairings (if None, uses x)
|
|
141
|
+
- `wrap` - Wrap after this many columns
|
|
142
|
+
- `cross` - Include all x/y combinations (vs. only diagonal)
|
|
143
|
+
|
|
144
|
+
**Example:**
|
|
145
|
+
```python
|
|
146
|
+
# Pairs of all variables
|
|
147
|
+
p = so.Plot(df).pair(x=['a', 'b', 'c'])
|
|
148
|
+
p.add(so.Dot())
|
|
149
|
+
|
|
150
|
+
# Rectangular grid
|
|
151
|
+
p = so.Plot(df).pair(x=['a', 'b'], y=['c', 'd'])
|
|
152
|
+
p.add(so.Dot(), alpha=0.5)
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
#### scale()
|
|
156
|
+
|
|
157
|
+
Customize how data maps to visual properties.
|
|
158
|
+
|
|
159
|
+
```python
|
|
160
|
+
Plot.scale(**scales)
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**Parameters:** Keyword arguments with property names and Scale objects
|
|
164
|
+
|
|
165
|
+
**Example:**
|
|
166
|
+
```python
|
|
167
|
+
p.scale(
|
|
168
|
+
x=so.Continuous().tick(every=5),
|
|
169
|
+
y=so.Continuous().label(like='{x:.1f}'),
|
|
170
|
+
color=so.Nominal(['#1f77b4', '#ff7f0e', '#2ca02c']),
|
|
171
|
+
pointsize=(5, 10) # Shorthand for range
|
|
172
|
+
)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
#### limit()
|
|
176
|
+
|
|
177
|
+
Set axis limits.
|
|
178
|
+
|
|
179
|
+
```python
|
|
180
|
+
Plot.limit(x=None, y=None)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Parameters:**
|
|
184
|
+
- `x` - Tuple of (min, max) for x-axis
|
|
185
|
+
- `y` - Tuple of (min, max) for y-axis
|
|
186
|
+
|
|
187
|
+
**Example:**
|
|
188
|
+
```python
|
|
189
|
+
p.limit(x=(0, 100), y=(0, 50))
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
#### label()
|
|
193
|
+
|
|
194
|
+
Set axis labels and titles.
|
|
195
|
+
|
|
196
|
+
```python
|
|
197
|
+
Plot.label(x=None, y=None, color=None, title=None, **labels)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Parameters:** Keyword arguments with property names and label strings
|
|
201
|
+
|
|
202
|
+
**Example:**
|
|
203
|
+
```python
|
|
204
|
+
p.label(
|
|
205
|
+
x='Total Bill ($)',
|
|
206
|
+
y='Tip Amount ($)',
|
|
207
|
+
color='Day of Week',
|
|
208
|
+
title='Restaurant Tips Analysis'
|
|
209
|
+
)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
#### theme()
|
|
213
|
+
|
|
214
|
+
Apply matplotlib style settings.
|
|
215
|
+
|
|
216
|
+
```python
|
|
217
|
+
Plot.theme(config, **kwargs)
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**Parameters:**
|
|
221
|
+
- `config` - Dict of rcParams or seaborn theme dict
|
|
222
|
+
- `**kwargs` - Individual rcParams
|
|
223
|
+
|
|
224
|
+
**Example:**
|
|
225
|
+
```python
|
|
226
|
+
# Seaborn theme
|
|
227
|
+
p.theme({**sns.axes_style('whitegrid'), **sns.plotting_context('talk')})
|
|
228
|
+
|
|
229
|
+
# Custom rcParams
|
|
230
|
+
p.theme({'axes.facecolor': 'white', 'axes.grid': True})
|
|
231
|
+
|
|
232
|
+
# Individual parameters
|
|
233
|
+
p.theme(axes_facecolor='white', font_scale=1.2)
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
#### layout()
|
|
237
|
+
|
|
238
|
+
Configure subplot layout.
|
|
239
|
+
|
|
240
|
+
```python
|
|
241
|
+
Plot.layout(size=None, extent=None, engine=None)
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
**Parameters:**
|
|
245
|
+
- `size` - (width, height) in inches
|
|
246
|
+
- `extent` - (left, bottom, right, top) for subplots
|
|
247
|
+
- `engine` - "tight", "constrained", or None
|
|
248
|
+
|
|
249
|
+
**Example:**
|
|
250
|
+
```python
|
|
251
|
+
p.layout(size=(10, 6), engine='constrained')
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
#### share()
|
|
255
|
+
|
|
256
|
+
Control axis sharing across facets.
|
|
257
|
+
|
|
258
|
+
```python
|
|
259
|
+
Plot.share(x=None, y=None)
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
**Parameters:**
|
|
263
|
+
- `x` - Share x-axis: True, False, or "col"/"row"
|
|
264
|
+
- `y` - Share y-axis: True, False, or "col"/"row"
|
|
265
|
+
|
|
266
|
+
**Example:**
|
|
267
|
+
```python
|
|
268
|
+
p.share(x=True, y=False) # Share x across all, independent y
|
|
269
|
+
p.share(x='col') # Share x within columns only
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
#### on()
|
|
273
|
+
|
|
274
|
+
Plot on existing matplotlib figure or axes.
|
|
275
|
+
|
|
276
|
+
```python
|
|
277
|
+
Plot.on(target)
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
**Parameters:**
|
|
281
|
+
- `target` - matplotlib Figure or Axes object
|
|
282
|
+
|
|
283
|
+
**Example:**
|
|
284
|
+
```python
|
|
285
|
+
import matplotlib.pyplot as plt
|
|
286
|
+
|
|
287
|
+
fig, axes = plt.subplots(2, 2, figsize=(10, 10))
|
|
288
|
+
so.Plot(df, x='x', y='y').add(so.Dot()).on(axes[0, 0])
|
|
289
|
+
so.Plot(df, x='x', y='z').add(so.Line()).on(axes[0, 1])
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
#### show()
|
|
293
|
+
|
|
294
|
+
Render and display the plot.
|
|
295
|
+
|
|
296
|
+
```python
|
|
297
|
+
Plot.show(**kwargs)
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
**Parameters:** Passed to `matplotlib.pyplot.show()`
|
|
301
|
+
|
|
302
|
+
#### save()
|
|
303
|
+
|
|
304
|
+
Save the plot to file.
|
|
305
|
+
|
|
306
|
+
```python
|
|
307
|
+
Plot.save(filename, **kwargs)
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
**Parameters:**
|
|
311
|
+
- `filename` - Output filename
|
|
312
|
+
- `**kwargs` - Passed to `matplotlib.figure.Figure.savefig()`
|
|
313
|
+
|
|
314
|
+
**Example:**
|
|
315
|
+
```python
|
|
316
|
+
p.save('plot.png', dpi=300, bbox_inches='tight')
|
|
317
|
+
p.save('plot.pdf')
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
## Mark Objects
|
|
321
|
+
|
|
322
|
+
Marks define how data is visually represented.
|
|
323
|
+
|
|
324
|
+
### Dot
|
|
325
|
+
|
|
326
|
+
Points/markers for individual observations.
|
|
327
|
+
|
|
328
|
+
```python
|
|
329
|
+
so.Dot(artist_kws=None, **kwargs)
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
**Properties:**
|
|
333
|
+
- `color` - Fill color
|
|
334
|
+
- `alpha` - Transparency
|
|
335
|
+
- `fillcolor` - Alternate color property
|
|
336
|
+
- `fillalpha` - Alternate alpha property
|
|
337
|
+
- `edgecolor` - Edge color
|
|
338
|
+
- `edgealpha` - Edge transparency
|
|
339
|
+
- `edgewidth` - Edge line width
|
|
340
|
+
- `marker` - Marker style
|
|
341
|
+
- `pointsize` - Marker size
|
|
342
|
+
- `stroke` - Edge width
|
|
343
|
+
|
|
344
|
+
**Example:**
|
|
345
|
+
```python
|
|
346
|
+
so.Plot(df, x='x', y='y').add(so.Dot(color='blue', pointsize=10))
|
|
347
|
+
so.Plot(df, x='x', y='y', color='cat').add(so.Dot(alpha=0.5))
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### Line
|
|
351
|
+
|
|
352
|
+
Lines connecting observations.
|
|
353
|
+
|
|
354
|
+
```python
|
|
355
|
+
so.Line(artist_kws=None, **kwargs)
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
**Properties:**
|
|
359
|
+
- `color` - Line color
|
|
360
|
+
- `alpha` - Transparency
|
|
361
|
+
- `linewidth` - Line width
|
|
362
|
+
- `linestyle` - Line style ("-", "--", "-.", ":")
|
|
363
|
+
- `marker` - Marker at data points
|
|
364
|
+
- `pointsize` - Marker size
|
|
365
|
+
- `edgecolor` - Marker edge color
|
|
366
|
+
- `edgewidth` - Marker edge width
|
|
367
|
+
|
|
368
|
+
**Example:**
|
|
369
|
+
```python
|
|
370
|
+
so.Plot(df, x='x', y='y').add(so.Line())
|
|
371
|
+
so.Plot(df, x='x', y='y', color='cat').add(so.Line(linewidth=2))
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### Path
|
|
375
|
+
|
|
376
|
+
Like Line but connects points in data order (not sorted by x).
|
|
377
|
+
|
|
378
|
+
```python
|
|
379
|
+
so.Path(artist_kws=None, **kwargs)
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
Properties same as `Line`.
|
|
383
|
+
|
|
384
|
+
**Example:**
|
|
385
|
+
```python
|
|
386
|
+
# For trajectories, loops, etc.
|
|
387
|
+
so.Plot(trajectory_df, x='x', y='y').add(so.Path())
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### Bar
|
|
391
|
+
|
|
392
|
+
Rectangular bars.
|
|
393
|
+
|
|
394
|
+
```python
|
|
395
|
+
so.Bar(artist_kws=None, **kwargs)
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
**Properties:**
|
|
399
|
+
- `color` - Fill color
|
|
400
|
+
- `alpha` - Transparency
|
|
401
|
+
- `edgecolor` - Edge color
|
|
402
|
+
- `edgealpha` - Edge transparency
|
|
403
|
+
- `edgewidth` - Edge line width
|
|
404
|
+
- `width` - Bar width (data units)
|
|
405
|
+
|
|
406
|
+
**Example:**
|
|
407
|
+
```python
|
|
408
|
+
so.Plot(df, x='category', y='value').add(so.Bar())
|
|
409
|
+
so.Plot(df, x='x', y='y').add(so.Bar(color='#1f77b4', width=0.5))
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
### Bars
|
|
413
|
+
|
|
414
|
+
Multiple bars (for aggregated data with error bars).
|
|
415
|
+
|
|
416
|
+
```python
|
|
417
|
+
so.Bars(artist_kws=None, **kwargs)
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
Properties same as `Bar`. Used with `Agg()` or `Est()` stats.
|
|
421
|
+
|
|
422
|
+
**Example:**
|
|
423
|
+
```python
|
|
424
|
+
so.Plot(df, x='category', y='value').add(so.Bars(), so.Agg())
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### Area
|
|
428
|
+
|
|
429
|
+
Filled area between line and baseline.
|
|
430
|
+
|
|
431
|
+
```python
|
|
432
|
+
so.Area(artist_kws=None, **kwargs)
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
**Properties:**
|
|
436
|
+
- `color` - Fill color
|
|
437
|
+
- `alpha` - Transparency
|
|
438
|
+
- `edgecolor` - Edge color
|
|
439
|
+
- `edgealpha` - Edge transparency
|
|
440
|
+
- `edgewidth` - Edge line width
|
|
441
|
+
- `baseline` - Baseline value (default: 0)
|
|
442
|
+
|
|
443
|
+
**Example:**
|
|
444
|
+
```python
|
|
445
|
+
so.Plot(df, x='x', y='y').add(so.Area(alpha=0.3))
|
|
446
|
+
so.Plot(df, x='x', y='y', color='cat').add(so.Area())
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
### Band
|
|
450
|
+
|
|
451
|
+
Filled band between two lines (for ranges/intervals).
|
|
452
|
+
|
|
453
|
+
```python
|
|
454
|
+
so.Band(artist_kws=None, **kwargs)
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
Properties same as `Area`. Requires `ymin` and `ymax` mappings or used with `Est()` stat.
|
|
458
|
+
|
|
459
|
+
**Example:**
|
|
460
|
+
```python
|
|
461
|
+
so.Plot(df, x='x', ymin='lower', ymax='upper').add(so.Band())
|
|
462
|
+
so.Plot(df, x='x', y='y').add(so.Band(), so.Est())
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
### Range
|
|
466
|
+
|
|
467
|
+
Line with markers at endpoints (for ranges).
|
|
468
|
+
|
|
469
|
+
```python
|
|
470
|
+
so.Range(artist_kws=None, **kwargs)
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
**Properties:**
|
|
474
|
+
- `color` - Line and marker color
|
|
475
|
+
- `alpha` - Transparency
|
|
476
|
+
- `linewidth` - Line width
|
|
477
|
+
- `marker` - Marker style at endpoints
|
|
478
|
+
- `pointsize` - Marker size
|
|
479
|
+
- `edgewidth` - Marker edge width
|
|
480
|
+
|
|
481
|
+
**Example:**
|
|
482
|
+
```python
|
|
483
|
+
so.Plot(df, x='x', y='y').add(so.Range(), so.Est())
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
### Dash
|
|
487
|
+
|
|
488
|
+
Short horizontal/vertical lines (for distribution marks).
|
|
489
|
+
|
|
490
|
+
```python
|
|
491
|
+
so.Dash(artist_kws=None, **kwargs)
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
**Properties:**
|
|
495
|
+
- `color` - Line color
|
|
496
|
+
- `alpha` - Transparency
|
|
497
|
+
- `linewidth` - Line width
|
|
498
|
+
- `width` - Dash length (data units)
|
|
499
|
+
|
|
500
|
+
**Example:**
|
|
501
|
+
```python
|
|
502
|
+
so.Plot(df, x='category', y='value').add(so.Dash())
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
### Text
|
|
506
|
+
|
|
507
|
+
Text labels at data points.
|
|
508
|
+
|
|
509
|
+
```python
|
|
510
|
+
so.Text(artist_kws=None, **kwargs)
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
**Properties:**
|
|
514
|
+
- `color` - Text color
|
|
515
|
+
- `alpha` - Transparency
|
|
516
|
+
- `fontsize` - Font size
|
|
517
|
+
- `halign` - Horizontal alignment: "left", "center", "right"
|
|
518
|
+
- `valign` - Vertical alignment: "bottom", "center", "top"
|
|
519
|
+
- `offset` - (x, y) offset from point
|
|
520
|
+
|
|
521
|
+
Requires `text` mapping.
|
|
522
|
+
|
|
523
|
+
**Example:**
|
|
524
|
+
```python
|
|
525
|
+
so.Plot(df, x='x', y='y', text='label').add(so.Text())
|
|
526
|
+
so.Plot(df, x='x', y='y', text='value').add(so.Text(fontsize=10, offset=(0, 5)))
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
## Stat Objects
|
|
530
|
+
|
|
531
|
+
Stats transform data before rendering. Compose with marks in `.add()`.
|
|
532
|
+
|
|
533
|
+
### Agg
|
|
534
|
+
|
|
535
|
+
Aggregate observations by group.
|
|
536
|
+
|
|
537
|
+
```python
|
|
538
|
+
so.Agg(func='mean')
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
**Parameters:**
|
|
542
|
+
- `func` - Aggregation function: "mean", "median", "sum", "min", "max", "count", or callable
|
|
543
|
+
|
|
544
|
+
**Example:**
|
|
545
|
+
```python
|
|
546
|
+
so.Plot(df, x='category', y='value').add(so.Bar(), so.Agg('mean'))
|
|
547
|
+
so.Plot(df, x='x', y='y', color='group').add(so.Line(), so.Agg('median'))
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
### Est
|
|
551
|
+
|
|
552
|
+
Estimate central tendency with error intervals.
|
|
553
|
+
|
|
554
|
+
```python
|
|
555
|
+
so.Est(func='mean', errorbar=('ci', 95), n_boot=1000, seed=None)
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
**Parameters:**
|
|
559
|
+
- `func` - Estimator: "mean", "median", "sum", or callable
|
|
560
|
+
- `errorbar` - Error representation:
|
|
561
|
+
- `("ci", level)` - Confidence interval via bootstrap
|
|
562
|
+
- `("pi", level)` - Percentile interval
|
|
563
|
+
- `("se", scale)` - Standard error scaled by factor
|
|
564
|
+
- `"sd"` - Standard deviation
|
|
565
|
+
- `n_boot` - Bootstrap iterations
|
|
566
|
+
- `seed` - Random seed
|
|
567
|
+
|
|
568
|
+
**Example:**
|
|
569
|
+
```python
|
|
570
|
+
so.Plot(df, x='category', y='value').add(so.Bar(), so.Est())
|
|
571
|
+
so.Plot(df, x='x', y='y').add(so.Line(), so.Est(errorbar='sd'))
|
|
572
|
+
so.Plot(df, x='x', y='y').add(so.Line(), so.Est(errorbar=('ci', 95)))
|
|
573
|
+
so.Plot(df, x='x', y='y').add(so.Band(), so.Est())
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
### Hist
|
|
577
|
+
|
|
578
|
+
Bin observations and count/aggregate.
|
|
579
|
+
|
|
580
|
+
```python
|
|
581
|
+
so.Hist(stat='count', bins='auto', binwidth=None, binrange=None,
|
|
582
|
+
common_norm=True, common_bins=True, cumulative=False)
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
**Parameters:**
|
|
586
|
+
- `stat` - "count", "density", "probability", "percent", "frequency"
|
|
587
|
+
- `bins` - Number of bins, bin method, or edges
|
|
588
|
+
- `binwidth` - Width of bins
|
|
589
|
+
- `binrange` - (min, max) range for binning
|
|
590
|
+
- `common_norm` - Normalize across groups together
|
|
591
|
+
- `common_bins` - Use same bins for all groups
|
|
592
|
+
- `cumulative` - Cumulative histogram
|
|
593
|
+
|
|
594
|
+
**Example:**
|
|
595
|
+
```python
|
|
596
|
+
so.Plot(df, x='value').add(so.Bars(), so.Hist())
|
|
597
|
+
so.Plot(df, x='value').add(so.Bars(), so.Hist(bins=20, stat='density'))
|
|
598
|
+
so.Plot(df, x='value', color='group').add(so.Area(), so.Hist(cumulative=True))
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
### KDE
|
|
602
|
+
|
|
603
|
+
Kernel density estimate.
|
|
604
|
+
|
|
605
|
+
```python
|
|
606
|
+
so.KDE(bw_method='scott', bw_adjust=1, gridsize=200,
|
|
607
|
+
cut=3, cumulative=False)
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
**Parameters:**
|
|
611
|
+
- `bw_method` - Bandwidth method: "scott", "silverman", or scalar
|
|
612
|
+
- `bw_adjust` - Bandwidth multiplier
|
|
613
|
+
- `gridsize` - Resolution of density curve
|
|
614
|
+
- `cut` - Extension beyond data range (in bandwidth units)
|
|
615
|
+
- `cumulative` - Cumulative density
|
|
616
|
+
|
|
617
|
+
**Example:**
|
|
618
|
+
```python
|
|
619
|
+
so.Plot(df, x='value').add(so.Line(), so.KDE())
|
|
620
|
+
so.Plot(df, x='value', color='group').add(so.Area(alpha=0.5), so.KDE())
|
|
621
|
+
so.Plot(df, x='x', y='y').add(so.Line(), so.KDE(bw_adjust=0.5))
|
|
622
|
+
```
|
|
623
|
+
|
|
624
|
+
### Count
|
|
625
|
+
|
|
626
|
+
Count observations per group.
|
|
627
|
+
|
|
628
|
+
```python
|
|
629
|
+
so.Count()
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
**Example:**
|
|
633
|
+
```python
|
|
634
|
+
so.Plot(df, x='category').add(so.Bar(), so.Count())
|
|
635
|
+
```
|
|
636
|
+
|
|
637
|
+
### PolyFit
|
|
638
|
+
|
|
639
|
+
Polynomial regression fit.
|
|
640
|
+
|
|
641
|
+
```python
|
|
642
|
+
so.PolyFit(order=1)
|
|
643
|
+
```
|
|
644
|
+
|
|
645
|
+
**Parameters:**
|
|
646
|
+
- `order` - Polynomial order (1 = linear, 2 = quadratic, etc.)
|
|
647
|
+
|
|
648
|
+
**Example:**
|
|
649
|
+
```python
|
|
650
|
+
so.Plot(df, x='x', y='y').add(so.Dot())
|
|
651
|
+
so.Plot(df, x='x', y='y').add(so.Line(), so.PolyFit(order=2))
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
### Perc
|
|
655
|
+
|
|
656
|
+
Compute percentiles.
|
|
657
|
+
|
|
658
|
+
```python
|
|
659
|
+
so.Perc(k=5, method='linear')
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
**Parameters:**
|
|
663
|
+
- `k` - Number of percentile intervals
|
|
664
|
+
- `method` - Interpolation method
|
|
665
|
+
|
|
666
|
+
**Example:**
|
|
667
|
+
```python
|
|
668
|
+
so.Plot(df, x='x', y='y').add(so.Band(), so.Perc())
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
## Move Objects
|
|
672
|
+
|
|
673
|
+
Moves adjust positions to resolve overlaps or create specific layouts.
|
|
674
|
+
|
|
675
|
+
### Dodge
|
|
676
|
+
|
|
677
|
+
Shift positions side-by-side.
|
|
678
|
+
|
|
679
|
+
```python
|
|
680
|
+
so.Dodge(empty='keep', gap=0)
|
|
681
|
+
```
|
|
682
|
+
|
|
683
|
+
**Parameters:**
|
|
684
|
+
- `empty` - How to handle empty groups: "keep", "drop", "fill"
|
|
685
|
+
- `gap` - Gap between dodged elements (proportion)
|
|
686
|
+
|
|
687
|
+
**Example:**
|
|
688
|
+
```python
|
|
689
|
+
so.Plot(df, x='category', y='value', color='group').add(so.Bar(), so.Dodge())
|
|
690
|
+
so.Plot(df, x='cat', y='val', color='hue').add(so.Dot(), so.Dodge(gap=0.1))
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
### Stack
|
|
694
|
+
|
|
695
|
+
Stack marks vertically.
|
|
696
|
+
|
|
697
|
+
```python
|
|
698
|
+
so.Stack()
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
**Example:**
|
|
702
|
+
```python
|
|
703
|
+
so.Plot(df, x='x', y='y', color='category').add(so.Bar(), so.Stack())
|
|
704
|
+
so.Plot(df, x='x', y='y', color='group').add(so.Area(), so.Stack())
|
|
705
|
+
```
|
|
706
|
+
|
|
707
|
+
### Jitter
|
|
708
|
+
|
|
709
|
+
Add random noise to positions.
|
|
710
|
+
|
|
711
|
+
```python
|
|
712
|
+
so.Jitter(width=None, height=None, seed=None)
|
|
713
|
+
```
|
|
714
|
+
|
|
715
|
+
**Parameters:**
|
|
716
|
+
- `width` - Jitter in x direction (data units or proportion)
|
|
717
|
+
- `height` - Jitter in y direction
|
|
718
|
+
- `seed` - Random seed
|
|
719
|
+
|
|
720
|
+
**Example:**
|
|
721
|
+
```python
|
|
722
|
+
so.Plot(df, x='category', y='value').add(so.Dot(), so.Jitter())
|
|
723
|
+
so.Plot(df, x='cat', y='val').add(so.Dot(), so.Jitter(width=0.2))
|
|
724
|
+
```
|
|
725
|
+
|
|
726
|
+
### Shift
|
|
727
|
+
|
|
728
|
+
Shift positions by constant amount.
|
|
729
|
+
|
|
730
|
+
```python
|
|
731
|
+
so.Shift(x=0, y=0)
|
|
732
|
+
```
|
|
733
|
+
|
|
734
|
+
**Parameters:**
|
|
735
|
+
- `x` - Shift in x direction (data units)
|
|
736
|
+
- `y` - Shift in y direction
|
|
737
|
+
|
|
738
|
+
**Example:**
|
|
739
|
+
```python
|
|
740
|
+
so.Plot(df, x='x', y='y').add(so.Dot(), so.Shift(x=1))
|
|
741
|
+
```
|
|
742
|
+
|
|
743
|
+
### Norm
|
|
744
|
+
|
|
745
|
+
Normalize values.
|
|
746
|
+
|
|
747
|
+
```python
|
|
748
|
+
so.Norm(func='max', where=None, by=None, percent=False)
|
|
749
|
+
```
|
|
750
|
+
|
|
751
|
+
**Parameters:**
|
|
752
|
+
- `func` - Normalization: "max", "sum", "area", or callable
|
|
753
|
+
- `where` - Apply to which axis: "x", "y", or None
|
|
754
|
+
- `by` - Grouping variables for separate normalization
|
|
755
|
+
- `percent` - Show as percentage
|
|
756
|
+
|
|
757
|
+
**Example:**
|
|
758
|
+
```python
|
|
759
|
+
so.Plot(df, x='x', y='y', color='group').add(so.Area(), so.Norm())
|
|
760
|
+
```
|
|
761
|
+
|
|
762
|
+
## Scale Objects
|
|
763
|
+
|
|
764
|
+
Scales control how data values map to visual properties.
|
|
765
|
+
|
|
766
|
+
### Continuous
|
|
767
|
+
|
|
768
|
+
For numeric data.
|
|
769
|
+
|
|
770
|
+
```python
|
|
771
|
+
so.Continuous(values=None, norm=None, trans=None)
|
|
772
|
+
```
|
|
773
|
+
|
|
774
|
+
**Methods:**
|
|
775
|
+
- `.tick(at=None, every=None, between=None, minor=None)` - Configure ticks
|
|
776
|
+
- `.label(like=None, base=None, unit=None)` - Format labels
|
|
777
|
+
|
|
778
|
+
**Parameters:**
|
|
779
|
+
- `values` - Explicit value range (min, max)
|
|
780
|
+
- `norm` - Normalization function
|
|
781
|
+
- `trans` - Transformation: "log", "sqrt", "symlog", "logit", "pow10", or callable
|
|
782
|
+
|
|
783
|
+
**Example:**
|
|
784
|
+
```python
|
|
785
|
+
p.scale(
|
|
786
|
+
x=so.Continuous().tick(every=10),
|
|
787
|
+
y=so.Continuous(trans='log').tick(at=[1, 10, 100]),
|
|
788
|
+
color=so.Continuous(values=(0, 1)),
|
|
789
|
+
pointsize=(5, 20) # Shorthand for Continuous range
|
|
790
|
+
)
|
|
791
|
+
```
|
|
792
|
+
|
|
793
|
+
### Nominal
|
|
794
|
+
|
|
795
|
+
For categorical data.
|
|
796
|
+
|
|
797
|
+
```python
|
|
798
|
+
so.Nominal(values=None, order=None)
|
|
799
|
+
```
|
|
800
|
+
|
|
801
|
+
**Parameters:**
|
|
802
|
+
- `values` - Explicit values (e.g., colors, markers)
|
|
803
|
+
- `order` - Category order
|
|
804
|
+
|
|
805
|
+
**Example:**
|
|
806
|
+
```python
|
|
807
|
+
p.scale(
|
|
808
|
+
color=so.Nominal(['#1f77b4', '#ff7f0e', '#2ca02c']),
|
|
809
|
+
marker=so.Nominal(['o', 's', '^']),
|
|
810
|
+
x=so.Nominal(order=['Low', 'Medium', 'High'])
|
|
811
|
+
)
|
|
812
|
+
```
|
|
813
|
+
|
|
814
|
+
### Temporal
|
|
815
|
+
|
|
816
|
+
For datetime data.
|
|
817
|
+
|
|
818
|
+
```python
|
|
819
|
+
so.Temporal(values=None, trans=None)
|
|
820
|
+
```
|
|
821
|
+
|
|
822
|
+
**Methods:**
|
|
823
|
+
- `.tick(every=None, between=None)` - Configure ticks
|
|
824
|
+
- `.label(concise=False)` - Format labels
|
|
825
|
+
|
|
826
|
+
**Example:**
|
|
827
|
+
```python
|
|
828
|
+
p.scale(x=so.Temporal().tick(every=('month', 1)).label(concise=True))
|
|
829
|
+
```
|
|
830
|
+
|
|
831
|
+
## Complete Examples
|
|
832
|
+
|
|
833
|
+
### Layered Plot with Statistics
|
|
834
|
+
|
|
835
|
+
```python
|
|
836
|
+
(
|
|
837
|
+
so.Plot(df, x='total_bill', y='tip', color='time')
|
|
838
|
+
.add(so.Dot(), alpha=0.5)
|
|
839
|
+
.add(so.Line(), so.PolyFit(order=2))
|
|
840
|
+
.scale(color=so.Nominal(['#1f77b4', '#ff7f0e']))
|
|
841
|
+
.label(x='Total Bill ($)', y='Tip ($)', title='Tips Analysis')
|
|
842
|
+
.theme({**sns.axes_style('whitegrid')})
|
|
843
|
+
)
|
|
844
|
+
```
|
|
845
|
+
|
|
846
|
+
### Faceted Distribution
|
|
847
|
+
|
|
848
|
+
```python
|
|
849
|
+
(
|
|
850
|
+
so.Plot(df, x='measurement', color='treatment')
|
|
851
|
+
.facet(col='timepoint', wrap=3)
|
|
852
|
+
.add(so.Area(alpha=0.5), so.KDE())
|
|
853
|
+
.add(so.Dot(), so.Jitter(width=0.1), y=0)
|
|
854
|
+
.scale(x=so.Continuous().tick(every=5))
|
|
855
|
+
.label(x='Measurement (units)', title='Treatment Effects Over Time')
|
|
856
|
+
.share(x=True, y=False)
|
|
857
|
+
)
|
|
858
|
+
```
|
|
859
|
+
|
|
860
|
+
### Grouped Bar Chart
|
|
861
|
+
|
|
862
|
+
```python
|
|
863
|
+
(
|
|
864
|
+
so.Plot(df, x='category', y='value', color='group')
|
|
865
|
+
.add(so.Bar(), so.Agg('mean'), so.Dodge())
|
|
866
|
+
.add(so.Range(), so.Est(errorbar='se'), so.Dodge())
|
|
867
|
+
.scale(color=so.Nominal(order=['A', 'B', 'C']))
|
|
868
|
+
.label(y='Mean Value', title='Comparison by Category and Group')
|
|
869
|
+
)
|
|
870
|
+
```
|
|
871
|
+
|
|
872
|
+
### Complex Multi-Layer
|
|
873
|
+
|
|
874
|
+
```python
|
|
875
|
+
(
|
|
876
|
+
so.Plot(df, x='date', y='value')
|
|
877
|
+
.add(so.Dot(color='gray', pointsize=3), alpha=0.3)
|
|
878
|
+
.add(so.Line(color='blue', linewidth=2), so.Agg('mean'))
|
|
879
|
+
.add(so.Band(color='blue', alpha=0.2), so.Est(errorbar=('ci', 95)))
|
|
880
|
+
.facet(col='sensor', row='location')
|
|
881
|
+
.scale(
|
|
882
|
+
x=so.Temporal().label(concise=True),
|
|
883
|
+
y=so.Continuous().tick(every=10)
|
|
884
|
+
)
|
|
885
|
+
.label(
|
|
886
|
+
x='Date',
|
|
887
|
+
y='Measurement',
|
|
888
|
+
title='Sensor Measurements by Location'
|
|
889
|
+
)
|
|
890
|
+
.layout(size=(12, 8), engine='constrained')
|
|
891
|
+
)
|
|
892
|
+
```
|
|
893
|
+
|
|
894
|
+
## Migration from Function Interface
|
|
895
|
+
|
|
896
|
+
### Scatter Plot
|
|
897
|
+
|
|
898
|
+
**Function interface:**
|
|
899
|
+
```python
|
|
900
|
+
sns.scatterplot(data=df, x='x', y='y', hue='category', size='value')
|
|
901
|
+
```
|
|
902
|
+
|
|
903
|
+
**Objects interface:**
|
|
904
|
+
```python
|
|
905
|
+
so.Plot(df, x='x', y='y', color='category', pointsize='value').add(so.Dot())
|
|
906
|
+
```
|
|
907
|
+
|
|
908
|
+
### Line Plot with CI
|
|
909
|
+
|
|
910
|
+
**Function interface:**
|
|
911
|
+
```python
|
|
912
|
+
sns.lineplot(data=df, x='time', y='measurement', hue='group', errorbar='ci')
|
|
913
|
+
```
|
|
914
|
+
|
|
915
|
+
**Objects interface:**
|
|
916
|
+
```python
|
|
917
|
+
(
|
|
918
|
+
so.Plot(df, x='time', y='measurement', color='group')
|
|
919
|
+
.add(so.Line(), so.Est())
|
|
920
|
+
)
|
|
921
|
+
```
|
|
922
|
+
|
|
923
|
+
### Histogram
|
|
924
|
+
|
|
925
|
+
**Function interface:**
|
|
926
|
+
```python
|
|
927
|
+
sns.histplot(data=df, x='value', hue='category', stat='density', kde=True)
|
|
928
|
+
```
|
|
929
|
+
|
|
930
|
+
**Objects interface:**
|
|
931
|
+
```python
|
|
932
|
+
(
|
|
933
|
+
so.Plot(df, x='value', color='category')
|
|
934
|
+
.add(so.Bars(), so.Hist(stat='density'))
|
|
935
|
+
.add(so.Line(), so.KDE())
|
|
936
|
+
)
|
|
937
|
+
```
|
|
938
|
+
|
|
939
|
+
### Bar Plot with Error Bars
|
|
940
|
+
|
|
941
|
+
**Function interface:**
|
|
942
|
+
```python
|
|
943
|
+
sns.barplot(data=df, x='category', y='value', hue='group', errorbar='ci')
|
|
944
|
+
```
|
|
945
|
+
|
|
946
|
+
**Objects interface:**
|
|
947
|
+
```python
|
|
948
|
+
(
|
|
949
|
+
so.Plot(df, x='category', y='value', color='group')
|
|
950
|
+
.add(so.Bar(), so.Agg(), so.Dodge())
|
|
951
|
+
.add(so.Range(), so.Est(), so.Dodge())
|
|
952
|
+
)
|
|
953
|
+
```
|
|
954
|
+
|
|
955
|
+
## Tips and Best Practices
|
|
956
|
+
|
|
957
|
+
1. **Method chaining**: Each method returns a new Plot object, enabling fluent chaining
|
|
958
|
+
2. **Layer composition**: Combine multiple `.add()` calls to overlay different marks
|
|
959
|
+
3. **Transform order**: In `.add(mark, stat, move)`, stat applies first, then move
|
|
960
|
+
4. **Variable priority**: Layer-specific mappings override Plot-level mappings
|
|
961
|
+
5. **Scale shortcuts**: Use tuples for simple ranges: `color=(min, max)` vs full Scale object
|
|
962
|
+
6. **Jupyter rendering**: Plots render automatically when returned; use `.show()` otherwise
|
|
963
|
+
7. **Saving**: Use `.save()` rather than `plt.savefig()` for proper handling
|
|
964
|
+
8. **Matplotlib access**: Use `.on(ax)` to integrate with matplotlib figures
|