控制台下的图表库 tcharts.js

我们开发使用的很多工具都是 cli 工具,比如 babel,eslint,webpack,jest 等等。控制台因为其特殊性,它的信息表现力仅在于一个一个单纯的字符。

控制台的字符图表可以有效提高数据可视化能力,提高信息接收的效率,也更加美观。

/**
 * 柱形图
 *
 * ^
 * |    A:70
 * |   +---+
 * |   |   |
 * |   |   |              C:50
 * |   |   |             +---+
 * |   |   |             |   |
 * |   |   |     B:30    |   |
 * |   |   |    +---+    |   |
 * |   |   |    |   |    |   |
 * |   |   |    |   |    |   |
 * |   |   |    |   |    |   |
 * +---+---+----+---+----+---+----->
 *
 */

快枪手快速开始:https://github.com/ProtoTeam/tcharts.js

一、介绍

目前很多的控制台应用,能够做到颜色和简单的动画,来让数据显示更清晰、美观,举个例子:

以上是某一个简单项目 uri-parse 的单测结果在控制台的展现效果,已经非常美观清晰了。

但是对于某些数据的展现,仅仅只是颜色上的美化,并不能有很好的效果,比如:

以上是两个代码进行 benchmark 跑分的效果。其实如果不是限制在控制台上,我们都希望:这种跑分结果使用一个柱形图来给出一个相对比较,这样更加直观。

二、做什么

我们要做什么?很明确,我们要做一个控制台下面的图表库。

想到图表库,我们应该很容易想到 echarts、G2 等等,这样图表库的运行环境是在浏览器,可以充分利用 canvas、SVG、css 来做出各种布局、样式、特效,吊得不行!

先放一个图:

截图自:https://github.com/chartjs/Chart.js

对于控制台环境,我们可以做些什么图形呢?我大概列举几个:

  • Table:表格
  • Bar:柱形图
  • HBar:横向柱形图
  • Box:面积图
  • DirTree:目录结构图

以上是我能想到的一些应用实例。

三、怎么做?

最终实现的是一个可以使用的的控制台图表库,但是可能并不完美!

约定

为了做到以上的几个控制台图表,并且提高图形的在不同环境控制台的适配能力。约定:

  • 图形仅仅使用基本字符绘制(键盘上的字符)
  • 不使用颜色(部分控制台并不支持颜色,同样也简化代码)
  • 取名叫 tcharts 吧:terminal charts。

原理

先给大家讲一个例子,现在玩手游的人很多,手游发布上线之前会送广电局审核,审核中有一点就是游戏中角色的衣服是否存在裸露(漏电)。游戏在制作的时候,会现有角色的 3D 模型,然后在角色上挂上一层衣服,这个就是收费点——皮肤。

有些时候,美术做出来的皮肤挂到某些人物身上的时候,因为皮肤尺寸小了,或者角色胸太大了,导致裸露,这种情况下,游戏就很可能不能通过审核了!

这个例子中,其实大家可以感受到图层的概念,就是一个角色在游戏中的渲染会有很多层次结构,但是最终用户看到的,其实就是最上面的一层。

类似的,在 HTML div 布局的时候,当结构有层叠的时候,可以通过 z-index 调整层次结构,让用户看不到不同的东西。

类似的,浏览器的图表库也会有图层的概念,一层一层叠加覆盖起来,形成最终用户看到的图形!

控制台图表 tcharts.js 开发的基本原理也是分不同的图层,好处在于:

  • 图层复用容易;
  • 扩展图表类型容易;
  • 代码更清晰;

当然缺点在于 重复绘制

比如最上面的一个柱形图,我们可以按照图层的思路,可以分成为两种图层:

  • Axis:坐标轴
  • Rect:矩形

也就是上面的柱形图可以拆分成四层:

1 层 Axis

    ^
   |
   |
   |
   |
   |
   |
   |
   |
   |
   |
   +---+---+----+---+----+---+----->

3 层 Rect

       +---+
       |   |
       |   |
       |   |
       |   |
       |   |
       |   |
       +---+

然后还可以细分,Axis 分成 2 条 Line,加坐标 Point;Rect 就直接可以拆分成 4 条 Line。

这样一层一层递归下去,最终实际工作的,就是在每一个对应的坐标点,绘制一个点。当所有的点绘制完毕之后,整个图也就显示出来了。

四、tcharts.js

总体来说基本原理就是:

                        Point
                          |
                        Line
                        /  \
           Text   +   Rect   Axis
              \       /  \     |
               RectText    \   |
                    \      |   |
                Bar / HBar / Table / Box

从 点 -> 线 -> 面,一层一层扩展图形,然后引入 Layer(图层)来组装这些元素,最终通过图层的合并,生成最终的图形。

tcharts.js 整个项目的类图结构如下图所示(其实代码量很小,读起来应该不难懂!):

目前导出 4 个图形!

整个项目代码文件的依赖关系为(使用 webstorm 生成,无法删除一些不必要的连线):

代码在这里:https://github.com/ProtoTeam/tcharts.js。时间原因,目前只完成了 4 个图表,不过后续的扩展应该不难,代码上也欠优化,希望欢迎大家参入进来。

发几个效果出来(可能在某些页面 css 下面,导致没有完全对齐!):

    +--------------+----------------------+---------------------+
    |              |                      |                     |
    |              |                      |                     |
    |              |                      |                     |
    |              |                      |                     |
    |              |                      |                     |
    |              |                      |                     |
    |              |        C:25%         |      Hello:25%      |
    |              |                      |                     |
    |              |                      |                     |
    |    A:25%     |                      |                     |
    |              |                      |                     |
    |              |                      |                     |
    |              +----------------------+---------------------+
    |              |                                            |
    |              |                                            |
    |              |                                            |
    |              |                   B:25%                    |
    |              |                                            |
    |              |                                            |
    +--------------+--------------------------------------------+

    ^
    |
    +---------------+
    |           D:30|
    +---------------+
    |
    +------------------------------------+
    |                                C:70|
    +------------------------------------+
    |
    +-----------------------+
    |                   B:45|
    +-----------------------+
    |
    +----------------------------------------------------+
    |                                               A:100|
    +----------------------------------------------------+
    |
    +----------------------------------------------------->

    +----+---------------+--------------------+
    | id |      name     |      birthday      |
    +----+---------------+--------------------+
    | #1 |    xiaowei    |     1992-08-01     |
    +----+---------------+--------------------+
    | #2 |     hello     |     1992-09-20     |
    +----+---------------+--------------------+
    | #3 |    tcharts    |     2017-06-27     |
    +----+---------------+--------------------+
    | #4 |     world     |                    |
    +----+---------------+--------------------+
时间: 2025-01-27 10:56:25

控制台下的图表库 tcharts.js的相关文章

JavaScript可视化图表库D3.js API中文参考_其它

D3 库所提供的所有 API 都在 d3 命名空间下.d3 库使用语义版本命名法(semantic versioning). 你可以用 d3.version 查看当前的版本信息. d3 (核心部分) 选择集 d3.select - 从当前文档中选择一系列元素. d3.selectAll - 从当前文档中选择多项元素. selection.attr - 设置或获取指定属性. selection.classed - 添加或删除选定元素的 CSS 类(CSS class). selection.sty

使用Chart.js图表库制作漂亮的响应式表单_javascript技巧

入门基础 Chart.js是一个基于HTML5的开源图表库,可以方便简洁的绘制美观的图表. 主要特性包括: 1.支持6种不同的表格类型:曲线图.柱状图.饼状图.雷达图.极坐标区域图.环图. 2.基于HTML5开发,支持所有浏览器(包括IE7/8). 3.不依赖于其他任何库,仅有4.5k大小,并且可以进行定制. Chart.js 是一个基于 HTML5 canvas 的响应式.灵活的.轻量化的图表库.库中提供了六种不同的图表类型,每种类型都带有一系列的自定义选项.如果这些还不够,你还可以创造自己的

数据可视化平台 Plotly 开源强大的 JS 图表库

数据可视化平台 Plotly 开源旗下强大的 JavaScript 图表库,支持三种不同类型的图表,包括地图,箱形图和密度图,以及更常见的产品如,条状和线形图.源代码已发布在 GitHub.(已收录开源中国软件库 plotly.js)最新版本的 Plotly.js 可以免费.无限制地用于任何项目. 此前 Plotly 在 R, Python 和 MATLAB 的客户端一直是开源的,但核心图表层 plotly.js 却是闭源的.而现在 Plotly 可以 100%离线地用于 RStudio, MA

C3.js 0.4.13 发布,基于 D3.js 的开源图表库

C3.js 0.4.13 已发布,更新如下: 特性 新增 point.show 功能选项 #2062 修复 Parallel loading of d3 and c3 #2066 修复 tooltip ordering #2070 修复 IE9 CSV Loading #1345 修复 addHiddenTargetIds 和 addHiddenLegendIds #1663 C3.js 是一个基于 D3.js 的可重用的开源图表库.使用非常舒服.充分可定制性和控制性.支持多种图表类型. 文章转

我的Android进阶之旅------>【强力推荐】Android开源图表库XCL-Charts版本发布及展示页

         因为要做图表相关的应用,后来百度发现了一个很好的Android开源图表库(XCL-Charts is a free charting library for Android platform.)                      下面内容转载于:http://blog.csdn.net/xcl168/article/details/29675613,详细介绍了XCL-Charts的展示内容.   =====================================

美观又实用,10款强大的开源Javascript图表库

随着发展,现代 Web 设计在改善体验和功能的同时,对于美观的追求也越来越高,可视化.交互式.动态等元素和效果似乎已成为标配. 以下是为开发者推荐的 10 款开源 Javascript 图表库,可以帮助实现各种漂亮的功能.话不多说,直接开始吧! 1.ECharts ECharts 由百度前端技术部开发的,是一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11.Chrome.Firefox.Safari等),底层依赖轻量级的

控制台下星号密码输入的实现

最近频繁需要实现在windows控制台下输入星号密码的功能,Unix/Linux那种没有任何屏显的实现总感觉对用户不太友好.今天在自己的Linux代码库中发现了自己去年写图书馆管理系统的时候写的一个密码输入函数.索性拿来修改了接口并且重新优化了处理逻辑后移植到了windows下(其实也就是加上几句条件编译罢了).代码如下: #ifndef _WIN32 // 如果不是WIN32环境,则要自定义getch()函数 #include <termio.h> int getch(void) { str

基于Qt的图表库

简述 如果要开发一个 Qt 应用程序C++ 或 QML包含绘图和数据可视化需要插入一些图表例如饼图.条形图或更复杂的有什么可选的图表库呢一起来看看. 简述 Qt Charts KD Chart QWT QCustomPlot QtiPlot 更多参考 版权所有一去丶二三里转载请注明出处http://blog.csdn.net/liang19890820 Qt Charts 来自Qt 官方提供 基于Qt Graphics View 框架 兼容性Qt5.7 及以上版本可直接使用Qt5.7 之前的版本

HTML5 Canvas图表库(RGraph与ZingChart)使用

下面介绍两个基于HTML5的canvas标签,采用Javascript绘制的图表库:RGraph 与 ZingChart. 1,RGraph RGraph是一个使用HTML5 Canvas标签实现的图表制作Library.利用该Library生成的Chart具有可交互性,当鼠标点击或移过时会显示相应的信息,可以动态加载Chart或对特殊点进行缩放. 主页地址:www.rgraph.net 当前支持的图表类型包括: bar.pie.donut.gantt.radar.funnel.bi-polar