{"id":18510039,"url":"https://github.com/lfex/plottah","last_synced_at":"2026-03-19T04:51:12.594Z","repository":{"id":179712769,"uuid":"663990900","full_name":"lfex/plottah","owner":"lfex","description":"An Erlang/LFE gnuplot process server","archived":false,"fork":false,"pushed_at":"2023-07-12T02:55:55.000Z","size":3330,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"release/0.3.x","last_synced_at":"2025-07-28T12:11:49.339Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"LFE","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lfex.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}},"created_at":"2023-07-08T16:11:47.000Z","updated_at":"2024-05-16T19:40:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"aad3e738-34af-4db2-8fa7-7c6ede286017","html_url":"https://github.com/lfex/plottah","commit_stats":null,"previous_names":["lfex/plottah"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/lfex/plottah","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfex%2Fplottah","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfex%2Fplottah/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfex%2Fplottah/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfex%2Fplottah/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lfex","download_url":"https://codeload.github.com/lfex/plottah/tar.gz/refs/heads/release/0.3.x","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lfex%2Fplottah/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268394064,"owners_count":24243350,"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-08-02T02:00:12.353Z","response_time":74,"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":[],"created_at":"2024-11-06T15:20:20.039Z","updated_at":"2026-03-19T04:51:12.566Z","avatar_url":"https://github.com/lfex.png","language":"LFE","funding_links":[],"categories":[],"sub_categories":[],"readme":"# plottah\n\n[![Build Status][gh-actions-badge]][gh-actions]\n[![LFE Versions][lfe badge]][lfe]\n[![Erlang Versions][erlang badge]][versions]\n[![Tags][github tags badge]][github tags]\n\n[![Project Logo][logo]][logo-large]\n\n*An Erlang/LFE gnuplot process server*\n\n##### Table of Contents\n\n* [About](#about-)\n* [Build](#build-)\n* [REPL](#repl-)\n* [Tests](#tests-)\n* [Examples](#examples-)\n* [Usage](#usage-)\n* [License](#license-)\n\n## About [\u0026#x219F;](#table-of-contents)\n\nThis library aims to provide a means for programmers of the BEAM VM to use gnuplot in their native language. To accomplish this, it runs `gnuplot` in shell mode in a managed OS process. The `erlexec` library is used for two-way communications (via `stdin` and combined `stdout`/`stderr`).\n\nThis library is in the early stages of development, so to-date only a few functions are provided in the API. See the \"Usage\" section below for example usage (also the `./examples` directory). For now, the API is a very thin layer over the gnuplot shell, but in the future a DSL may be provided for a more functional programming language experience.\n\n## Build [\u0026#x219F;](#table-of-contents)\n\nThis project depends upon:\n\n* Erlang 21+\n* `rebar3`\n* `gnuplot` being installed on the system\n\nNote that development was done against the gnuplot installed by Homebrew (gnuplot 5.4 patchlevel 8) on macos (11.6).\n\nWith the dependencies in place, the library may be compiled with the following:\n\n```shell\nrebar3 compile\n```\n\n## REPL [\u0026#x219F;](#table-of-contents)\n\nTo start an interactive session in the LFE REPL:\n\n```shell\nmake repl\n```\n\nand then:\n\n```lisp\n(plottah:start)\n```\n\nThis runs the `gnuplot` shell in an OS process and allows for two-way communication. See below on how to communicate with the process.\n\n## Tests [\u0026#x219F;](#table-of-contents)\n\n```shell\nrebar3 as test check\n```\n\n## Examples [\u0026#x219F;](#table-of-contents)\n\nShow the list of examples:\n\n```shell\nrebar3 as examples list\n```\n\nRun a specific example:\n\n```shell\nrebar3 as examples lfe run -- 3d-hidden\n```\n\n## Usage [\u0026#x219F;](#table-of-contents)\n\nFirst, be sure you've compiled the project using the instructions above!\n\nThen start the REPL (see above), including starting up `plottah`. You can then run code like the following in the REPL (example taken from [here](https://gnuplot.sourceforge.net/demo_5.2/hidden.3.gnu)):\n\n```lisp\n(defun opts ()\n  '(#(title \"4D data (3D Heat Map)\\\\nIndependent value color-mapped onto 3D surface\")\n    #(size \"1, 0.9\")\n    #(origin \"0, 0.05\")\n    #(#(title offset) \"character 0, 1, 0 font '' norotate\")\n    #(style \"increment default\")\n    #(format \"cb '%4.1f'\")\n    #(view \"49, 28, 1, 1.48\")\n    #(samples \"25, 25\")\n    #(isosamples \"50, 50\")\n    #(xyplane \"relative 0\")\n    #(cbtics \"border in scale 0,0 mirror norotate autojustify\")\n    #(urange \"[ 5 : 35 ] noreverse nowriteback\")\n    #(vrange \"[ 5 : 35 ] noreverse nowriteback\")\n    #(xrange \"[ * : * ] noreverse nowriteback\")\n    #(x2range \"[ * : * ] noreverse nowriteback\")\n    #(yrange \"[ * : * ] noreverse nowriteback\")\n    #(y2range \"[ * : * ] noreverse nowriteback\")\n    #(zrange \"[ * : * ] noreverse nowriteback\")\n    #(cbrange \"[ * : * ] noreverse nowriteback\")\n    #(rrange \"[ * : * ] noreverse nowriteback\")\n    #(pm3d \"implicit at s\")\n    #(colorbox \"user\")\n    #(colorbox \"vertical origin screen 0.9, 0.2, 0 size screen 0.03, 0.6, 0 front noinvert noborder\")\n    #(#(x label) \"x\")\n    #(#(xlabel offset) \"character 3, 0, 0 font '' textcolor lt -1 norotate\")\n    #(#(y label) \"y\")\n    #(#(ylabel offset) \"character -5, 0, 0 font '' textcolor lt -1 rotate\")\n    #(#(z label) \"z\")\n    #(#(zlabel offset) \"character 2, 0, 0 font '' textcolor lt -1 norotate\")))\n\n(defun funcs ()\n  '(#(\"sinc(x,y)\" \"sin(sqrt((x-20.)**2+(y-20.)**2))/sqrt((x-20.)**2+(y-20.)**2)\")\n    #(\"Z(x,y)\" \"100. * (sinc(x,y) + 1.5)\")\n    #(\"color(x,y)\" \"10. * (1.1 + sin((x-20.)/5.)*cos((y-20.)/10.))\")))\n\n(defun args ()\n  \"'++' using 1:2:(Z($1,$2)):(color($1,$2)) with pm3d title ''\")\n\n(plottah:splot (args) (options) (funcs))\n```\n\nWith that last, a window should pop up showing the following:\n\n[![3D graph screenshot][screenshot]][screenshot]\n\n## License [\u0026#x219F;](#table-of-contents)\n\nApache License, Version 2.0\n\nCopyright © 2023, Duncan McGreggor \u003coubiwann@gmail.com\u003e.\n\n[//]: ---Named-Links---\n\n[logo]: priv/images/plottah-x250.jpg\n[logo-large]: priv/images/plottah-x1600.jpg\n[screenshot]: priv/images/screenshot.png\n[gh-actions-badge]: https://github.com/lfex/plottah/workflows/ci%2Fcd/badge.svg\n[gh-actions]: https://github.com/lfex/plottah/actions\n[lfe]: https://github.com/lfe/lfe\n[lfe badge]: https://img.shields.io/badge/lfe-2.1+-blue.svg\n[erlang badge]: https://img.shields.io/badge/erlang-21%20to%2025-blue.svg\n[versions]: https://github.com/lfex/plottah/blob/main/.travis.yml\n[github tags]: https://github.com/lfex/plottah/tags\n[github tags badge]: https://img.shields.io/github/tag/lfex/plottah.svg\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flfex%2Fplottah","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flfex%2Fplottah","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flfex%2Fplottah/lists"}