Tableau教我们画合适的图
最近发现一个宝藏app,Tableau,都叫它数据分析的神器,编程小白做数据分析的福音,大学甚至有相关课程。这篇文章并不想吹捧它,也不想拿它和其它(比如R语言)做比较,各有优缺点。这些方法有各自的特点和面向人群,软件的使用和语言编程就好像数据分析这门武功的外功,初学者最应该学会的其实是数据整理和可视化这两项内功。所以我称Tableau是宝藏app,它很多教学资料,在叫如何使用软件的时候其实也在教数据分析这些核心的内容。今天我就通过它的帮助文档学习两个重要的议题:
-
了解数据的属性来选择合适的图来可视化
-
了解数据的类型来选择最佳的叙事方式
本文涉及内容为议题一,具体实施方案对照R语言进行。原文请见选择适用于您的数据的正确图表类型
随时间变化的对象
这里时间一般是x变量,可以是离散型的,也可以是连续型的。观察的对象可以是价格,体重,瘤子大小等数值型变量,当然因子型的等级变量应该也可以。对应使用的图标一般是折线图。这种图表可以回答这样几种问题:
-
变量在过去一段时间有何变化?
-
变量在何时(处)发生变化?
-
变量变化的速度有多快?(斜率)
还有两种更高级的对时间变化的图,观察的不再是个体的变化,而是群体内部的变化。一个是桑基图sankey,一个是大鱼图fish。这两个图如果以时间为x轴,则可以反映群体内个体的分组的流动性,克隆进化等。当然这两种类型的图不局限于这种使用方式。
桑基图sankey.jpg fish.png描述变量之间的关联
最常用的是散点图,然后再拟合一条趋势线。请注意,相关并不等于因果关系!这类图表一般回答以下几个问题:1. 两个变量是否相关?2. 相关性(程度)如何?3.正相关还是负相关?4. 不同变量之间相关程度的比较。
散点图.png变量之间做比较——量级
量级显示两个或更多离散项的相对大小或值。比如,基因在不同组之间的表达水平。Tableau推荐的是条形图,气泡图,和折线图。
Rplot02.jpeglibrary(ggplot2)
library(gcookbook)
library(patchwork)
p1 <- ggplot(mtcars,aes(x=cyl))+geom_bar()
p2 <- ggplot(mtcars,aes(wt,mpg)) + geom_point(aes(size=disp,color=hp)) + scale_fill_manual(values = colors)
p3 = ggplot(tg, aes(x = dose, y = length, colour = supp)) + geom_line()
p4 = ggplot(uspopage, aes(x=Year, y=Thousands, fill=AgeGroup)) + geom_area() + scale_fill_brewer()
((p1+p2)/(p3+p4))+plot_annotation(tag_levels = 'I')
实际上,科研数据中更常用到能显示中位数和标准差的箱线图,以及更加美观的小提琴图(violin plot)。最近学了分组一种分组变量小提琴图,像船帆一样,很美。此外,ELISA的结果也常见直接用堆积散点图(geom_jitter),或者把散点叠加到箱线图上。在绘制条形图的时候,如果把数值映射到颜色的深浅上,会更加美观。事实上,x和y轴贡献了数据的两个维度,那么想要增加描述的维度,就可以从大小和颜色来增加。
boxplot.jpegbox1 <- ggplot(ToothGrowth, aes(x=dose, y=len,group=dose)) +
geom_boxplot()
box2 <- ggplot(ToothGrowth, aes(x=dose, y=len,group=dose))+geom_boxplot(notch=TRUE)
box3=box1+geom_dotplot(binaxis='y', stackdir='center', dotsize=0.5)
box4=box1+geom_jitter(shape=16, position=position_jitter(0.3))
((box1+box2)/(box3+box4))+plot_annotation(tag_levels = 'I')
分组箱线图-帆船图.jpg
偏差
偏差图表显示某个值与某个基准(例如平均值或中值)相差多远。如果想要了解哪些项具有异常高或异常低的利润率,您将使用偏差图表。实际上,这是条形图的双轴变形。其实除了实际数值的正负,还可以将二分组的变量分别转成“正”和“负”两个方向。此外,还可以尝试画成极坐标。
偏差.png分布
Tableau的解释是当您尝试查找某个群体内事件的频率时,您将查看分布。如果要按年龄显示某项调查的受访者数量,或者要按天显示来电频率,则分布图表可能是最佳选择。所以重点应该是探索数据中哪个变量作为x轴,按照什么因素来排序。
Tableau推荐的图表包括直方图、人口金字塔图、帕累托图和盒形图。
直方图
直方图.png人口金字塔图
人口金字塔图.png又是一个被名字忽悠的图,其实就是我在“偏差”里面举例的那个样子。初听名字还以为是“膳食金字塔”那个样子呢。
帕累托图
帕累托图是一种包含条形图和折线图的图表,其中各个值均以条形降序形式表示,上升的累计总计由线条来表示。
名词听起来很高大上,实际上就是条形图和折线图的叠加呈现。
帕累托图.png盒形图
其实这里的盒形图就是我们说的箱线图,翻译不一样而已。吐个槽:好像Tableau的翻译比较“台湾腔”。最近发现唯有计算机类的文章不能看繁体字的,用词和简体字差好多,很容易绕晕小白
排名
这也是个略“水”的类别。其实就是对数据排序/选取子集来呈现,举的例子还是直方图+排序+颜色映射。
部分与整体关系
“部分与整体关系”图表显示单个部分占整体的比例,推荐的图表有饼图、区域图、堆叠条形图或树状图。
饼图的变种很多,空心环状的(width<1
),堆叠的(geom_col(position="dodge")
),都很好看,通过修改一些细节的参数就可以做出来。此外在其基础上还可以延伸出旭日图,在原有的一级分类的基础上,对各类内部进行二级分类,多层嵌套。看起来也挺酷炫的。
这里“堆叠条形图”也可以有两种形式,一是在柱形图的基础上,利用颜色按照内部各组分的比例进行分割,而是做成面积堆叠的折线图,其实在前面“量级”里已经画出来了。
空间(地理图)
这是很特殊的一类空间图表,这里的“空间”不是3D的意义,而是“地理模式”,位置信息。比如热点此时此刻的焦点,各省新冠确诊人数等。根据数据映射的方式,空间地图可以折腾成填充地图、点分布图、符号地图和密度地图。其实就是地图坐标对应数值的呈现方式不同而已。
空间.png看上去我们不会经常接触,事实上将底层模版换成人体,动物或者拟南芥的解剖图,就能应用到科研作图中了。以下的body map看起来眼熟不?来自鼎鼎大名的GEPIA。(如果你还不知道GEPIA,可以看看我写的version1和test version2的教程。version2最近正式上线了,应该也有很多针对新版的最新教程,可以去搜索。)图中显示了ERBB2基因在人体各器官中的表达水平分布。这样的图,tableau可能没法提供五花八门个性化的地图组件吧?就需要用别的方法了。
bogy map.png流程
tableau里面的解释:
流程.png流程图可以是表示随时间推移的运动的地图,例如桑基图。流程地图包括随时间变化的路径以及起源图表与目标图表之间的路径。
桑基图啊……,上面也举过例了。桑基图是以时间为x轴的,二维的线性的。而如同示例里,将坐标映射到地图上,则可以显示路径图。要是做成动态的,更拉风吧!想起来以前看过的滴滴出行大数据展示。
以上。议题二请移步《Tableau教我们讲故事(做PPT)》。不过似乎有点烂尾。