{"id":32954987,"url":"https://github.com/clojurewerkz/envision","last_synced_at":"2026-01-10T18:53:33.160Z","repository":{"id":15761201,"uuid":"18500021","full_name":"clojurewerkz/envision","owner":"clojurewerkz","description":"Clojure Data Visualisation library, based on Statistiker and D3","archived":false,"fork":false,"pushed_at":"2018-02-13T17:33:53.000Z","size":879,"stargazers_count":78,"open_issues_count":1,"forks_count":3,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-05-12T14:31:45.702Z","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":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/clojurewerkz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-04-06T21:45:06.000Z","updated_at":"2021-12-29T22:56:55.000Z","dependencies_parsed_at":"2022-09-24T04:02:07.000Z","dependency_job_id":null,"html_url":"https://github.com/clojurewerkz/envision","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/clojurewerkz/envision","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clojurewerkz%2Fenvision","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clojurewerkz%2Fenvision/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clojurewerkz%2Fenvision/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clojurewerkz%2Fenvision/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/clojurewerkz","download_url":"https://codeload.github.com/clojurewerkz/envision/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clojurewerkz%2Fenvision/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284145006,"owners_count":26954846,"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-11-13T02:00:06.582Z","response_time":61,"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-11-12T22:00:41.096Z","updated_at":"2025-11-13T03:00:54.845Z","avatar_url":"https://github.com/clojurewerkz.png","language":"Clojure","funding_links":[],"categories":["Clojure"],"sub_categories":["Tools","[Tools](#tools-1)","Speech Recognition"],"readme":"# Envision\n\nEnvision is a small, easy to use Clojure library for data processing, cleanup\nand visualisation. If you've heard about Incanter, you may see a couple of things\nthat we do in a similar way. \n\nYou can check out a couple of rendered examples [here](http://coffeenco.de/articles/envision/templates/index_file.html).\n\n## Project Maturity\n\nEnvision is a relatively young project. Since it's never meant to be used in hard-\nproduction (e.g. it will never be something user-facing), and is intended to be \nused by people who'd like to yield some information from their data, it should \nbe stable enough from the very early releases.\n\n## Dependency Information (Artifacts)\n\nEnvision artifacts are [released to Clojars](https://clojars.org/clojurewerkz/envision). If you are using Maven, add the following repository\ndefinition to your `pom.xml`:\n\n```xml\n\u003crepository\u003e\n  \u003cid\u003eclojars.org\u003c/id\u003e\n  \u003curl\u003ehttp://clojars.org/repo\u003c/url\u003e\n\u003c/repository\u003e\n```\n\n### The Most Recent Version\n\nWith Leiningen:\n\n``` clojure\n[clojurewerkz/envision \"0.1.0-SNAPSHOT\"]\n```\n\nWith Maven:\n\n``` xml\n\u003cdependency\u003e\n  \u003cgroupId\u003eclojurewerkz\u003c/groupId\u003e\n  \u003cartifactId\u003eenvision\u003c/artifactId\u003e\n  \u003cversion\u003e0.1.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## General Approach\n\nMain idea of this library is to make exploratory analysis more interactive and visual,\nalthough in programmer's way. Envision creates a \"throwaway environment\" every time\nyou, for example, make a line chart. You can modify chart the way you want, change\nall the possible configuration parameters, filter data, add exponents the ways we \nwouldn't be able to program for you.\n\nWe concluded that visual environments are often constraining, and creating an API\nfor every since feature would make it amazingly big and bloated. So we do a bare \nminimum, which is already helpful by default through the API and let you configure\neverything you could've possibly imagined yourself: adding interactivity, combining\ncharts, customizing layouts and so on.\n\n## Usage\n\nMain entrypoint is `clojurewerkz.envision.core/render`. It creates a temporary\ndirectory with all the required dependencies and returns you a path to it. For example,\nlet's generate some data and render a line and area charts:\n\n```clj\n(ns my-ns\n  (:require [clojurewerkz.envision.core         :as envision]\n            [clojurewerkz.envision.chart-config :as cfg]\n\n(envision/render\n   [(envision/histogram 10 (take 100 (distribution/normal-distribution 5 10))\n               {:tick-format \"s\"})\n\n    (envision/linear-regression\n     (flatten (for [i (range 0 20)]\n                [{:year (+ 2000 i)\n                  :income (+ 10 i (rand-int 10))\n                  :series \"series-1\"}\n                 {:year (+ 2000 i)\n                  :income (+ 10 i (rand-int 20))\n                  :series \"series-2\"}]\n                ))\n     :year\n     :income\n     [:year :income :series])\n    (cfg/make-chart-config\n     {:id            \"line\"\n      :headline      \"Line Chart\"\n      :x             \"year\"\n      :y             \"income\"\n      :x-config      {:order-rule \"year\"}\n      :series-type   \"line\"\n      :data          (flatten (for [i (range 0 20)]\n                                [{:year (+ 2000 i)\n                                  :income (+ 10 i (rand-int 10))\n                                  :series \"series-1\"}\n                                 {:year (+ 2000 i)\n                                  :income (+ 10 i (rand-int 20))\n                                  :series \"series-2\"}]\n                                ))\n      :series        \"series\"\n      :interpolation :cardinal\n      })\n    (cfg/make-chart-config\n     {:id            \"area\"\n      :headline      \"Area Chart\"\n      :x             \"year\"\n      :y             \"income\"\n      :x-config      {:order-rule \"year\"}\n      :series-type   \"area\"\n      :data          (into [] (for [i (range 0 20)] {:year (+ 2000 i) :income (+ 10 i (rand-int 10))}))\n      :interpolation :cardinal\n      })\n    ])\n```\n\nFunction will return a tmp folder path, like: \n\n```\n/var/folders/1y/xr7zvp2j035bpq09whg7th5w0000gn/T/envision-1402385765815-3502705781\n```\n\n`cd` into this path and start an HTTP Server on most systems you'd have Python 2.7 installed.\n\n```\npython -m SimpleHTTPServer\n```\n\nAfter that you can point your browser to \n\n```\nhttp://localhost:4000/templates/index.html\n```\n\nIf you don't want to start an HTTP server, or don't have Python installed, just open `templates/index_file.html` \nstatic file in your browser.\n\nYou can check out a couple of example graphs rendered as static files [here](http://coffeenco.de/articles/envision/templates/index_file.html).\n\nWe decided to use an simple HTTP server by default, since sometimes `d3` doesn't like `file://` protocol. However, \nyou can always just open `templates/index_file.html` in your browser and get pretty much same result.\n\n## Chart configuration\n\nIn order to configure chart, you have to specify:\n\n  * `id`, a unique string literal identifying the chart\n  * `data`, sequence of maps, where each map represents an entry to be displayed\n  * `x`, key that should be taken as `x` value for each rendered point\n  * `y`, key that should be taken as `y` value for each rendered point\n  * `series-type`, one of `line`, `bubble`, `area` and `bar` for line charts, Scatterplots, \n     area charts and barcharts, correspondingly     \n\nOptionally, you can specify: \n\n  * `series`, which will split your data, grouping or color-coding charts by given keys\n    keys should be given either as a string or a vector or strings.\n  * `interpolation`, interpolation type to be used in area or line chart, usually you want\n    to use `linear`, `basis`, or `step-after`, but there're more options, which will be\n    mentioned in a corresponding section.\n  * `x-config` specifies a configuration for X axis\n  \n`x-config` options:\n  * `order-rule` specifies a key to sort data points on `x` axis, if it's not `x` \n  * `override-min` overrides minimum for an axis\n  \n## Features:\n\n * Histograms \n * Scatterplots\n * Boxplots\n * Barcharts\n * Regression lines\n * Cluster visualisation\n\n## Supported Clojure Versions\n\nEnvision supports Clojure 1.4+.\n\n## Community\n\nTo subscribe for announcements of releases, important changes and so on, please follow\n[@ClojureWerkz](https://twitter.com/#!/clojurewerkz) on Twitter.\n\n\n## Envision Is a ClojureWerkz Project\n\nEnvision is part of the [group of libraries known as ClojureWerkz](http://clojurewerkz.org), together with\n[Monger](http://clojuremongodb.info), [Elastisch](http://clojureelasticsearch.info), [Langohr](http://clojurerabbitmq.info),\n[Welle](http://clojureriak.info), [Titanium](http://titanium.clojurewerkz.org) and several others.\n\n## Development\n\nEnvision uses [Leiningen 2](https://github.com/technomancy/leiningen/blob/master/doc/TUTORIAL.md). Make\nsure you have it installed and then run tests against all supported Clojure versions using\n\n```\nlein2 all test\n```\n\nThen create a branch and make your changes on it. Once you are done with your changes and all\ntests pass, submit a pull request on Github.\n\n## License\n\nCopyright © 2014 Alex Petrov, Michael S. Klishin \n\nDouble licensed under the Eclipse Public License (the same as Clojure) or the Apache Public License 2.0.\n\n## Credits\n\nDevelopment sponsored by [codecentric AG](http://codecentric.de)\n\n![Development Sponsored](https://www.codecentric.de/wp-content/themes/ccHomepage/img/logo-codecentric.png)\n\n[dimple](http://dimplejs.org/), [d3](http://d3js.org) and [Twitter Bootstrap](http://getbootstrap.com/) sources \nbelong to their respective owners and are lincensed on different terms, not contradicting to library license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclojurewerkz%2Fenvision","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclojurewerkz%2Fenvision","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclojurewerkz%2Fenvision/lists"}