{"id":13532263,"url":"https://github.com/nico-robert/ticklecharts","last_synced_at":"2026-03-11T01:32:37.496Z","repository":{"id":116513661,"uuid":"457091733","full_name":"nico-robert/ticklecharts","owner":"nico-robert","description":"Tcl wrapper around Apache ECharts.","archived":false,"fork":false,"pushed_at":"2025-05-18T09:37:27.000Z","size":36856,"stargazers_count":11,"open_issues_count":0,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-05-30T12:16:53.414Z","etag":null,"topics":["echarts","tcl"],"latest_commit_sha":null,"homepage":"","language":"Tcl","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/nico-robert.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-08T20:24:55.000Z","updated_at":"2025-05-18T09:36:42.000Z","dependencies_parsed_at":"2024-02-25T09:23:11.294Z","dependency_job_id":"2c157eea-10b0-43b1-8d21-0bd391578ba7","html_url":"https://github.com/nico-robert/ticklecharts","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/nico-robert/ticklecharts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nico-robert%2Fticklecharts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nico-robert%2Fticklecharts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nico-robert%2Fticklecharts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nico-robert%2Fticklecharts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nico-robert","download_url":"https://codeload.github.com/nico-robert/ticklecharts/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nico-robert%2Fticklecharts/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30366051,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T21:41:54.280Z","status":"ssl_error","status_checked_at":"2026-03-10T21:40:59.357Z","response_time":106,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["echarts","tcl"],"created_at":"2024-08-01T07:01:09.553Z","updated_at":"2026-03-11T01:32:37.470Z","avatar_url":"https://github.com/nico-robert.png","language":"Tcl","funding_links":[],"categories":["Languages"],"sub_categories":["Tcl"],"readme":"ticklEcharts\n==========================\nTcl wrapper around [Apache ECharts](https://echarts.apache.org/en/index.html).\n\n![Photo gallery](images/all.png)\n\nDependencies :\n-------------------------\n\n`huddle` package from [Tcllib](https://core.tcl-lang.org/tcllib/doc/trunk/embedded/index.md)\n\nUsage :\n-------------------------\n\n```tcl\npackage require ticklecharts\n\nset chart [ticklecharts::chart new]\n\n$chart Xaxis -data [list {Mon Tue Wed Thu Fri Sat Sun}]\n$chart Yaxis\n$chart Add \"lineSeries\" -data [list {150 230 224 218 135 147 260}]\n\n$chart Render\n```\n![Basic line chart](images/line_basic_chart.png)\n```tcl\n# Initializes a new 2D Chart Class\nset chart [ticklecharts::chart new]\n```\n##### Argument available :\n| args     | Description | Default value\n| ------   | ------      | ------\n| _-theme_ | Theme name  | `custom` (possible values: vintage, westeros, wonderland, dark)\n```tcl\n# Adds the X axis with its values.\n$chart Xaxis -data [list {Mon Tue Wed Thu Fri Sat Sun}]\n\n# Adds the Y axis.\n$chart Yaxis\n\n# Adds data for line series.\n$chart Add \"lineSeries\" -data [list {150 230 224 218 135 147 260}]\n```\n\u003e [!IMPORTANT]  \n\u003e  `-data` _property_ should be a list of list `[list {...}]`\n```tcl\n# Export chart to HTML file\n$chart Render\n```\n##### Arguments available :\n| args           | Description             | Default values\n| ------         | ------                  | ------\n| _-title_       | HTML title page         | `\"ticklEcharts !!!\"`\n| _-width_       | Container's width       | `\"900px\"`\n| _-height_      | Container's height      | `\"500px\"`\n| _-renderer_    | canvas or svg           | `\"canvas\"`\n| _-jschartvar_  | Variable name chart     | `chart_[uuid]`\n| _-divid_       | Name container's ID     | `id_[uuid]`\n| _-outfile_     | Full path HTML file     | `'./render.html'`\n| _-jsecharts_   | Script echarts.js       | `https://cdn.jsdelivr.net/...`\n| _-jsvar_       | Variable name option    | `option_[uuid]`\n| _-script_      | Extra JS script         | `'null'` (see `Add script` section)\n| _-class_       | Specify container's CSS | `\"chart-container\"`\n| _-style_       | Inline style            | `\"width:'-width'; height:'-height'\";`\n| _-template_    | File or string template | `'file'` (template.html)\n\n```tcl\n# Example properties :\n$chart Render -width \"1200px\" -height \"800px\" -renderer \"svg\"\n```\nData series :\n-------------------------\n`-data` (y values only) : \n```tcl\n# Example for lineseries\n$chart Add \"lineSeries\" -data [list {150 230 224 218 135 147 260}]\n$chart Yaxis\n```\n`-data` (x, y values) : \n```tcl\n# Example for lineseries\n$chart Add \"lineSeries\" -data [list {Mon 150} {Tue 230} {Wed 224} {... ...}]\n# Mon = X value\n# 150 = Y value\n# Please note : X data is not included.\n$chart Xaxis\n$chart Yaxis\n```\n`-dataItem` :\n```tcl\n# Example for lineseries\n# Additional options are valid, see ticklecharts::lineItem in options.tcl\n$chart Add \"lineSeries\" -dataItem {\n    {name \"Mon\" value 150}\n    {name \"Tue\" value 230}\n    {name \"Wed\" value 224}\n    {name \"Thu\" value 218}\n    {name \"Fri\" value 135}\n    {name \"Sat\" value 147}\n    {name \"Sun\" value 260}\n}\n```\n`-dataset` :\n```tcl\nset data(0) {\n    {\"Day\" \"Mon\" \"Tue\" \"Wed\" \"Thu\" \"Fri\" \"Sat\" \"Sun\"}\n    {\"value\" 150 230 224 218 135 147 260}\n}\n\n# Init dataset class.\n# Note : Starting from version '2.6', it is possible \n# to add several 'items' like this :\n# \u003e [list [list source $data(0) sourceHeader \"True\"] [list source $data(1) ...]]]\nset obj [ticklecharts::dataset new [list source $data(0) sourceHeader \"True\"]]\n\n# Add '$obj' to dataset property. \n$chart SetOptions -dataset $obj\n# Add line series.\n$chart Xaxis\n$chart Yaxis\n$chart Add \"lineSeries\" -seriesLayoutBy \"row\"\n```\nUseful methods :\n-------------------------\n\n1. Get default _options_ according to a `key` (name of procedure) :\n```tcl\n# e.g for series :\n$chart getOptions -series lineSeries\n# e.g for axis :\n$chart getOptions -axis X\n# e.g for global options :\n$chart getOptions -globalOptions ; # no value required\n# get all options for 'title' :\n$chart getOptions -option title\n# output :\n id                -minversion 5  -validvalue {}                      -type str|null    -default \"nothing\"\n show              -minversion 5  -validvalue {}                      -type bool        -default \"True\"\n text              -minversion 5  -validvalue {}                      -type str|null    -default \"nothing\"\n link              -minversion 5  -validvalue {}                      -type str|null    -default \"nothing\"\n target            -minversion 5  -validvalue formatTarget            -type str         -default \"blank\"\n textStyle         -minversion 5  -validvalue {}                      -type dict|null\n   color                -minversion 5  -validvalue formatColor          -type str.t|jsfunc|null -default $color\n   fontStyle            -minversion 5  -validvalue formatFontStyle      -type str               -default \"normal\"\n   fontWeight           -minversion 5  -validvalue formatFontWeight     -type str.t|num.t|null  -default $fontWeight\n   fontFamily           -minversion 5  -validvalue {}                   -type str               -default \"sans-serif\"\n   fontSize             -minversion 5  -validvalue {}                   -type num.t|null        -default $fontSize\n   lineHeight           -minversion 5  -validvalue {}                   -type num|null          -default \"nothing\"\n   width                -minversion 5  -validvalue {}                   -type num               -default 100\n   height               -minversion 5  -validvalue {}                   -type num               -default 50\n   textBorderColor      -minversion 5  -validvalue {}                   -type str|null          -default \"null\"\n   textBorderWidth      -minversion 5  -validvalue {}                   -type num               -default 0\n   textBorderType       -minversion 5  -validvalue formatTextBorderType -type str|num|list.n    -default \"solid\"\n   textBorderDashOffset -minversion 5  -validvalue {}                   -type num               -default 0\n   textShadowColor      -minversion 5  -validvalue formatColor          -type str               -default \"transparent\"\n   textShadowBlur       -minversion 5  -validvalue {}                   -type num               -default 0\n   textShadowOffsetX    -minversion 5  -validvalue {}                   -type num               -default 0\n   textShadowOffsetY    -minversion 5  -validvalue {}                   -type num               -default 0\n   overflow             -minversion 5  -validvalue formatOverflow       -type str|null          -default \"null\"\n   ellipsis             -minversion 5  -validvalue {}                   -type str               -default \"...\"\n   # ...\n subtext           -minversion 5  -validvalue {}                      -type str|null    -default \"nothing\"\n sublink           -minversion 5  -validvalue {}                      -type str|null    -default \"nothing\"\n ...\n ...\n# Following options voluntarily deleted.\n```\n2. Delete _series_ by index:\n```tcl\n$chart Add \"lineSeries\" -data [list {1 2 3 4}]\n$chart Add \"barSeries\"  -data [list {5 6 7 8}]\n\n# Delete bar series :\n$chart deleteSeries 1\n```\n3. Gets _json_ data :\n```tcl\n$chart toJSON\n```\n4. Export _chart_ as HTML fragment :\n```tcl\n$chart toHTML ?-template ?...\n```\n5. Add JSON structure:\n```tcl\n$chart AddJSON $struct ?-parent ?... ; # See '# Structure' section\n```\n6. Capture an image:\n```tcl\n$chart SnapShot ?-outfile ?... ; # See '# Image' section\n```\n\nAdd extra JS script, variable, etc. :\n-------------------------\n* **Add a JavaScript function** :\n\nWhen permitted, `ticklecharts::jsfunc` class can insert a function directly in `JSON` data :\n\n```tcl\n# Initializes a new jsfunc Class and insert \n# a 'JS function' as argument :\nset js [ticklecharts::jsfunc new {\n        function (value, index) {\n            return value + ' (C°)';\n        }\n    }\n]\n\n# Add $js variable to 'formatter' property. \n$chart Xaxis -axisLabel [subst {\n    show \"True\"\n    margin 8\n    formatter $js\n    showMinLabel \"null\"\n    # ...\n}]\n$chart toJSON\n```\n* **Output** :\n```js\n\"axisLabel\": {\n  \"show\": true,\n  \"margin\": 8,\n  \"formatter\": function (value, index) {\n    return value + ' (C°)';\n  },\n  \"showMinLabel\": null,\n  // ...\n}\n```\n\u003e [!NOTE]  \n\u003e **formatter** accepts a _javascript function_ most times but in some cases `formatter` supports   \n[string template](https://echarts.apache.org/en/option.html#grid.tooltip.formatter) like this `'{b0}: {c0}\u003cbr /\u003e{b1}: {c1}'`\n\nThere are three ways to do this :\n\n- Encapsulates the string with braces + quotes :\n\u003e {\"{b0}: {c0}\\\u003cbr /\u003e{b1}: {c1}\"}\n- Use ticklecharts::eString _class_ :\n\u003e new estr \"{b0}: {c0}\\\u003cbr /\u003e{b1}: {c1}\"\n- Replaces by special chars : (Deprecated)\n\u003e \"\u003c0123\u003eb0\u003c0125\u003e: \u003c0123\u003ec0\u003c0125\u003e\\\u003cbr /\u003e\u003c0123\u003eb1\u003c0125\u003e: \u003c0123\u003ec1\u003c0125\u003e\"\n\n| Chars         | Map      \n| ------------- | ---------\n| `{`           | \u003c0123\u003e   \n| `}`           | \u003c0125\u003e   \n| `[`           | \u003c091\u003e    \n| `]`           | \u003c093\u003e    \n\n* **Add script, variable etc.** :\n\nCombined with `Render` method and `-script` property, you can add JavaScript elements in the HTML template file.  \n* Depending on where you want to insert them, three optional argument are supported :\n\n  - `-start` : To place your element at the beginning of the file. \n  - `-end` : To place your element at the end of the file. \n  - `-header`: To place your element in the file header.\n\n```tcl\n# Adds a variable at the start:\nset var [ticklecharts::jsfunc new {\n        var maskImage = new Image();\n        maskImage.src = './logo.png';\n    } -start\n]\n\n# Adds a header script:\nset header [ticklecharts::jsfunc new {\n        \u003cscript type=\"text/javascript\" src=\"tcl.js\"\u003e\u003c/script\u003e\n    } -header\n]\n# Note: Inserting a script, variable, etc. in the HTML file is\n# based on a search for a string in the template if this is not found,\n# an error is generated.\n$chart Render -title \"Example jsfunc class\" -script [list [list $var $header]]\n```\n* **Output** :\n```js\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n  \u003chead\u003e\n    \u003cmeta charset=\"UTF-8\"\u003e\n    \u003ctitle\u003eExample jsfunc class\u003c/title\u003e\n    \u003cscript type=\"text/javascript\" src=\"echarts.min.js\"\u003e\u003c/script\u003e\n    \u003c!-- -header \u003cscript\u003e...\u003c/script\u003e --\u003e\n    \u003cscript type=\"text/javascript\" src=\"tcl.js\"\u003e\u003c/script\u003e\n  \u003c/head\u003e\n  \u003cbody\u003e\n    \u003cdiv id=\"main\" class=\"chart-container\" style=\"width:900px; height:500px;\"\u003e\u003c/div\u003e\n    \u003cscript\u003e\n        var chart = echarts.init(document.getElementById('main'), null, {renderer: 'canvas'});\n        // -start script...\n        var maskImage = new Image();\n        maskImage.src = './logo.png';\n        var option = {\n            \"backgroundColor\": \"rgba(0,0,0,0)\",\n            \"color\": [\n              // ...\n            ],\n            \"maskImage\": maskImage,\n            // ...\n        }\n    \u003c/script\u003e\n  \u003c/body\u003e\n\u003c/html\u003e\n```\n\nPerformance :\n-------------------------\nSince version **2**, some _huddle/ehuddle_ procedures can be replaced by functions written in C with help of [critcl](https://andreas-kupries.github.io/critcl/).  \nCritcl package should be available and this command `ticklecharts::eHuddleCritcl` should be set to valid `Tcl_boolean` value.  \nYou may be processing important data and if you want to gain speed, this command can be useful, below how to use it :\n```tcl\npackage require ticklecharts\n\n# Load critcl package\n# Note : A warning message may be displayed on your console\n# if there was a problem compiling or loading critcl package\nticklecharts::eHuddleCritcl True\n\nsource examples/candlestick/candlestick_large_scale.tcl ; # dataCount set to 200,000\n#             | This run (Mac Os Core i7)\n#    pure Tcl | 25354915 microseconds per iteration \n#    critcl   |  6338728 microseconds per iteration (≃4x faster)\n```\n`Note` : _No advantage to use this command with small data._\n\nType substitution  :\n-------------------------\nSince version **3.1**, two new classes have been introduced. They allow string and list values to be substituted.  \nIn some cases, it is difficult to find the type for a variable, since everything is considered to be a string in `Tcl`.  \nThese 2 classes below get around the problem (partly):\n - ticklecharts::eString\n - ticklecharts::eList\n\n_See [line_eList.tcl](examples/line/line_eList.tcl) and `line and bar mixed` demo to know why this class has been implemented for certain cases_.   \n\nSince version **3.2.3** when default type is `list.d` it can be replaced by `list.s` or `list.n` ehuddle type.  \nThis improves performance by avoiding the need to scan the list to find the type of data. By example, the default type   \nfor `Xaxis.data` is `list.d`, this property can be written as follows : \n```tcl\n# Note : If you are sure that the X data is of type 'string', you can replace \n# -data [list {...}] property by :\n$chart Xaxis -data [new elist.s {...}]\n```\nStructure :\n-------------------------\nSince version **3.2.4**, it is now possible to construct your own `JSON`, and a new `eStruct` class has been added   \nfor this purpose. The idea here is to give the user the choice of making their own structure.   \n\n```tcl\n# The keys must be typed (str, struct, bool...).\n# Be careful, input data is not verified, you have control.\nnew estruct myStruct {\n    key1:num    \"number value\"\n    key2:str    \"string value\"\n    key3:list.n \"list of numbers\"\n    key4:bool   \"boolean value\"\n    key5:...    \"...\"\n}\n# Optional argument to 'AddJSON' method: \n# '-parent' (with or without index).\n# With this optional argument, we can add our structure to a specific location.\n$chart AddJSON $myStruct ?-parent ?key1(?index).?key2(?index)\n```\n_See [line_build_your_own_JSON.tcl](examples/line/line_build_your_own_JSON.tcl) for a more detailed example_.  \n\nImage :\n-------------------------\nSince version **3.2.4**, if `Chromium` (web browser)` is installed, it is possible to capture an image \nvia `chrome devtools protocol`. The return type for image is either a `*.(png|svg)` file or data in `base64` format.   \n\n_Dependencies_ : `websocket` package from [Tcllib](https://core.tcl-lang.org/tcllib/doc/trunk/embedded/index.md)   \n\n##### Arguments available :\n| args                 | Description                  | Default values\n| ------               | ------                       | ------\n| _-address_           | Local adress                 | `\"127.0.0.1\"`\n| _-port_              | Port number                  | `8888`\n| _-exe_               | Full path executable         | `\"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\"`\n| _-html_              | Html fragment                | `\"nothing\"`\n| _-renderer_          | base64, png or svg           | `\"png\"`\n| _-outfile_           | Full path file               | `\"./render.(png\\|svg)\"`\n| _-excludecomponents_ | Excluded components          | `\"nothing\"` (List e.g. `['toolbox', 'title', '...']`)\n| _-timeout_           | Time to execute JS function  | `400` (milliseconds)\n\n```tcl\n# Note : Animations must be disabled, which is not the case by default. \n$chart SetOptions -animation \"False\"\n# ...\n$chart SnapShot -timeout 600 -port 8080 ;  # Returns full path '*.png' file\n\n# Example with 'html' fragment on Windows :\n#\n# Export '$chart' as HTML fragment.\nset html [$chart toHTML]\n# Note : A full path should be specified if 'msedge.exe' is not included in 'env(PATH)'.\n$chart SnapShot -exe \"msedge.exe\" -html $html -renderer \"base64\"\n\n# For 'svg' renderer it's important to set the '-renderer' property\n# to 'svg' in 'toHTML' method.\nset html [$chart toHTML -renderer \"svg\"]\n$chart SnapShot -renderer \"svg\" -html $html\n# ...\n```\n\u003e [!NOTE]   \n\u003e - A temporary file is created when the command is executed (This may change in future versions of `ticklEcharts`).   \n\u003e - Method not supported with 'chart3D' class.\n\u003e - Highly unstable, depends on the version of `Chromium` installed.   \n\nGlobal variables :\n-------------------------\n```tcl\npackage require ticklecharts\n\n# Set theme with global variable\n# Or with class : ticklecharts::(Gridlayout|chart|timeline|chart3D) new -theme \"vintage\"\nset ::ticklecharts::theme \"vintage\" ; # default \"custom\" \n\n# Minimum properties:\n# Only write values that are defined in the *.tcl file. (Benefit : performance + minifying your HTML files)\n# Be careful, properties in the *.tcl file must be implicitly marked.\nset ::ticklecharts::minProperties \"True\" ; # default \"False\"\n\n# Output 'render.html' full path to stdout. \nset ::ticklecharts::htmlstdout \"False\" ; # default \"True\"\n\n# Google API Key \n# Note : To use the Google map API 'gmap' a valid key is required.\nset ::ticklecharts::keyGMAPI \"??\" ; # Please replace '??' with your own API key.\n\n# Set versions for js script.\n# Note : Num version (@X.X.X) should be defined in js path. If no pattern matches, the script path is left unchanged.\nset ::ticklecharts::echarts_version \"X.X.X\" ; # Echarts version\nset ::ticklecharts::gl_version      \"X.X.X\" ; # Echarts GL version\nset ::ticklecharts::gmap_version    \"X.X.X\" ; # gmap version\nset ::ticklecharts::wc_version      \"X.X.X\" ; # wordcloud version\n\n # Verify if a URL exists when Echarts version changed.\nset ::ticklecharts::checkURL \"True\" ; # default \"False\"\n```\n_All the above variables can be modified in the `ticklecharts.tcl` file_.\n\nExamples :\n-------------------------\nSee the **[examples](/examples)** folder for all demos (from [Apache Echarts examples](https://echarts.apache.org/examples/en/index.html))\n\n![line and bar mixed](images/line_and_bar_mixed.png)\n```tcl\n# line + bar on same canvas.\npackage require ticklecharts\n\n# Initializes a new 2D Chart Class.\nset chart [ticklecharts::chart new]\n\n# Set options\n$chart SetOptions -tooltip {show True trigger \"axis\" axisPointer {type \"cross\" crossStyle {color \"#999\"}}} \\\n                  -grid {left \"3%\" right \"4%\" bottom \"3%\" containLabel \"True\"} \\\n                  -legend {}\n               \n$chart Xaxis -data [list {\"Mon\" \"Tue\" \"Wed\" \"Thu\" \"Fri\" \"Sat\" \"Sun\"}] \\\n             -axisPointer {type \"shadow\"}\n\n# Encapsulates the string with braces + quotes or use 'ticklecharts::eString'\n# class for 'formatter' property (See '# string template' section).\n$chart Yaxis -name \"Precipitation\" -position \"left\" -min 0 -max 250 -interval 50 \\\n                                   -axisLabel {formatter {\"{value} ml\"}}\n$chart Yaxis -name \"Temperature\"   -position \"right\" -min 0 -max 25  -interval 5 \\\n                                   -axisLabel [list formatter [new estr \"{value} °C\"]]\n\n# Add bars series.\n$chart Add \"barSeries\" -name \"Evaporation\" \\\n                       -data [list {2.0 4.9 7.0 23.2 25.6 76.7 135.6 162.2 32.6 20.0 6.4 3.3}]\n                    \n$chart Add \"barSeries\" -name \"Precipitation\" \\\n                       -data [list {2.6 5.9 9.0 26.4 28.7 70.7 175.6 182.2 48.7 18.8 6.0 2.3}]                    \n\n# Add line series.                  \n$chart Add \"lineSeries\" -name \"Temperature\" \\\n                        -yAxisIndex 1 \\\n                        -data [list {2.0 2.2 3.3 4.5 6.3 10.2 20.3 23.4 23.0 16.5 12.0 6.2}]\n\n# Output\n$chart Render\n```\n![line, bar and pie layout](images/line_bar_pie_layout.png)\n```tcl\n# Demo layout with line, bar and pie charts.\nset data(0) {1 2 3 4 5}\nset data(1) {2 3.6 6 2 10}\n\n# Format label\nset js [ticklecharts::jsfunc new {\n    function (value, index) {\n        return value + ' (C°)';\n    },\n}]\n\nset line [ticklecharts::chart new]\n                  \n$line SetOptions -title   {text \"layout line + bar + pie charts...\"} \\\n                 -tooltip {show \"True\"} \\\n                 -legend {top \"56%\" left \"20%\"}    \n    \n$line Xaxis -data [list $data(0)] -boundaryGap \"False\"\n$line Yaxis\n$line Add \"lineSeries\" -data [list $data(0)] -areaStyle {} -smooth \"True\"\n$line Add \"lineSeries\" -data [list $data(1)] -smooth \"True\"\n\nset bar [ticklecharts::chart new]\n\n$bar SetOptions -legend {top \"2%\" left \"20%\"}\n\n$bar Xaxis -data [list {A B C D E}] \\\n           -axisLabel [list show \"True\" formatter $js]\n$bar Yaxis\n$bar Add \"barSeries\" -data [list {50 6 80 120 30}]\n$bar Add \"barSeries\" -data [list {20 30 50 100 25}]\n\nset pie [ticklecharts::chart new]\n\n$pie SetOptions -legend {top \"6%\" left \"65%\"} \n\n$pie Add \"pieSeries\" -name \"Access From\" -radius [list {\"50%\" \"70%\"}] \\\n                     -labelLine {show \"True\"} \\\n                     -dataItem {\n                        {value 1048 name \"C++\"}\n                        {value 300 name \"Tcl\"}\n                        {value 580 name \"Javascript\"}\n                        {value 484 name \"Python\"}\n                        {value 735 name \"C\"}\n                    }\n\n# Initializes a new 'Gridlayout' Class.\nset layout [ticklecharts::Gridlayout new]\n\n# Arrange the different series on the canvas.\n$layout Add $bar  -bottom \"60%\" -width \"40%\" -left \"5%\"\n$layout Add $line -top    \"60%\" -width \"40%\" -left \"5%\"\n$layout Add $pie  -center [list {75% 50%}]\n\n$layout Render\n```\n#### Currently chart and options supported are :\n- **Global options :**\n- [x] title\n- [x] legend\n- [x] grid\n- [x] grid3D\n- [x] xaxis\n- [x] xaxis3D\n- [x] yaxis\n- [x] yaxis3D\n- [x] zaxis3D\n- [x] polar\n- [x] radiusAxis\n- [x] angleAxis\n- [x] radar\n- [x] dataZoom\n- [x] visualMap\n- [x] tooltip\n- [x] axisPointer\n- [x] toolbox\n- [x] brush\n- [x] geo\n- [x] parallel\n- [x] parallelAxis\n- [x] singleAxis\n- [x] timeline\n- [x] graphic\n- [x] calendar\n- [x] dataset\n- [x] aria\n- [x] globe\n- **Series :**\n- [x] line\n- [x] line3D\n- [x] lines3D\n- [x] bar\n- [x] bar3D\n- [x] pie\n- [x] scatter\n- [x] scatter3D\n- [x] effectScatter\n- [x] radar\n- [x] tree\n- [x] treemap\n- [x] sunburst\n- [x] boxplot\n- [x] candlestick\n- [x] heatmap\n- [x] map\n- [x] parallel\n- [X] lines\n- [x] graph\n- [x] sankey\n- [x] surface (3D)\n- [x] funnel\n- [x] gauge\n- [x] pictorialBar\n- [x] themeRiver\n- [ ] custom (see _note_ below)\n- [x] wordCloud\n\n\u003e [!NOTE]  \n\u003e _custom_ series contains a lot of _Javascript_ codes, I don’t think it’s interesting to write it in this package.  \n\u003e If you are interested, please report to the github issue tracker.\n\nLicense :\n-------------------------\n**ticklEcharts** is covered under the terms of the [MIT](LICENSE) license.\n\nChange log :\n-------------------------\nSee detailed [changes](CHANGELOG.md) for each release.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnico-robert%2Fticklecharts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnico-robert%2Fticklecharts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnico-robert%2Fticklecharts/lists"}