{"id":16348901,"url":"https://github.com/mstksg/interactive-plot","last_synced_at":"2025-08-13T19:14:39.070Z","repository":{"id":62436260,"uuid":"141349913","full_name":"mstksg/interactive-plot","owner":"mstksg","description":"Quick interactive time series terminal plots usable in ghci","archived":false,"fork":false,"pushed_at":"2019-09-10T23:09:31.000Z","size":1263,"stargazers_count":15,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-05-02T00:12:36.386Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://hackage.haskell.org/package/interactive-plot","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mstksg.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-07-17T22:00:35.000Z","updated_at":"2024-02-28T16:35:40.000Z","dependencies_parsed_at":"2022-11-01T21:30:37.510Z","dependency_job_id":null,"html_url":"https://github.com/mstksg/interactive-plot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mstksg%2Finteractive-plot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mstksg%2Finteractive-plot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mstksg%2Finteractive-plot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mstksg%2Finteractive-plot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mstksg","download_url":"https://codeload.github.com/mstksg/interactive-plot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221841511,"owners_count":16890014,"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","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":[],"created_at":"2024-10-11T00:55:41.565Z","updated_at":"2024-10-28T14:38:35.332Z","avatar_url":"https://github.com/mstksg.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"[interactive-plot][]\n====================\n\n[interactive-plot]: https://hackage.haskell.org/package/interactive-plot\n\nQuick time series terminal plotting for data exploration/in ghci.\n\nMost commonly used imports should be available in *Interactive.Plot*.\n\nConstruct a `Series` from scratch using the raw data type, or use one of the\nhandy helpers:\n\n1.  `listSeries`: Create a series from a list or any foldable.\n2.  `tupleSeries`: Create a series from a list of ordered-pair tuples providing\n    x and y locations.\n3.  `funcSeries`: Create a series from a function `Double -\u003e Double`, given a\n    range of `x`s to produce the `y`s.\n\nThen simply \"run\" a list of series (or \"automatic-styled series\") using\n`runPlotAuto` or `runPlot`:\n\n```haskell\nrunPlotAuto\n    :: PlotOpts         -- ^ options (can be 'defaultPlotOpts')\n    -\u003e Maybe String     -- ^ optional title\n    -\u003e [AutoSeries]     -- ^ uninitialized data of serieses\n    -\u003e IO ()\n```\n\n![Static Plots](https://i.imgur.com/SkH1C1j.gif)\n\nThese plots can be zoomed, stretched, scaled, panned interactively after\nlaunch.  If you quit, things resume back to the ghci session (or whatever point\nin the program you launch from).\n\nThere are also options for rudimentary animations:\n\n```haskell\nanimatePlot\n    :: PlotOpts\n    -\u003e Double           -- ^ update rate (frames per second)\n    -\u003e Maybe String     -- ^ title\n    -\u003e [[Series]]       -- ^ list of series data (potentially infinite)\n    -\u003e IO ()\n\nanimatePlotFunc\n    :: PlotOpts\n    -\u003e Maybe String                 -- ^ title\n    -\u003e (Double -\u003e Maybe [Series])   -- ^ function from time to plot. will quit\n                                    -- as soon as 'Nothing' is returned.\n    -\u003e IO ()\n```\n\n![Animated Plots](https://i.imgur.com/37Cq8ET.gif)\n\nTodo\n----\n\n*   Consider being able to use functions directly as a series, instead of\n    converting them into ordered pairs based on a known x series.\n*   2D density plots?\n*   I'm sure usability could always be improved :)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmstksg%2Finteractive-plot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmstksg%2Finteractive-plot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmstksg%2Finteractive-plot/lists"}