《柴静:穹顶之下》中用到的数据可视化

近几天柴静的《穹顶之下》播放量已经破亿,笔者看了也十分感动。该视频中出现了不少可视化图表,本文对此进行总结。

title

我的咽喉比较敏感,只要空气质量不好,吸一口气就感觉咽喉部痒痒的。因此,我比一般人更注重空气质量。我经常关注国内的空气质量指数:

http://aqicn.org/map/

看到偶尔有几个绿点时,心情很愉快。

柴静自费百万,用简单易懂的语言、视频、幻灯片介绍了雾霾的危害,并提出许多解决建议,让我深受感动。其中有一句话我的印象很深,是在说到父母要不要让小孩早点儿适应雾霾的时候,一个美国专家说的,意思大概是:

有些人在雾霾中呆久了,身体不适的感觉似乎好了很多,这不是产生了免疫,而是他的身体失去了这项功能。

我周围确实有这样的人。每次我提到空气质量的时候,发现不少人对此不甚关心,其原因主要是他们的身体并没有出现症状。比如有人家住山西,我只要一说到关于那里空气质量的话题(绝非出于恶意),他们马上就跟点了炸药要爆一样,说“环境挺好啊,生活挺舒适的”。

热爱自己的家乡,任何人都如此,我能理解。我也绝非是为了贬低其家乡,而是为了说一种社会问题。他们这种“处乱不惊”,可能确有其好处。但是,如果连“空气是一个问题”都不承认的话,问题绝不会得到解决。

我也是第一次知道 12369 这个号码,将来遇到情况打算试试,能不能解决问题还在其次,至少让人知道社会上有人关注。希望大家也都能行动起来,从自己做起。

关于此视频,网上的言论似乎分为两派,彼此争吵不休,也有不少人身攻击的言论。对此,我不做评论。不过,我在凤凰网上看到一段话,感觉很有道理,特记录在此,也希望能分享给大家:

哈维尔于1989年,制定了公民论坛的《对话守则》:

  1. 对话目的是为了寻求真理,而不是为了竞争。
  2. 不要作人身攻击。
  3. 保持主题。
  4. 辩论时要用证据。
  5. 不要坚持错误不改。
  6. 要分清对话与只许自己讲话的区别。
  7. 对话要有记录。
  8. 尽量理解对方。

好了,言归正传,在《穹顶之下》中用到了不少可视化技术。

1. 柱形图

柱形图2

柱形图1

柱形图3

 

2. 折线图

折线图1

折线图2

折线图3

 

3. 饼状图

饼状图1

饼状图2

 

4. 地图相关

地图3

地图2

地图1

柱形图、折线图、散点图,可被称为简单图表。

饼状图、力导向图、树状图、弦图等,可被称为复杂图表。饼状图又是复杂图表中最简单的。

从 D3 的角度看,简单图表不使用布局,复杂图表使用。

视频中使用最多的简单图表,其实数据可视化有一个要点:对于一组数据,能用简单图表的,不用复杂图表,不是图表越复杂越好。简单图表是大多数人最容易懂、最好理解的。

谢谢阅读。

文档信息

《柴静:穹顶之下》中用到的数据可视化》上有6条评论

  1. 还有,因为数据量太大,我不知道那么大一个数据量该怎么与html像衔接起来,是用excel导出一个xml文件然后让html去读取标签里的数据吗,还是做成一个数据库DB,与服务器进行连接呢?

    • 你好,我已经了解了你的需求。

      首先有两个问题:
      1. 你有没有实时性(Real-time)的要求,即新的数据一被检测到几乎就需要立即可视化吗?
      2. 数据大小到底是多少,是 MB级别的,还是GB级别,还是TB级别的?

      你提到每分钟都有数据生成,这个数据是需要立刻就被可视化吗?还是允许暂时保存下来,然后慢慢分析。北京大学的那个项目,看起来不像是实时生成的,而是计算好后再输出程序和视频(我估计是这样)。
      如果数据量是MB或GB级别的,就生成xml或json之类的文件,再让html去读取,也就是用ajax去读取。或者你保存到数据库里,再用php或jsp之类的去读取。但是估计读取的时间挺长,会有延迟的,不能保证实时性。
      如果数据量是TB级别的,我估计要用到hadoop,由于我对hadoop不太清楚,帮不了你。

      另外,你的数据也可以在后台就处理一下,进行简化,读取速度会快很多。

      • 你好,我在看了您的回复以后反复思考了十几天,我手头上的数据都是死的。即并非边生成边可视化的。总数据量excel表格不到200M,我目前实现了一个HTML页面上面展示出一张温州地图,而我目前结合您的回复想出来的思路是首先生成xml文件,但是我的excel不是一个表而是十个表因此可能生成十个xml文件,那么读取是否会出现问题呢?是否存在多表读取。还是要将这么多的表合成一个xml文件然后根据节点名去取得对应value值,也有人给我指引说是将地图网格化然后判断每个点落在地图上面的权重,即浓度,去实现这种可视化,但是我heatermap那个。js不会网上资源也几乎没有,所以我想知道那个地图您觉得到底是如何实现那个效果的。是否只用了d3.js?期待您的回复

        • 我想分成如果本身是10个表,没有必要特意合成一个,读取数据的时候一个一个读,等全部读取完毕,再进行可视化即可。分开读取,做成进度条(告诉用户当前读到第几个了)也比较方便。

          那个可视化,应该不是使用D3.js。出品日期是2012年9月,那是d3的1.0版才刚发布不到1年,版本也不太稳定,教程也少,根本也没多少人知道,不会是使用d3的。

          关于可视化方面,将地图网格化后做应该是可以的。或者你试试直接画点,看看行不行。例如你的数据是

          地点:(经度、纬度),value:车流量

          这样的数据,将所有经纬度投影到地图上,value值映射成颜色,由浅至深,value大的(即车流量大的),颜色也深。这么做很容易,但是不试一下我不确定效果如何。

          谢谢。

  2. 你好,我是一名学生,我看了您的许多解说,但是目前就制作一个动态图遇到了瓶颈,想问您是否可以提供一些思路给我,http://vis.pku.edu.cn/trajectoryvis/zh-cn/densitymap.html这个网址是北京大学的一个50几秒的一个数据可视化视频,应该是用车流做出的,而我目前手头上也有一百多万个车子对象的数据,形如经度纬度,车子方向:0-360度,车速,ID,时间,每一辆车每分钟都有一条数据,然后我想根据这些数据做出和这个一样的效果,自己配置好了TOMcat里调用了一份温州市的地图,拥有一百万温州车子的数据,但是我现在不明白整体步骤该怎么做,我卡在了到底该用heatermap.js辅助起来一起做出来还是用别的什么,还是需要散点图或者力导向图。非常地急切想要恳求您的帮助。谢谢

    • 这个vis是用qt写的。
      数据量大的情况下,不建议在web端用js展示。
      不是不能,是不建议

评论已关闭。