{"id":51016361,"url":"https://github.com/jcmgray/robodraw","last_synced_at":"2026-06-21T11:01:53.432Z","repository":{"id":358157210,"uuid":"1240275276","full_name":"jcmgray/robodraw","owner":"jcmgray","description":"An ergonomic and programmatic drawing library for python.","archived":false,"fork":false,"pushed_at":"2026-05-18T21:52:58.000Z","size":5036,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-16T02:40:11.553Z","etag":null,"topics":["diagrams","drawing","matplotlib"],"latest_commit_sha":null,"homepage":"https://robodraw.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jcmgray.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-16T00:30:22.000Z","updated_at":"2026-05-19T08:06:18.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jcmgray/robodraw","commit_stats":null,"previous_names":["jcmgray/robodraw"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/jcmgray/robodraw","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcmgray%2Frobodraw","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcmgray%2Frobodraw/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcmgray%2Frobodraw/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcmgray%2Frobodraw/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jcmgray","download_url":"https://codeload.github.com/jcmgray/robodraw/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcmgray%2Frobodraw/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34607126,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["diagrams","drawing","matplotlib"],"created_at":"2026-06-21T11:01:52.218Z","updated_at":"2026-06-21T11:01:53.419Z","avatar_url":"https://github.com/jcmgray.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"https://raw.githubusercontent.com/jcmgray/robodraw/main/docs/_static/robodraw-header.png\" alt=\"robodraw logo\" width=\"640\"\u003e\n\n[![tests](https://github.com/jcmgray/robodraw/actions/workflows/tests.yml/badge.svg)](https://github.com/jcmgray/robodraw/actions/workflows/tests.yml)\n[![codecov](https://codecov.io/gh/jcmgray/robodraw/branch/main/graph/badge.svg?token=Q5evNiuT9S)](https://codecov.io/gh/jcmgray/robodraw)\n[![Docs](https://readthedocs.org/projects/robodraw/badge/?version=latest)](https://robodraw.readthedocs.io)\n[![PyPI](https://img.shields.io/pypi/v/robodraw?color=teal)](https://pypi.org/project/robodraw/)\n[![Anaconda-Server Badge](https://anaconda.org/conda-forge/robodraw/badges/version.svg)](https://anaconda.org/conda-forge/robodraw)\n[![Pixi Badge](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/prefix-dev/pixi/main/assets/badge/v0.json)](https://pixi.sh)\n\n`robodraw` is an ergonomic and programmatic drawing library for python. It is a\nwrapper around `matplotlib` that provides a more intuitive way to specifically\ncreate *drawings and diagrams*, including in pseudo-3d. It provides the backend\nfor the drawing functionality in [`quimb`](https://quimb.readthedocs.io) and\n[`cotengra`](https://cotengra.readthedocs.io).\n\nSome useful features include:\n\n- no boilerplate to get a simple drawing.\n- plot limits automatically expand to fit all drawn elements.\n- style presets: reuse style across elements.\n- diagram primitives like `zigzag`, `curve` (draw a smooth line through an\n  arbitrary set of points exactly), and `patch_around` (draw a smooth shape\n  highlighting an arbitrary set of points).\n- pseudo-3d drawing, with automatic perspective and occlusion handling.\n- squared paper grid to help you with placement.\n- output or use existing matplotlib figure and axis.\n- basic colors tools\n- ... and more!\n\nA quick example:\n\n```python\nimport robodraw\n\nd = robodraw.Drawing(\n    presets={\n        \"node\": {\"radius\": 0.2, \"linewidth\": 0.5},\n        \"edge\": {\"color\": (0, 0.3, 1, .8), \"width\": 0.04, \"shorten\": 0.2}\n    },\n    projection=(25, 25),\n)\n\ncenter = (0, 0, 0)\ncorners = [(1, 1, 1), (1, -1, -1), (-1, 1, -1), (-1, -1, 1)]\n\n# nodes\nfor c in corners:\n    color = robodraw.hash_to_color(str(c))\n    d.circle(c, preset='node', color=color)\n\n# center\nd.circle(center, preset='node', radius=0.15, color=\"black\")\nd.text(center, \"$\\\\psi$\", color=\"yellow\")\n\n# edges to center\nfor c in corners:\n    d.zigzag(c, center, preset=\"edge\")\n\nd.patch_around(corners, radius=0.5)\nd.grid3d()\n```\n\n\u003cimg src=\"https://raw.githubusercontent.com/jcmgray/robodraw/main/docs/_static/robodraw-simple-example.png\" alt=\"robodraw simple example\" width=\"480\"\u003e\n\nThe **full documentation** can be found at:\n[robodraw.readthedocs.io](https://robodraw.readthedocs.io). Contributions of\nany sort are very welcome - please see the\n[contributing guide](https://github.com/jcmgray/robodraw/blob/main/.github/CONTRIBUTING.md).\n[Issues](https://github.com/jcmgray/robodraw/issues) and\n[pull requests](https://github.com/jcmgray/robodraw/pulls) are hosted on\n[github](https://github.com/jcmgray/robodraw). For other questions and\nsuggestions, please use the\n[discussions page](https://github.com/jcmgray/robodraw/discussions).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcmgray%2Frobodraw","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjcmgray%2Frobodraw","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcmgray%2Frobodraw/lists"}