专栏名称: 程序人生
十年漫漫程序人生,打过各种杂,也做过让我骄傲的软件;管理过数十人的团队,还带领一班兄弟姐妹创过业,目前在硅谷一家创业公司担任 VP。关注程序人生,了解程序猿,学做程序猿,做好程序猿,让我们的程序人生精彩满满。
目录
相关文章推荐
51好读  ›  专栏  ›  程序人生

当我做 hackathon 时我在做什么 (2)

程序人生  · 公众号  · 程序员  · 2021-01-14 20:05

正文

请到「今天看啥」查看全文


GG 这本书除了把这些概念介绍地很透彻,还对图形的表达做了完整的形式化表述,也正因为如此,很多工具直接在 GG 的基础上进行开发,比如 R 里的 ggplot。vega 受 GG 和 ggplot2 的启发诞生,随后更加精简,更受大家欢迎的 vega-lite 又在 vega 的基础上产生。受 vega-lite 的影响,altair 开始崛起,而我受 altair 的影响,萌发了在 Elixir 下复刻 altair 的想法。

好了,关于 GG 的故事就先讲这么多,等我通读完这本大部头后,有空可以单开一文讲讲我对可视化的认知。

如何在 Elixir 上「复刻」一个 Altair

在做这次 hackathon 之前,我已经有了还算丰富的 altair 的使用经验,但我并未太多研究 vega-lite 本身。所以在做 deneb 的过程,其实就是我自己学习 vega-lite,然后把 vega-lite 的代码用 Elixir 封装起来的一个过程。vega-lite 主要有这样几种对象:

  • mark:这是属于 Geometric Objects 范畴的东西,就是你用什么图形来表述数据。比如 "bar"。

  • encoding:其中包含了坐标系和 axis / color / size 的声明,属于 Coordinate System / Aesthetics 范畴的东西。encoding 中也可以声明部分 statistics 范畴的东西。

  • transform:在视图层对数据的各种处理,属于 Statistics 范畴的东西。

  • facet/layer/concat/repeat:视图层的各种组合,属于 Facets 范畴的东西。

  • selection:定义了互动相关的操作。

下面是一个最简单的 vega-lite 的代码,完全由 JSON 表述:

{  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",  "description": "A simple bar chart with embedded data.",  "data": {    "values": [      {"a": "A", "b": 28}, {"a": "B", "b": 55}, {"a": "C", "b": 43},      {"a": "D", "b": 91}, {"a": "E", "b": 81}, {"a": "F", "b": 53},      {"a": "G", "b": 19}, {"a": "H", "b": 87}, {"a": "I"






请到「今天看啥」查看全文