# R可视乎|马赛克图

## 2.数据介绍

```library(ggplot2)
library(RColorBrewer)
library(reshape2)  #提供melt()函数
library(plyr)      #提供ddply()函数,join()函数

df <- data.frame(segment = c("A", "B", "C","D"),
Alpha = c(2400	,1200,	600	,250),
Beta = c(1000	,900,	600,	250),
Gamma = c(400,	600	,400,	250),
Delta = c(200,	300	,400,	250))

melt_df<-melt(df,id="segment")
```

```segpct<-rowSums(df[,2:ncol(df)])
for (i in 1:nrow(df)){
for (j in 2:ncol(df)){
df[i,j]<-df[i,j]/segpct[i]*100  #将数字转换成百分比
}
}

segpct<-segpct/sum(segpct)*100
df\$xmax <- cumsum(segpct)
df\$xmin <- (df\$xmax - segpct)

dfm <- melt(df, id = c("segment", "xmin", "xmax"),value.name="percentage")
colnames(dfm)[ncol(dfm)]<-"percentage"

#ddply()函数使用自定义统计函数，对data.frame分组计算
dfm1 <- ddply(dfm, .(segment), transform, ymax = cumsum(percentage))
dfm1 <- ddply(dfm1, .(segment), transform,ymin = ymax - percentage)
dfm1\$xtext <- with(dfm1, xmin + (xmax - xmin)/2)
dfm1\$ytext <- with(dfm1, ymin + (ymax - ymin)/2)

#join()函数，连接两个表格data.frame
dfm2<-join(melt_df, dfm1, by = c("segment", "variable"), type = "left", match = "all")
```

## 2.方法

### 2.1 ggplot2包的geom_rect()函数

```ggplot()+
geom_rect(aes(ymin = ymin, ymax = ymax, xmin = xmin, xmax = xmax, fill = variable),dfm2,colour = "black") +
geom_text(aes(x = xtext, y = ytext,  label = value),dfm2 ,size = 4)+
geom_text(aes(x = xtext, y = 103, label = paste("Seg ", segment)),dfm2 ,size = 4)+
geom_text(aes(x = 102, y = seq(12.5,100,25), label = c("Alpha","Beta","Gamma","Delta")), size = 4,hjust = 0)+
scale_x_continuous(breaks=seq(0,100,25),limits=c(0,110))+
theme(panel.background=element_rect(fill="white",colour=NA),
panel.grid.major = element_line(colour = "grey60",size=.25,linetype ="dotted" ),
panel.grid.minor = element_line(colour = "grey60",size=.25,linetype ="dotted" ),
text=element_text(size=15),
legend.position="none")
```

### 2.2 vcd包的mosaic()函数

```library(vcd)
table<-xtabs(value ~variable+segment, melt_df)
```

### 2.3 graphics包的mosaicplot()函数

```library(graphics)
library(wesanderson) #颜色提取
mosaicplot( ~segment+variable,table, color = wes_palette("GrandBudapest1"),main = '')
```

## 参考

1. 《R数据可视化之美》

0 条评论

• ### R语言 马赛克图

注意：mosaicplot和mosaic绘制马赛克图是基于多（二维以上）列联表。

• ### R可视乎｜克利夫兰点图系列

在可靠性实验中，不同产品的测试失效时间可以通过克利夫兰点图进行可视化，今天就对该系列的图进行系统的介绍。主要参考张杰博士的《R语言数据可视化之美》[1]，并结合...

• ### R可视乎|饼图

饼图（pie chart）被广泛地应用于各个领域，用于表示不同分类的占比情况，通过弧度大小来对比各种分类。饼图通过将一个圆饼按照分类的占比划分成多个切片，整个圆...

• ### R可视乎|圆环图

对于饼图，上一次学习《R语言数据可视化之美》的时候主要利用graphics包和ggplot包（可见R可视乎|饼图）。这几天的学习中发现还有一个更加简便的方法——...

• ### R可视乎|瀑布图

瀑布图（waterfall plot） 用于展示拥有相同的X轴变量数据（如相同的时间序列）、不同的Y轴离散型变量（如不同的类别变量）和Z轴数值变量，可以清晰地展...

• ### R可视乎|气泡图

气泡图是一种多变量图表，是散点图的变体，也可以认为是散点图和百分比区域图的组合[1]。气泡图最基本的用法是使用三个值来确定每个数据序列，和散点图一样。气泡图通过...

• ### R可视乎|等高线图

等高线图（contour map） 是可视化二维空间标量场的基本方法[1]，可以将三维数据使用二维的方法可视化，同时用颜色视觉特征表示第三维数据，如地图上的等高...

• ### 基于 Go 协程实现图片马赛克应用（上）：同步版本

介绍完 Go 并发编程基础和常见并发模式的实现后，我们来看一个完整的项目 —— 基于 Go 语言实现照片马赛克功能，为了对比并发与非并发的性能差异，我们先通过同...

• ### iOS多边形马赛克的实现（上）

马赛克（英语：Mosaic）是镶嵌艺术的音译，原本是指一种装饰艺术，通常使用许多小石块或有色玻璃碎片拼成图案，在教堂中的玻璃艺品，又称为花窗玻璃（stained...

• ### R可视乎|分面一页多图

双变量数据可视化可能对于我们比较简单， 但是如果变量是三个或者更多，怎么在一幅图一起显示呢？今天我们就来讨论这个问题，解决方案有两种。

• ### R可视乎|复合饼图系列

散点复合饼图（compound scatter and pie chart）可以展示三个数据变量的信息：(x, y, P)，其中x和y决定气泡在直角坐标系中的位...

• ### R可视乎 | 散点图系列（1）

散点图（scatter graph、point graph、X-Y plot、scatter chart ）是科研绘图中最常见的图表类型之一，通常用于显示和比较...

• ### R可视乎 | 散点图系列（2）

散点图（scatter graph、point graph、X-Y plot、scatter chart ）是科研绘图中最常见的图表类型之一，通常用于显示和比较...

• ### 日迹中视频编辑滤镜效果实现方法

导语 本文简要分析，日迹视频解码流程以及视频滤镜的实现原理 需求背景：日迹需要的编辑滤镜效果预览图 图1：日迹滤镜效果 要实现产品想要的...

• ### Linux实践 - 创建用户

PS: 记不住ip，所以在个人电脑的hosts文件中设置了个别名，因为用的腾讯云服务器，就叫qqcloud。

• ### 日本神秘男子开发可自动去码AI，能“伪造”性器，震动业界

马赛克是常见且广泛应用的图像/视频处理方式，它能将图像/视频中某些特定区域的色阶细节劣化，并将区域内色块打乱。这样看起来打码的地方就像是一个个小方格组成的，人们...

• ### three.js 将图片马赛克化

这篇郭先生来说说BufferGeometry，类型化数组和粒子系统的使用，并且让图片有马赛克效果（同理可以让不清晰的图片清晰化），如图所示。在线案例点击图片马赛...

• ### python实现马赛克拼图！

**命令：python mosaic_v2.py -i "D:\image\pic.jpg" -t "D:\image"

• ### 拓端tecdat|R语言 PCA(主成分分析)，CA(对应分析)夫妻职业差异和马赛克图可视化

主成分分析法是数据挖掘中常用的一种降维算法,是Pearson在1901年提出的,再后来由hotelling在1933年加以发展提出的一种多变量的统计方法，其最主...