{"id":16521927,"url":"https://github.com/ajstarks/dchart","last_synced_at":"2026-02-27T00:32:49.600Z","repository":{"id":57565451,"uuid":"256633742","full_name":"ajstarks/dchart","owner":"ajstarks","description":"dchart makes charts using deck markup","archived":false,"fork":false,"pushed_at":"2026-01-12T21:34:47.000Z","size":54014,"stargazers_count":33,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-13T01:54:36.170Z","etag":null,"topics":["api","chart","deck","go","golang","visualization"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ajstarks.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-04-17T23:52:28.000Z","updated_at":"2026-01-12T21:35:05.000Z","dependencies_parsed_at":"2024-03-29T14:45:27.298Z","dependency_job_id":"ee564118-8269-4e66-8a1c-e7eba2c454e6","html_url":"https://github.com/ajstarks/dchart","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ajstarks/dchart","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajstarks%2Fdchart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajstarks%2Fdchart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajstarks%2Fdchart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajstarks%2Fdchart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ajstarks","download_url":"https://codeload.github.com/ajstarks/dchart/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajstarks%2Fdchart/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29879038,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T23:51:21.483Z","status":"ssl_error","status_checked_at":"2026-02-26T23:50:46.793Z","response_time":89,"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":["api","chart","deck","go","golang","visualization"],"created_at":"2024-10-11T16:58:37.757Z","updated_at":"2026-02-27T00:32:49.564Z","avatar_url":"https://github.com/ajstarks.png","language":"Go","readme":"# dchart - charts for deck\n\nThe dchart package generates ```deck``` markup for various chart types, reading from an ```io.ReadCloser``` and writing to \nan ```io.Writer```.  The chart types and attributes defined by manipulating settings.\n\n## API\n\n\tNewChart(chartype string, top, bottom, left, right float64) =\u003e settings\n\tsettings.[thing] = ...\n\tsettings.GenerateChart(deck *generate.Deck, io.ReadCloser)\n\n\tChart Data\t\t[]ChartData\n\tChart Settings\tSettings\n\n\tRead CSV or TSV \tGetdata(r io.ReadCloser, readcsv bool, cols string) ([]ChartData,float64,float64,string)\n\tRead TSV \t\t\tTSVdata(r io.ReadCloser) ([]ChartData, float64, float64, string)\n\tRead CSV \t\t\tCSVdata(r io.ReadCloser, csvcols string) ([]ChartData, float64, float64, string)\n\tDefne a Chart \t\tNewChart(chartType string, top, bottom, left, right float64) Settings\n\tDefine Standalone \tNewFullChart(chartType string, top, bottom, left, right float64) Settings\n\tMake Chart \t\t\t(s *Settings) GenerateChart(deck *generate.Deck, r io.ReadCloser)\n\tWrite the Chart \t(s *Settings) Write(w io.Writer, r io.ReadCloser)\n\n## Example Client\n\n\tpackage main\n\timport (\n\t\t\"fmt\"\n\t\t\"os\"\n\t\t\"github.com/ajstarks/dchart\"\n\t\t\"github.com/ajstarks/deck/generate\"\n\t)\n\tfunc main() {\n\t\tchart := dchart.NewFullChart(\"bar\", 0, 0, 0, 0)\n\t\tchart.ShowTitle = true\n\t\tchart.XLabelInterval = 2\n\t\tdeck := generate.NewSlides(os.Stdout, 0, 0)\n\t\tdeck.StartDeck()\n\t\tfor _, f := range os.Args[1:] {\n\t\t\tr, err := os.Open(f)\n\t\t\tif err != nil {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"%v\\n\", err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tchart.GenerateChart(deck, r)\n\t\t}\n\t\tdeck.EndDeck()\n\t}\n\ncreates this chart.\n\n![example output](a.png)\n\n\n## Command line client\n\n```cmd/dchart``` is the command line tool for ```dchart```. It generates deck markup for bar, line, scatter, dot, volume, donut, proportional  and fan charts, reading data from the standard input or specified files. Unless specified otherwise, each input source generates a slide in the deck.\n\nThe input data format a tab-separated or CSV formatted list of ```label,data``` pairs where label is an arbitrary string, \nand data is intepreted as a floating point value. \n\nA line beginning with \"#\" is parsed as a title, \nwith the title text beginning after the \"#\".  If a third column is present, it serves as an annotation.\nlabel strings with ```\\n``` characters denote multi-line labels.\n\n\nHere is an example input data file:\n\n\t# GOOG Stock Volume (Millions of Shares)\n\t2017-01-01\t33.1916\n\t2017-02-01\t25.6825\n\t2017-03-01\t33.8351\tPeak\n\t2017-04-01\t25.1619\n\t2017-05-01\t32.1801\n\nExample CSV file:\n\t\n\t#,GOOG Stock Volume (Millions of Shares)\n\t2017-01-01,33.1916\n\t2017-02-01,25.6825\n\t2017-03-01,33.8351,Peak\n\t2017-04-01,25.1619\n\t2017-05-01,32.1801\n\nTypically ```dchart``` generates input for deck clients like ```pdfdeck```, or ```pdi``` (a shell script for pdfdeck which reads\ndeck markup on the standard input and produces PDF on the standard output).\n\n\t$ dchart foo.d bar.d baz.d \u003e fbb.xml \u0026\u0026 pdfdeck fbb.xml \u0026\u0026 open fbb.pdf\n\t$ dchart -min=0 -max=700 -datafmt %0.2f -line -bar=f -vol -dot [A-Z]*.d | pdi \u003e allvol.pdf\n\t$ ls -lS | awk 'BEGIN {print \"# File Size\"} NR \u003e 1 {print $NF \"\\t\" $5}' | dchart -hbar | pdi \u003e fs.pdf\n\n## Defaults\n\nWith no options, ```dchart``` makes a bar graph, showing data values and every data label.\n\n## Placement\n\nThe plot is positioned and scaled on the deck canvas with the \n```-top```, ```-bottom```, ```-left```, and ```-right``` flags. \nThese flag values represent percentages on the deck canvas.\n\n## Chart types and elements\n\nThe ```-bar```, ```-hbar```, ```-line```, ```-dot```, ```-scatter```, ```-vol```, \n```-pgrid```, ```-pmap```,```-donut```, and ```-radial```.\nflags specify the chart types.\n\nThe ```-grid```, ```-title```, ```-val```, and ```-yaxis``` \nflags control the visibility of plot components. \n\n\n## Command line options\n\n\t-dmim        data minimum (default false, min=0)\n\t-min         set the minimum value\n\t-max         set the maximum value\n\t-csv         read CSV files (default false)\n\t-csvcol      specify the columns to use for label,value\n\n\t-bar         show bar chart (default true)\n\t-wbar        show \"word\" bar chart (default false)\n\t-hbar        horizontal chart layout (default false)\n\t-scatter     show a scatter chart (default false)\n\t-dot         show dot plot (default false)\n\t-lego        show lego chart (default false)\n\t-bowtie      show bowtie chart (default false)\n\t-fan         show fan chart (default false)\n\t-line        show line chart (default false)\n\t-slope       show a slope chart (default false)\n\t-frame       show a frame outlining the chart (default false)\n\t-datacond    conditional coloring (low,high,color)\n\t-rline       show regression line (default false)\n\t-vol         show volume plot (default false)\n\t-pgrid       show a proportional grid (default false)\n\t-pmap        show proportional map (default false)\n\t-donut       show a donut chart (default false)\n\t-radial      show a radial chart (default false)\n\t-spokes      show a radial chart with spokes (default false)\n\n\t-grid        show gridlines on the y axis (default false)\n\t-val         show values (default true)\n\t-pct         show percentages with values (default false)\n\t-valpos      value position (t=top, b=bottom, m=middle) (default \"t\")\n\t-yaxis       show a y axis (default true)\n\t-yrange      specify the y axis labels (min,max,step)\n\t-fulldeck    generate full deck markup (default true)\n\t-title       show title (default true)\n\t-chartitle   specify the title (overiding title in the data)\n\t-hline       horizontal line with optional label (value,label)\n\t-noteloc     note location (c-center, r-right, l-left, default c)\n\t\n\t-top         top of the plot (default 80)\n\t-bottom      bottom of the plot (default 30)\n\t-left        left margin (default 20)\n\t-right       right margin (default 80)\n\t\n\t-psize       diameter of the donut (default 30)\n\t-pwidth      width of the donut or proportional map (default 3 time textsize)\n\t-solidpmap   use solid colors for pmaps\n\t-barwidth    barwidth (default computed from the number of data points)\n\t-linewidth   linewidth for line charts (default 0.2)\n\t-ls          linespacing (default 2.4)\n\t-textsize    text size (default 1.5)\n\t-xlabel      x axis label interval (default 1, 0 to supress all labels)\n\t-xlabrot     x axis label rotation (default 0, no rotation)\n\t-xstagger    stagger x axis labels\n\t-xlast       show the last x label\n\t-color       data color (default \"lightsteelblue\")\n\t-framecolor  frame color (default \"rgb(127,0,0)\")\n\t-rlcolor     regression line color (default \"rgb(127,0,0)\")\n\t-vcolor      value color (default \"rgb(127,0,0)\")\n\t-lcolor      axis label color (default \"rgb(75,75,75)\")\n\t-volop       volume opacity (default 50)\n\t-datafmt     data format for values (default \"%.1f\")\n\t-note        show annotations (default true)\n\n\n## Examples\n\nUsing this data in ```AAPL.d```\n\n\t# AAPL Volume\n\t2017-01-01\t563.122\n\t2017-02-01\t574.969\n\t2017-03-01\t561.628\n\t2017-04-01\t373.304\n\t2017-05-01\t653.755\n\t2017-06-01\t684.178\n\t2017-07-01\t421.992\n\t2017-08-01\t661.069\n\t2017-09-01\t679.879\n\t2017-10-01\t504.291\n\t2017-11-01\t600.663\n\t2017-12-01\t417.354\n\nhere are some variations.\n\n\t$ dchart AAPL.d\n\n![no-args](images/no-args.png)\n\n\t$ dchart -yrange=0,700,50 AAPL.d\n\n![yrange](images/yrange.png)\n\n\t$ dchart -xlabel=2 -left 30 -right 70 -top 70 -bottom 40 -yaxis=f AAPL.d\n\n![pos](images/pos.png)\n\n\t$ dchart -color gray AAPL.d\n\n![bar-gray](images/bar-gray.png)\n\n\t$ dchart -grid AAPL.d # add a y axis grid\n\n![bar-grid](images/bar-grid.png)\n\n\t$ dchart -grid -barwidth=1 AAPL.d # adjust the bar width\n\n![barwidth](images/barwidth.png)\n\n\t$ dchart -bar=f -dot AAPL.d # no bars, dot plot\n\n![dot](images/dot.png)\n\n\t$ dchart -bar=f -vol AAPL.d # no bars, volume plot\n\n![vol](images/vol.png)\n\n\t$ dchart -datafmt %0.2f -bar=f -dot -line AAPL.d\n\n![dot-line](images/dot-connect.png)\n\n\t$ dchart -bar=f -line AAPL.d # line chart\n\n![connect](images/connect.png)\n\n\t$ dchart -bar=f -line -yaxis=f -val=f AAPL.d # only show line and x axis\n\n![connect-no-axis-no-val](images/connect-no-axis-no-val.png)\n\n\n\t$ dchart -scatter -val=f -bar=f -yaxis=f AAPL.d\n\n![scatter](images/scatter.png)\n\n\n\t$ dchart -bar=f -line -vol -dot AAPL.d # combine line, volume, and dot\n\n![vol-dot](images/vol-dot.png)\n\n\n\t$ dchart -bar=f -line -vol -dot -yaxis=f AAPL.d # as above, removing the y-axis\n\n![vol-dot-no-axis](images/vol-dot-no-axis.png)\n\n\t$ dchart -bar=f -line -vol -dot -grid AAPL.d\n\n![connect-dot-vol-val-grid](images/connect-dot-vol-val-grid.png)\n\n\t$ dchart -hbar AAPL.d\n\n![hlayout](images/hlayout.png)\n\n\t$ sort -k2 -nr pdf.d | dchart -left 20 -hbar\n\n![sorted-bar](images/sorted-hbar.png)\n\nUsing this data in ``browser.d``\n\n\t# Browser Market Share Dec 2016-Dec 2017\n\tChrome\t53.72\n\tSafari\t14.47\n\tOther\t9.36\n\tUC\t8.28\n\tFirefox\t6.23\n\tIE\t3.99\n\tOpera\t3.9\n\nhere are views of proportional data:\n\t\n\t$ dchart -wbar browser.d\n\t\n![wbar](images/wbar.png)\n\t\n\t$ dchart -donut -color=std -pwidth=5 browser.d\n\n\n![donut](images/donut.png)\n\n\t$ dchart -pmap -pwidth=5 -textsize=1 browser.d\n\n![pmap](images/pmap.png)\n\nUsing this data in incar.d:\n\n\t# US Incarceration Rate\n\tWhite\t39\tantiquewhite\n\tHispanic\t19\tburlywood\n\tBlack\t40\tsienna\n\tOther\t2\tgray\n\nthe note field may be used to specify the color\n\n![pgrid](images/pgrid.png)\n\n\t$ dchart -ls 3 -val=f -pgrid incar.d\n\nHere is the lego chart variation:\n\n![lego](images/lego.png)\n\n\t$ dchart -left 30 -top 80 -lego -textsize 4 \n\nUsing this data in slope.d\n\n\t# Test Slope Graphs\n\tone     20      First\n\ttwo     80\n\n\tthree   0       Second\n\tfour    0\n\n\tfive    100     Third\n\tsix     0\n\n\tseven   0       Fourth\n\teight   100\n\n\tnine    50      Fifth\n\tten     50\n\n\televen  100     Sixth\n\ttwelve  100\n\n\n![slope](images/slopechart.png)\n\n\t$ dchart -slope -left=10 -right=30 -top=80 -bottom=60 slope.d\n\t\n\n\n\nUsing this data in count.d:\n\n\t# Count Of Things\n\tOne\t10\tred\n\tTwo\t20\tgreen\n\tThree\t30\tblue\n\tFour\t40\tpurple\n\tFive\t50\tyellow\n\tSix\t60\tblack\n\tSeven\t70\tbrown\n\tEight\t80\tsilver\n\tNine\t90\torange\n\tTen\t100\tpink\n\n\t$ dchart -psize=10 -pwidth=40 -left=50 -top=50 -radial -textsize=3 data/incr.d|pdf -pagesize 800,800\n\n\n\n\n![radial](images/radial.png)\n\nUsing this data:\n\n\t# Clockwise\n\ttwelve\t12\tred\n\tone\t1\tgreen\n\ttwo\t2\tblue\n\tthree\t3\tpurple\n\tfour\t4\tmaroon\n\tfive\t5\tblack\n\tsix\t6\tbrown\n\tseven\t7\tsilver\n\teight\t8\torange\n\tnine\t9\tpink\n\tten\t10\n\televen\t11\n\n\t$ dchart -psize=10 -pwidth=40 -left=50 -top=50 -radial -textsize=3 -spokes data/clock.d|pdf -pagesize 800,800\n\n![spoke](images/spoke.png)\n\nUsing this data:\n\n\t# Occupations of African-Americans and Whites (2019)\n\tManagement\t31.8\tcrimson\n\tService\t23.8\tgold\n\tSales\t22.4\tsteelblue\n\tConstruction\t5.7\ttan\n\tProduction\t16.3\trgb(101,67,33)\n\tManagement\t41.4\tcrimson\n\tService\t15.9\tgold\n\tSales\t21.3\tsteelblue\n\tConstruction\t10.1\ttan\n\tProduction\t11.3\trgb(101,67,33)\n\n$ dchart -val -psize=20 -top=60 -bowtie occupation.d\n\n![bowtie](images/bowtie.png)\n\n$ dchart 0val -psize=20 -top=60 -fan occupation.d\n\n![fan](images/fan.png)\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fajstarks%2Fdchart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fajstarks%2Fdchart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fajstarks%2Fdchart/lists"}