《R语言实战》自学笔记68-相关图和马赛克图

Python09

《R语言实战》自学笔记68-相关图和马赛克图,第1张

数据准备

corrgram包corrgram()函数。

corrgram(x, order=, panel=, text.panel=, diag.panel=)

其中,x是一行一个观测的数据框。当order = TRUE时,相关矩阵将使用主成分分析法对变量

重排序,这将使得二元变量的关系模式更为明显。选项panel设定非对角线面板使用的元素类型。你可以通过选项 lower.panel和upper.panel来分别设置主对角线下方和上方的元素类型。而text.panel和diag.panel选项控制着主对角线元素类型。

下三角部分,默认地,蓝色和从左下指向右上的斜杠表示单元格中的两个变量呈正相关。反过来,红色和从左上指向右下的斜杠表示变量呈负相关。色彩越深,饱和度越高,说明变量相关性越大。相关性接近于0的单元格基本无色。上三角单元格用饼图展示了相同的信息。颜色的功能同上,但相关性大小由被填充的饼图块的大小来展示。正相关性将从12点钟处开始顺时针填充饼图,而负相关性则逆时针方向填充饼图。

可以使用colorRampPallette()函数来指定四种颜色。

colorRampPalette 函数支持自定义的创建一系列的颜色梯度。

马赛克图(Mosaic Plot)是利用列联表对分类数据进行的图形表示,它可观察两个或多个分类变量之间的关系。

整个图形的长、宽概率值均为1,其被划分为多个矩形,每个矩形边长与所关联分类变量的概率分布成比例。

在马赛克图中,嵌套矩形面积正比于单元格频率,其中该频率即多维列联表中的频率。颜色和/或阴影可表示拟合模型的残差值。

vcd包mosaic()函数绘制马赛克图

mosaic()函数可按如下方式调用

mosaic(table)

其中table是数组形式的列联表。

另外也可用

mosaic(formula, data=)

其中formula是标准的R表达式,data设定一个数据框或者表格。

shade=TRUE将根据拟合模型的皮尔逊残差值对图形上色。

legend=TRUE 将展示残差的图例。

图表解读:图3反映的2021年品种a相对b而言,品种a的v1值大的比例较b高,2020年,两品种v1值大小均衡;2020年v1值在N1条件下数值大的比例较N2高,2021年两氮水平平衡

参考资料:

上图是用Guardian’s list 中"一生要听的1000首歌”的歌曲的数据,描绘的马赛克图,数据主要分为年份(year)和主题(themes) 两个变量。横轴为年份,从1910s~2000s。纵轴为主题(Heartbreak, Love…)。在观察某一项数据所占的比重的时候,只要是比较它在横纵中的比例。比如在1910s-50s之间,people and place这一个主题在这段时间所占的比重是最高的,但是就所有年份来说1910s-50s这段时间的歌曲所占的比重很低,相反1960s, 和1970s的歌曲所占的比重相对较高。

作者—关于为什么翻译为马赛克图,是因为这个名字之前就有人翻译过了. 我是沿用了之前的翻译,这个称呼很有歧义呵呵,所以文章里面就直接用英文的mosaic plot

          Mosaic plot常常用来展示Categorical data( 分类数据 )(关于不同的数据类别, 参照连接 更严谨英文比较好的朋友可以看[1]),mosaic plot 强大的地方在于它能够很好的展示出2个或者多个分类型变量(categorical variable)的关系. 它也可以定义为用图像的方式展示分类型数据。

        首先 可能要先简单的介绍一下什么是分类数据,分类数据是统计数据中的一种,它主要是用来反映数据类别的数据, 比如 性别分为男和女,再比如年龄段分为幼儿,少年,青年,成年,老年等等。下面是一个数据图表,大家可以感觉一下什么是分类型数据.

图中显示的是在泰坦尼克事件中不同等级船仓中男女的死亡人数。这里一共有三个变量

     性别: 男,女

     幸存: 是,否

     身份:头等舱,次等舱,低等舱,船员

那要怎么样构建mosaic plot呢?[2]

        我们有一个长度为1的正方形,我们可以根据男女把正方形分割成2个部分比如现在的男女比例是65/35.那我们就把它切割成2个部分比例是65/35。

下一步,我们知道女性的幸存比例是67%幸存,33%死亡,就可以将女性的那一栏切割成67/33两个部分,而男性只有17%幸存下来。我们就可以将男性那一栏切割成17/83. 当然也可在切好的模块之间填充一个空格方便比较。

3.可以继续将方格根据数据的比例进行切割。这里就不完整的解析了。根据之前提供的数据图表的数据构建下面的泰坦尼克时间人员死亡数图

深色的部分表示死亡(no survive),浅色的部分表示存活的(yes, survive).从左到右,可以看到有四个栏分别表示1st(头等舱), 2nd(次等舱),….。由上到下可以表示性别为男和女,在图里男性在船上占了绝大多数的比例。

Tell A Story(说一个故事)[3]

每个数据可视化图表背后都有一个故事,这也是数据可视化中很重要的一个环节,我们可以称之为data story。通常情况下我们可用数据去解释一些我们所不知道的事情。那在泰坦尼克号事件背后的数据故事,我们可以用构建的mosaic plot,很好的讲述出来。

1.在这次事件中,当灾难发生的时候,人们倾向于保护妇女和儿童,所以我们可以看到,妇女存活着的比例要远远高于男性。

2.是不是富有的人在灾难发生的时候有优先权呢?根据我们构建的图标,答案是的。不管是男性还是女性,头等舱中的存活率要高于次等舱和低等舱

3.船员是不是都在关键的时刻会保护你呢?这个结论可能有待商榷,但是我从我们上面构建的图标可以看到。在四中身份(头等,次等,低等,船员)中船员的存活了是排在第二位的。(我们可以理解有些船员,带着有钱人跑了。)

4.当然还有跟多的理解,如果读者看过泰坦尼克号的话,在读这幅图的时候应该会觉的很有意思。

Further Reading

Are Mosaic Plots Worthwhile?

A Brief History of the Mosaic Display

马赛克图

马赛克图 (R语言) 

Reference

[1]Stevens, Stanley Smith. "On the theory of scales of measurement." (1946).

[2] https://medschool.vanderbilt.edu/cqs/files/cqs/media/DrTsai2_0.pdf

[3]Segel, Edward, and Jeffrey Heer. "Narrative visualization: Telling stories with data." IEEE transactions on visualization and computer graphics 16.6 (2010): 1139-1148.

[4] https://www.perceptualedge.com/articles/visual_business_intelligence/are_mosaic_plots_worthwhile.pdf