{"id":32191800,"url":"https://github.com/generateme/cljplot","last_synced_at":"2025-10-22T01:51:01.975Z","repository":{"id":59847906,"uuid":"178257312","full_name":"generateme/cljplot","owner":"generateme","description":"JVM Clojure charting library","archived":false,"fork":false,"pushed_at":"2023-04-26T13:46:39.000Z","size":72361,"stargazers_count":152,"open_issues_count":12,"forks_count":7,"subscribers_count":10,"default_branch":"master","last_synced_at":"2024-08-07T01:47:58.312Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"epl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/generateme.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}},"created_at":"2019-03-28T18:03:45.000Z","updated_at":"2024-05-18T16:42:54.000Z","dependencies_parsed_at":"2022-09-23T08:23:06.151Z","dependency_job_id":null,"html_url":"https://github.com/generateme/cljplot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/generateme/cljplot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/generateme%2Fcljplot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/generateme%2Fcljplot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/generateme%2Fcljplot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/generateme%2Fcljplot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/generateme","download_url":"https://codeload.github.com/generateme/cljplot/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/generateme%2Fcljplot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280365582,"owners_count":26318385,"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-10-21T02:00:06.614Z","response_time":58,"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":"2025-10-22T01:51:00.153Z","updated_at":"2025-10-22T01:51:01.967Z","avatar_url":"https://github.com/generateme.png","language":"Clojure","funding_links":[],"categories":["数据科学"],"sub_categories":["语音合成"],"readme":"# CLJPLOT\r\n\r\n\u003e **_INFO (2020-08-17):_** I'm preparing new version based on tech.ml.dataset as data input which is going to solve issues with data processing and labels. Also rethinking the way of better management of data dimensions and their representation through trellis/colors/axes etc. It happens very slowly, but happens. Stay tuned.\r\n\r\n\u003cp align=\"center\"\u003e\r\n  \u003cimg src=\"results/examples/logo.jpg\" alt=\"logo\"/\u003e\r\n\u003c/p\u003e\r\n\r\n# clojure2d.charts\r\n\r\nTHIS IS WIP/POC\r\nA \"no web-based\" pure JVM Clojure library for 2d charts, inspired by D3, Vega and R (ggplot2/lattice/facet).\r\n\r\n## Current version\r\n\r\n`[cljplot \"0.0.3\"]`\r\n\r\n## NOTE about API\r\n\r\nPlease note that current way of creating charts is very low level. All of this nasty steps will be finally hidden from user perspective.\r\n\r\n## Usage\r\n\r\nCurrently there are no easy to use functions nor data DSL (help needed here). Still everything is done manually.\r\n\r\nSee `sketches` folder for examples\r\n\r\n### Examples\r\n\r\n\u003cp align=\"center\"\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/examples/gp-predict.jpg\" height=\"100\"/\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/examples/vector-field.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/examples/heatmap-matrix-ann.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/examples/complex.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/examples/field.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/examples/lag.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n\u003c/p\u003e\r\n\r\n\u003cp align=\"center\"\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/lattice/figure_14.4.jpg\" height=\"100\"/\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/lattice/figure_14.3.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/lattice/figure_3.6.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/lattice/figure_3.4.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/lattice/figure_1.1.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/lattice/figure_2.7.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/lattice/figure_2.9.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/lattice/figure_4.3.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/lattice/figure_3.14.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n\u003c/p\u003e\r\n\r\n\u003cp align=\"center\"\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/vega/circle-natural-disasters.jpg\" height=\"100\"/\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/vega/trail-color.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/vega/stacked-area-stream.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/vega/color-with-shape.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/vega/connected-scatterplot.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/vega/stacked-bar-weather.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/vega/table-binned-heatmap.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/vega/circle-bubble-hi.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n  \u003cspan\u003e\u003cimg src=\"results/vega/nulls.jpg\" height=\"100\"\u003e\u003c/span\u003e\r\n\u003c/p\u003e\r\n\r\n\r\n## Short term plan\r\n\r\n* More chart types (`+` - easier; `-` - harder):\r\n    - ~~heatmaps (various grids)~~ (`+`)\r\n    - ~~point clouds (log and linear rendering)~~ (`+`)\r\n    - ~~contours (`-`), flow fields (`+`)~~\r\n    - categorical x categorical plots (scatter plot matrix  (`+`)\r\n    - ~~stacked area/stream~~\r\n    - parallel / hive (`+`/`-`)\r\n    - radial charts, like pie (`+`), sunburst (`-`), radial tree (`-`)\r\n    - arc(?) (`+`)\r\n    - markers: line, text, etc...\r\n* ~~Labels~~ / ~~legends~~ / gradients / palettes\r\n* Higher level API\r\n    - single function for each chart type (easier)\r\n    - faceting/lattice (harder)\r\n* cleaning configuration mess\r\n\r\n## Long term plan / wishlist\r\n\r\n* Enable other renderers (create dispatch layer)\r\n* Data DSL(?)\r\n* geo maps\r\n* elements of UpSet\r\n* signal processing / time series (partially done)\r\n* annotations\r\n* grid of charts / subplots (with independent axes)\r\n* kind of interactivity\r\n* chart styles (now everything is blueish)\r\n\r\n## Known issues\r\n\r\n* ~~grid, axes sometimes don't match (1-2px shift). This is due to rounding errors and axes rotations~~\r\n* still ~~no labels~~, ~~no legends~~\r\n* overlapping ticks (add some heuristics to use smaller fonts and smaller number of ticks)\r\n* chart configuration needs to be reviewed, still not consistent\r\n* no higher level functions/macros\r\n* no DSL for data manipulation, and no plan to make it (task for others!)\r\n* deep nesting is really nasty to configure and for data preparation :/ (lattice of stacked horizontally stacked bars...)\r\n* merging nested extents is not working correctly (in lattice)\r\n* true is, there are some labels for lattice, quick and dirty\r\n* do not layer over histograms (bins mismatch)...\r\n* still something is wrong with time scale\r\n\r\n## Why?\r\n\r\nSo, why another chart library, when you can use _insert any name here_\r\nIn my case, the main obstacle was the ability to save hundreds of charts without using any display (web or java frame).\r\nOne can say: jfreechart! I can say: try to generate heatmaps... Every library I've found had some issues or produces ugly result or was web based or was notebook based or...\r\nSo I fell into the lisp curse and I'm writing my own.\r\n\r\n## Contributing\r\n\r\nYES! A lot of things to do:\r\n* documentation\r\n* configuration\r\n* new charts\r\n* testing, test-cases\r\n\r\nLet's chat about this: https://clojurians.zulipchat.com/#narrow/stream/197967-cljplot-dev\r\n\r\n## Marching squares algorithm\r\n\r\nSource: https://udel.edu/~mm/code/marchingSquares/\r\n\r\n## License\r\n\r\nCopyright © 2019-2023\r\n\r\nDistributed under the Eclipse Public License either version 1.0 or (at\r\nyour option) any later version.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgenerateme%2Fcljplot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgenerateme%2Fcljplot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgenerateme%2Fcljplot/lists"}