{"id":13993937,"url":"https://github.com/phaseportrait/phaseportrait","last_synced_at":"2025-07-22T18:32:48.141Z","repository":{"id":41305225,"uuid":"361290988","full_name":"phaseportrait/phaseportrait","owner":"phaseportrait","description":"A simple way to do 2D and 3D phase portraits.","archived":false,"fork":false,"pushed_at":"2024-09-18T11:13:18.000Z","size":21527,"stargazers_count":36,"open_issues_count":1,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-11-29T15:50:38.253Z","etag":null,"topics":["3d-trajectory-visualization","cobweb-plot","logistic-maps","phase-diagram","phase-portrait","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phaseportrait.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing.md","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}},"created_at":"2021-04-24T23:54:00.000Z","updated_at":"2024-11-04T11:57:10.000Z","dependencies_parsed_at":"2024-01-18T04:51:52.500Z","dependency_job_id":"e1de08b1-0b02-43e2-bac3-c182ae20830a","html_url":"https://github.com/phaseportrait/phaseportrait","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/phaseportrait/phaseportrait","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phaseportrait%2Fphaseportrait","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phaseportrait%2Fphaseportrait/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phaseportrait%2Fphaseportrait/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phaseportrait%2Fphaseportrait/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phaseportrait","download_url":"https://codeload.github.com/phaseportrait/phaseportrait/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phaseportrait%2Fphaseportrait/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266552498,"owners_count":23947174,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"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":["3d-trajectory-visualization","cobweb-plot","logistic-maps","phase-diagram","phase-portrait","python"],"created_at":"2024-08-09T14:02:38.015Z","updated_at":"2025-07-22T18:32:43.115Z","avatar_url":"https://github.com/phaseportrait.png","language":"Python","readme":"[![PyPI Downloads](https://img.shields.io/pypi/dm/phaseportrait.svg?label=downloads)](https://pypi.org/project/phaseportrait/)\n[![PyPI Version](https://img.shields.io/pypi/v/phaseportrait?)](https://pypi.org/project/phaseportrait/)\n\n![Commit activity](https://img.shields.io/github/commit-activity/m/phaseportrait/phaseportrait)\n[![License](https://img.shields.io/pypi/l/phaseportrait)](LICENSE)\n[![Build](https://img.shields.io/github/actions/workflow/status/phaseportrait/phaseportrait/ci.yml)](https://github.com/phaseportrait/phaseportrait/actions)\n\n[![Python Version](https://img.shields.io/pypi/pyversions/phaseportrait)](https://pypi.org/project/phaseportrait/)\n[![Wheel](https://img.shields.io/pypi/wheel/phaseportrait)](https://pypi.org/project/phaseportrait/)\n\n\u003cbr\u003e\u003c/br\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n\u003ca href=\"https://phaseportrait.github.io/\"\u003e\n\u003cimg src=\"https://github.com/phaseportrait/phaseportrait/raw/master/docs/img/duckduck.png\" width=40%\u003e\n\u003c/img\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/phaseportrait/phaseportrait-gui\"\u003e\n\u003cimg src=\"https://github.com/phaseportrait/phaseportrait/raw/master/docs/img/duckduck_son.png\" width=30%\u003e\n\u003c/a\u003e\n\n\u003cbr\u003e\u003c/br\u003e\n\n\u003ca href=\"https://phaseportrait.github.io/\"\u003e\n\u003cimg src=https://img.shields.io/github/deployments/phaseportrait/phaseportrait/github-pages?label=Documentation\u003e\n\u003c/a\u003e\n\n\u003c/div\u003e\n\n\u003cbr\u003e\u003c/br\u003e\n\n```py\nfrom matplotlib import pyplot\nimport numpy\n\nimport phaseportrait\n\ndef pendulum(θ, dθ):\n    return dθ, - numpy.sin(θ)\n\nSimplePendulum = phaseportrait.PhasePortrait2D(pendulum, [-9, 9], Title='Simple pendulum', xlabel=r\"$\\Theta$\", ylabel=r\"$\\dot{\\Theta}$\")\nSimplePendulum.plot()\n\npyplot.show()\n```\n\n\u003cdiv align=\"center\"\u003e\n\u003ca href=\"https://phaseportrait.github.io/reference/legacy/phaseportrait2d_examples/\"\u003e\n\u003cimg src=\"https://github.com/phaseportrait/phaseportrait/raw/master/docs/imgs/index/pendulum_example.png\" width=49.45%\u003e\u003cimg src=\"https://github.com/phaseportrait/phaseportrait/raw/master/docs/imgs/index/damped_pendulum_example.png\" width=50%\u003e\n\u003c/a\u003e\n\n\u003ca href=\"https://phaseportrait.github.io/reference/legacy/phaseportrait3d/\"\u003e\n\u003cimg src=\"https://github.com/phaseportrait/phaseportrait/raw/master/docs/imgs/pp3d_examples/example.png\"\u003e\n\u003c/a\u003e\n\n\n\u003ca href=\"https://phaseportrait.github.io/reference/legacy/trajectories_examples/\"\u003e\n\u003cimg src=\"https://github.com/phaseportrait/phaseportrait/raw/master/docs/imgs/trj_examples/Figure_7.png\"\u003e\n\u003c/a\u003e\n\n\n\n\n\n\u003ca href=\"https://phaseportrait.github.io/reference/legacy/mapsandcobweb_examples/\"\u003e\n\u003cimg src=\"https://github.com/phaseportrait/phaseportrait/raw/master/docs/imgs/index/map_example_code.png\"\u003e\n\u003c/a\u003e.\n\n\u003c/div\u003e\n\n\n# Documentation\n\nTo check out [*phaseportrait*'s documentation](https://phaseportrait.github.io/), view some examples and read more about it, check our website or try our [Graphical User Interface](https://github.com/phaseportrait/phaseportrait-gui)!\n\n\n\n# Installation\n**Installing via pip:**\n\nPhaseportrait releases are available as wheel packages for macOS, Windows and Linux on PyPI. Install it using pip:\n```\n$ pip install phaseportrait\n```\n\n**Installing from source:**\n\nOpen a terminal on desired route and type the following:\n```\n$ git clone https://github.com/phaseportrait/phaseportrait\n```\n**Manual installation**\n\nVisit [phase-portrait](https://github.com/phaseportrait/phaseportrait) webpage on GitHub. Click on green button saying *Code*, and download it in zip format.\nSave and unzip on desired directory.\n\n\n# What's this?\nThe idea behind this project was to create a simple way to make phase portraits in 2D and 3D in Python, as we couldn't find something similar on the internet, so we got down to work. (Update: found [jmoy/plotdf](https://github.com/jmoy/plotdf), offers similar 2D phase plots but it is very limited).\n\nEventually, we did some work on bifurcations, 1D maps and chaos in 3D trayectories.\n\nThis idea came while taking a course in non linear dynamics and chaos, during the 3rd year of physics degree, brought by our desire of visualizing things and programming.\n\n\n\nWe want to state that we are self-taught into making this kind of stuff, and we've tried to make things as *professionally* as possible, any comments about improving our work are welcome!\n\n\u003c!-- ## **Disclaimer:**\n\n**Today's date (July 2021), we've decided to cease our work on this project (for the moment, as we have to move on other things). Therefore, this is the 'final' version of the project, there are no more features incoming. We've tried to leave the code documentated and with good organisation in case someone wants to carry on with some idea! Cheers** --\u003e\n\n# Authors\n\n- Víctor Loras Herrero (vhloras@gmail.com)\n- Unai Lería Fortea (unaileria@gmail.com)\n\n\n# Contributing\nThis proyect is open-source, everyone can download, use and contribute. To do that, several options are offered:\n\n* Fork the project, add a new feature / improve the existing ones and pull a request via GitHub.\n* Contact us on our emails:\n    * [vhloras@gmail.com](mailto:vhloras@gmail.com)\n    * [unaileria@gmail.com](mailto:unaileria@gmail.com)\n","funding_links":[],"categories":["Python"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphaseportrait%2Fphaseportrait","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphaseportrait%2Fphaseportrait","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphaseportrait%2Fphaseportrait/lists"}