显示标签为“可视化”的博文。显示所有博文
显示标签为“可视化”的博文。显示所有博文

星期三, 五月 29, 2013

关于可视化的一个slide

前段时间团队内部讨论,做了一个关于数据可视化的slide,放在下面的链接中,供有兴趣的各位看看吧。ubuntu下chrome效果最佳,可尝试按下ESC看全局。

星期五, 四月 19, 2013

初学D3的感觉


简单来讲有如下三点感受:

  • D3很强大
  • D3并不容易学
  • 学会D3并不等于学会了可视化

一山还有一山高,在翻过ggplot2这座山后,发现还有D3这座珠穆朗玛。ggplot2已经非常好了。能够实现The Grammar of Graphics的精义,有很丰富的对象和灵活的自由度,但这都还不够,因为ggplot2只能够生成静态的图形。如果你只需要写一篇分析报告,那么ggplot2是足够的。但如果你想让数据在网页上飞翔,就需要D3做为翅膀。


星期一, 八月 13, 2012

2012伦敦奥运的金牌项目分布

伦敦奥运会尘埃落定,又到了数金牌的时候了。上图还是用的R中的treemap包绘制了这个大game中各项目的金牌分布情况,矩形的大小反映了项目的重要性。比如说在所有302块金牌中,Athletics(田径)所占的金牌比例就很高。与之相当的则是Aquatics(水上项目)。而中国所获金牌数则用不同的颜色深度来表示,例如说在Badminton(羽毛球)上拿到了5枚金牌,颜色就非常深。可以观察到在很多项目中,中国仍是一片空白。

参考资料:
http://www.london2012.com/country/china/medals/index.html
http://en.wikipedia.org/wiki/2012_Summer_Olympics#Sports
整理后的数据文档

代码

星期五, 八月 10, 2012

在R语言中绘制Treemap

Treemap是一种流行的可视化技术,它用不同尺寸的嵌套矩形来表现层次数据。最常见的层次数据包括了文件目录、文章结构、组织结构等等。Treemap技术是通过矩形的大小来显示节点的重要性,并通过嵌套层次来显示结构的层级。R语言中的treemap包就可以实现这种可视化技术,下图就是对苹果公司财务报表的可视化。


星期四, 七月 26, 2012

中国国内航线信息的可视化


上图是对国内机场和航线信息进行了一个简单的可视化。圆点表示了中国163个机场的位置,线条显示了5381条航线。之前曾在这个网站见到了作者用R语言来对全世界的航线进行可视化。正所谓见贤思齐,本图就是模仿山寨的结果。但是这个图的生成没有原文那么复杂,所用到的地理图形包和步骤也与原例略有不同,比较失败的是没有展现出原图的夜景效果。具体实施的步骤如下:

  • 从这个网站下载到机场数据和航线数据;
  • 从中挑选出中国的机场和国内航线,并加以整理;
  • 用ggmap包读取谷歌地图;
  • 将机场和航线信息绘制在地图上。

星期日, 六月 17, 2012

初次尝试igraph包


igraph是为了进行社会网络分析而创建的一个包。与R语言中同类包相比,它的速度更快,而且函数命令与图形展现更为丰富。它可以处理有向网络和无向网络,但无法处理混合网络。igraph中的函数非常多,本文只是初步的介绍如何创建图形,并提供一些简单的例子。
# 可以使用最基本的graph函数,用向量作为参数来创建图形,之后用plot绘制出结果
library(igraph)
g1 <- graph( c(0,1, 1,2, 2,3, 3,4))
plot(g1,layout=layout.circle(g1))

# 也可以画出一些特殊结构的图形,例如下面的星形图
g2 <- graph.star(10, mode = "in")
plot(g2,layout=layout.fruchterman.reingold(g2))

星期四, 五月 10, 2012

用ggplot2包来绘制地图


自从四月份进行重大升级之后,0.90版的ggplot2包更新了很多新功能。之前的博文谈到了升级版的二维直方图。今天我们要谈的是绘制地图的新功能。其图形元素主要是通过geom_map来实现,在它的帮助文档中只描述了如何绘制美国地图,而美国地图是系统内maps包所自带的地图数据。其它图家地图数据则要从外部导入,本文则尝试从 GADM 获取中国行政区域数据,然后用ggplot2包进行绘图。GADM是世界行政区域(或行政区域界线)位置的空间数据库,可以用于地理信息系统和类似软件。这个数据库也提供了R语言数据格式。

本例的目的是结合地理数据和水资源数据,以说明中国人均水资源拥有量的分布情况。基本步骤是先导入地理信息数据,将其转为ggplot2可以处理的数据框格式,将水资源数据整合进来,最后绘制成图。在下图中,红色代表了人均水资源拥有量较低的地区,黄绿色代表较高的地区。多年以来,华北地区都是有名的缺水地区,而长江以南水资源相对较为丰富,这一点很容易观察出来。而西藏、青海人口数量少,使人均水资源偏高。此外,根据全国水资源公报的数字,全国平均的人均水资源量是2200立方米。我们可以根据这一数字,将低于平均数的省份单独显示出来。顺便说下,公鸡的另一只腿可不是我吃了,数据原本如此。

星期四, 五月 03, 2012

日历中的夏天


看着有节,摸着无节--打一生活用品

不知不觉,夏日已慢慢临近。姑娘们飞扬的裙角,小贩叫卖的西瓜,蚊蝇嗡嗡的声音,以及翻过的一页日历,都提醒着你--夏天快来了。夏季有着不同的定义,根据中国人的日历,我们所俗称的夏季从“立夏”开始,到“立秋”结束。在气候学上,若连续五天平均温度超过22度,则算作夏季的开始,若五天平均温度低于22度则算作入秋。而天文学上的夏季一般是指6、7、8三个月。

我们想知道:哪一种夏季的定义更合乎我们的感觉?还是用数据可视化来说话吧。这项任务基本上有两个步骤,一是获取某城市的2011年日平均温度数据,二是根据数据绘制日历热图(Calendar Heatmap)

星期六, 四月 28, 2012

用RGL包绘制三维交互式图形

R语言中的rgl包是绘制三维图形的利器。在最新版本中,该包增加了一个writeWebGL函数,可以将三维图形转化为一个包含WebGL元素的网页文件。WebGL是一种3D绘图标准,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,这样Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型了。

下面的第一张图是静态图,是用一个二元函数绘制的心形图。第二张图是用来表现二元回归时散点与回归平面之间的关系,如果你的浏览器支持WebGL(如果可以打开这个图形,则表明支持),即可拖动鼠标以旋转图形。这种交互式图形相信在教学中会起到很好的辅助作用。

星期六, 四月 14, 2012

基于OpenStreetMap的地理信息绘图

开放街道地图(OpenStreetMap,简称OSM)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。OSM可以根据用户的手持GPS装置、航空摄影照片、卫星影像、其他自由内容甚至单靠用户对目标区域的知识绘制。OSM网站的灵感来自维基百科等网站。这可从该网地图页的“编辑”按钮及其完整修订历史获知。经注册的用户可上载GPS路径及使用内置的编辑程式编辑数据。2010年海地大地震中,OpenStreetMap极大地提高了地面搜救小队的工作效率。这个地图以GeoEye等公司提供的最新卫星照片为基础,又加入了很多新资料,工作人员和志愿者可以随时用随身的电脑或手机在地图上即时标注救护站、帐篷和倒塌的大桥。2012年4月,继苹果和Foursquare相继放弃使用谷歌地图后,维基百科也放弃使用谷歌地图,转向使用OpenStreetMap。

本例结合OpenStreetMap包、XLM包和ggplot2包来介绍如何整合地图资料和其它数据。我们的任务是将中国城区人口最多的前十位城市标注在地图上。基本步骤如下:
  • 从wikipedia上抓取城市人口资料;
  • 利用Google API获得十个城市的经纬度;
  • 根据上面两类数据渲染得到地图如下(点击可看大图),圆的大小显示了城市居民数的多寡。

星期日, 四月 01, 2012

清明时节说死刑

死刑是自人类社会发展以来就诞生的一种剥夺人生命的刑罚。死刑除了是对于不守规则的事件的惩罚外,也是对破坏规则的情况的一种极重度的威吓。这个史前就已有的制度,是对进行不容于社会的行为的严厉惩罚之一。世界上几乎每一个国家或地区都曾有过“死刑”这种刑罚制度,时至今日,仍有一些国家继续存有并继续执行死刑。然而多数国家已经废止了死刑,有些国家则是已经10年以上未执行过死刑,或是仅允许在战时使用死刑。

在最近卫报的一则文章中,根据从2007到2011年的死刑数据进行了一些可视化工作。特别是根据大赦国际最近公布的一份报告,给出了一份死刑执行情况的气泡地图。形象的说明了当今世界上还有哪些国家在判决与执行死刑。本文则是照猫画虎,以说明R语言中googleVis包ggplot2包的使用方法。

星期五, 二月 10, 2012

用图形和颜色来表现相关关系

进行数据分析建模首先要了解变量间的关系。对于连续数据来说,散点图可能是最为有效的一种工具。散点图通常对两组连续数据比较合适,如果是多元数据,那么可以使用散点图矩阵(ScatterMatrix)来两两展示数据相关关系。

R语言中包含了各种不同版本的散点图函数,魏太云在这篇文章里就对这些函数进行了讲解举例,如果需要更完整的文档,可以参考R官方站的一份关于多元数据可视化的资料。还可参考笔者之前的博文。但我们在这里希望用图形和颜色来表现这种相关关系,而非散点图矩阵。用到的R语言包是corrgram包和ellipse包。

星期六, 十二月 17, 2011

新书推荐:《Visualize This》

这是一个数据的时代,各种数据铺天盖地涌现出来,如何从中获取有用的信息?人类的大脑喜欢图形,因此将数据可视化或许是种方法。数据可视化是美学、数据分析和专业知识的结合,能以清晰简明而优美的方式讲述数据背后的故事。

如果你对数据可视化感兴趣,那么向你推荐Visualize This这本书。作者Nathan Yau是加州大学洛杉矶分校统计学博士生。同是也是flowingdata.com的创建者。

星期六, 十二月 10, 2011

qplot绘图函数快速入门

绘图是进行数据探索分析的重要方法,也是数据报告中的必备元素。但进行多元数据绘图时,R语言中的基本绘图工具往往很不给力,使用lattice包又要记一大堆命令。在你痛苦不堪的时候,需要ggplot2包来拯救你。虽然在刚开始学习这种绘图方法时会有少许难度,但跨过这道坎后你会感觉到它的简洁和力量。

对于初学者ggplot2提供了qplot函数,可以方便的绘制多种图形,下面来看看它是如何作的。首先加载ggplot2包,然后读取diamonds数据,运行?diamonds可以得到关于数据的更多信息。由于该数据集非常大,所以为了举例方便从中抽取了500个样本。

星期五, 十二月 02, 2011

聊聊散点图

散点图很简单,但它无疑是探索数值数据之间关系的有力工具。它有直观简便的优点,通过观察散点图,不但可以得到定性的结论,而且可以通过观察并处理异常数据,提高用于估算相关程度的准确性。在R中实现散点图最简单的函数就是plot,我们首先随机生成两个数据,然后用作散点图
y=rnorm(100)
x=rnorm(100)
plot(x,y)
如果希望从简单的散点图中得到更多信息,我们可以使用car包中的scatterplot函数,散点图增加了单变量的箱线图,线性回归线和局部回归线。此外该函数也可以进行条件绘图。
scatterplot(x,y,spread=F)

星期三, 九月 21, 2011

利用googleVis包实现环境数据可视化

本例的目的是按中国行政区划标注出每个省份所排放的生活废水,其结果与之前的一篇博文类似,但利用的工具是googleVis包,此工具包将Google Visualisation API与R进行连接,直接用R中的数据生成交互的可视化图形,而不用再将数据上传到google。 

首先,从公众环境研究中心得到各省的数据,然后在google网站找到各省对应的地理位置编码,在excel中制成表格,然后读入到data.frame中。并载入googleVis包

星期日, 七月 31, 2011

R语言、Rattle以及ggobi协同进行数据可视工作

数据可视化主要旨在借助于图形化手段,清晰有效地传达与沟通信息。但是,这并不就意味着,数据可视化就一定因为要实现其功能用途而令人感到枯燥乏味,或者是为了看上去绚丽多彩而显得极端复杂。为了有效地传达思想概念,美学形式与功能需要齐头并进,通过直观地传达关键的方面与特征,从而实现对于相当稀疏而又复杂的数据集的深入洞察。然而,设计人员往往并不能很好地把握设计与功能之间的平衡,从而创造出华而不实的数据可视化形式,无法达到其主要目的,也就是传达与沟通信息。

R语言有众多的绘图工具包,例如ggplot2,lattice。而在动态绘图方面则可以利用rggobi与ggobi软件进行协同工作。对懒得敲命令的同学来说,还可以利用rattle工具包的图形界面进行数据挖掘和可视化工作。在R程序内运行如下命令即可安装rattle

静态和动态三维散点图的绘制

静态三维散点图需使用scatterplot3d扩展包

library(scatterplot3d)
scatterplot3d(iris$Petal.Width,iris$Sepal.Length,iris$Sepal.Width,pch=16,color=as.numeric(iris$Species))

星期二, 七月 19, 2011

在R语言中实现google-motion-charts

本例希望比较20国集团过去若干年的发展轨迹,用谷歌提供的动态视图API在R中进行绘图。我们从世界银行数据库中选取三个变量,分别反映GDP,CO2排放和期望寿命在2001到2007年之间变化。

首先安装必要的程序包,然后用WDI命令从世界银行数据库中加载数据。
install.packages("googleVis")
library(googleVis)
library(WDI)
DF <- WDI(country=c("CN","RU","BR","ZA","IN",'DE','AU','CA','FR','IT','JP','MX','GB','US','ID','AR','KR','SA','TR'), indicator=c("NY.GDP.MKTP.CD", 'SP.DYN.LE00.IN', 'EN.ATM.CO2E.KT'), start=2000, end=2010
M <- gvisMotionChart(DF, idvar="country", timevar="year")