R 可视乎 | 华夫饼图

简介: 华夫饼图(waffle chart)分为块状华夫饼图和点状华夫饼图。华夫饼图是展示总数据的组类别情况的一种有效图表。它是西方的一种 由小方格组成的面包,所以这种图表因此得名为华夫饼图。

前言


华夫饼图(waffle chart)分为块状华夫饼图点状华夫饼图。华夫饼图是展示总数据的组类别情况的一种有效图表。它是西方的一种 由小方格组成的面包,所以这种图表因此得名为华夫饼图。


本文框架


XH(V0O(~2Z]SC)%47~B){H8.png


数据介绍


#相关包
library(ggplot2)
library(RColorBrewer)
library(reshape2)
nrows <- 10
categ_table <- round(table(mpg$class ) * ((nrows*nrows)/(length(mpg$class))))
sort_table<-sort(categ_table,index.return=TRUE,decreasing = FALSE)
Order<-sort(as.data.frame(categ_table)$Freq,index.return=TRUE,decreasing = FALSE)
df <- expand.grid(y = 1:nrows, x = 1:nrows)
df$category<-factor(rep(names(sort_table),sort_table), levels=names(sort_table))
Color<-brewer.pal(length(sort_table), "Set2")
head(df)

前 6 行数据如下所示,y 从 1~10,x 也是从 1~10。XH(V0O(~2Z]SC)%47~B){H8.png


ggplot 包绘制


块状华夫饼图

块状华夫饼图的小方格用不同颜色表示不同类别,适合用来快速检视数 据集中不同类别的分布和比例,并与其他数据集的分布和比例进行比较,让 人更容易找出当中模式。

接下来通过以上数据进行实现。代码看着很长,但是有一半都是主题的设置theme().

ggplot(df, aes(x = y, y = x, fill = category)) +
geom_tile(color = "white", size = 0.25) +
#geom_point(color = "black",shape=1,size=5) +
coord_fixed(ratio = 1)+ #x,y 轴尺寸固定, ratio=1 表示 x , y 轴长度相同
scale_x_continuous(trans = 'reverse') +#expand = c(0, 0),
scale_y_continuous(trans = 'reverse') +#expand = c(0, 0),
scale_fill_manual(name = "Category",
#labels = names(sort_table),
values = Color)+
theme(#panel.border = element_rect(fill=NA,size = 2),
panel.background = element_blank(),
plot.title = element_text(size = rel(1.2)),
axis.text = element_blank(),
axis.title = element_blank(),
axis.ticks = element_blank(),
legend.title = element_blank(),
legend.position = "right")

image.gif

点状华夫饼图

点状华夫饼图(dot matrix chart)以点为单位显示离散数据,每种颜色 的点表示一个特定类别,并以矩阵形式组合在一起,适合用来快速检视数据 集中不同类别的分布和比例,并与其他数据集的分布和比例进行比较,让人 更容易找出当中模式。当只有一个变量/类别时(所有点都是相同颜色),点 状华夫饼图相当于比例面积图

library(ggforce)
ggplot(df, aes(x0 = y, y0 = x, fill = category,r=0.5)) +
  geom_circle(color = "black", size = 0.25) +
  #geom_point(color = "black",shape=21,size=6) +
  coord_fixed(ratio = 1)+
  scale_x_continuous(trans = 'reverse') +#expand = c(0, 0),
  scale_y_continuous(trans = 'reverse') +#expand = c(0, 0),
  scale_fill_manual(name = "Category",
                    #labels = names(sort_table),
                    values = Color)+
  theme(#panel.border = element_rect(fill=NA,size = 2),
    panel.background  = element_blank(),
    plot.title = element_text(size = rel(1.2)),
    legend.position = "right")

IK10J09C@Y9TPR[QY0JI[{9.png

图解释:这个图从横坐标(y)看,在 y 为 10 时,有 2 个 pichup,一个 subcompact 等。从纵坐标(x)看,在 x 为 10 时,全是 suv 类型。从总体来看,suv 占最多数(16 个),2seater 占最少数(2 个)。


堆积型华夫饼图

这里还有一种比较有趣的华夫饼图。

library(dplyr)
nrows <- 10
ndeep <- 10
unit<-100
df <- expand.grid(y = 1:nrows, x = 1:nrows)
categ_table <- as.data.frame(table(mpg$class) * (nrows*nrows))
colnames(categ_table)<-c("names","vals")
categ_table<-arrange(categ_table,desc(vals))
categ_table$vals<-categ_table$vals /unit
tb4waffles <- expand.grid(y = 1:ndeep,x = seq_len(ceiling(sum(categ_table$vals) / ndeep)))
regionvec <- as.character(rep(categ_table$names, categ_table$vals))
tb4waffles<-tb4waffles[1:length(regionvec),]
tb4waffles$names <- factor(regionvec,levels=categ_table$names)
Color<-brewer.pal(nrow(categ_table), "Set2")
ggplot(tb4waffles, aes(x = x, y = y, fill = names)) +
  #geom_tile(color = "white") + #
  geom_point(color = "black",shape=21,size=5) + #
  scale_fill_manual(name = "Category",
                    values = Color)+
  xlab("1 square = 100")+
  ylab("")+
  coord_fixed(ratio = 1)+
  theme(#panel.border = element_rect(fill=NA,size = 2),
         panel.background  = element_blank(),
        plot.title = element_text(size = rel(1.2)),
        #axis.text = element_blank(),
        #axis.title = element_blank(),
        #axis.ticks = element_blank(),
        # legend.title = element_blank(),
        legend.position = "right")

%QW_VHQ%)OWIVH9}Y(_E5GI.png


waffle 包绘制


当然如果前面代码看的非常吃力的话, 这里有一个好用的包,专为华夫饼图做准备的。

waffle(parts, rows = 10, keep = TRUE, xlab = NULL, title = NULL, colors = NA, size = 2, flip = FALSE, reverse = FALSE, equal = TRUE, pad = 0, use_glyph = FALSE, glyph_size = 12, legend_pos = "right")

主要参数含义:

  • parts 用于图表的值的命名向量
  • rows 块的行数
  • keep 保持因子水平(例如,在华夫饼图中获得一致的图例)


简单例子

该华夫饼图,行为 8,one 占 80 个,two 占 30 个,tree 占 20 个,four 占 10 个。

parts <- c(One=80, Two=30, Three=20, Four=10)
chart <- waffle(parts, rows=8)
print(chart)

VHIN(6H1%S4CFNJ5P~7CD[O.png

目录
相关文章
|
算法 Unix Linux
Linux与Qt线程优先级的对应关系:一次全面解析
Linux与Qt线程优先级的对应关系:一次全面解析
300 0
|
数据采集 数据挖掘 API
主流电商平台数据采集API接口|【Python爬虫+数据分析】采集电商平台数据信息采集
随着电商平台的兴起,越来越多的人开始在网上购物。而对于电商平台来说,商品信息、价格、评论等数据是非常重要的。因此,抓取电商平台的商品信息、价格、评论等数据成为了一项非常有价值的工作。本文将介绍如何使用Python编写爬虫程序,抓取电商平台的商品信息、价格、评论等数据。 当然,如果是电商企业,跨境电商企业,ERP系统搭建,我们经常需要采集的平台多,数据量大,要求数据稳定供应,有并发需求,那就需要通过接入电商API数据采集接口,封装好的数据采集接口更方便稳定高效数据采集。
|
域名解析 Linux
百度搜索:蓝易云【非常有用的Linux网络诊断命令:traceroute详细使用教程!】
通过上述步骤,你可以使用traceroute命令在Linux系统中进行网络诊断和路径追踪。这对于定位网络连接问题、识别网络瓶颈和排查延迟问题非常有用。记住,具体的输出结果可能因网络拓扑和目标主机的配置而有所不同。
354 0
百度搜索:蓝易云【非常有用的Linux网络诊断命令:traceroute详细使用教程!】
|
Go Android开发 开发者
关于Xposed和Magisk的各方面比较(附Xposed框架各版本卡刷包及安装器)
说到搞机神器,不得不提江湖老大哥Xposed和后起之秀Magisk这两个框架,文章简单的介绍一下两者相似和不同之处
2118 0
|
5月前
|
机器学习/深度学习 人工智能 算法
基于YOLOv8的农业虫害检测102 类农业害虫识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
本项目基于YOLOv8打造农业虫害识别系统,支持102类常见农业虫害检测。提供2万张带标注数据集、预训练权重及PyQt5图形界面,实现图片、视频、摄像头等多种输入方式的开箱即用体验。附完整训练与部署教程,适合农业科研与智能监测场景。
基于YOLOv8的农业虫害检测102 类农业害虫识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
|
前端开发 索引
解决React报错Encountered two children with the same key
解决React报错Encountered two children with the same key
|
Ubuntu 应用服务中间件 网络安全
Ubuntu 22.04环境下为Odoo开启80端口的方法
通过以上步骤,你应该能够在Ubuntu 22.04环境下为Odoo开启80端口。访问你的域名时,Nginx会将请求代理到Odoo,允许你通过80端口访问Odoo应用。
465 1
ArcGIS:如何进行离散点数据插值分析(IDW)、栅格数据的重分类、栅格计算器的简单使用、缓冲区分析、掩膜?
ArcGIS:如何进行离散点数据插值分析(IDW)、栅格数据的重分类、栅格计算器的简单使用、缓冲区分析、掩膜?
940 0
|
存储 数据可视化 数据挖掘
R语言绘制圈图、环形热图可视化基因组实战:展示基因数据比较
R语言绘制圈图、环形热图可视化基因组实战:展示基因数据比较
|
存储 数据可视化 数据挖掘
R语言可视化:ggplot2冲积/桑基图sankey分析大学录取情况、泰坦尼克幸存者数据
R语言可视化:ggplot2冲积/桑基图sankey分析大学录取情况、泰坦尼克幸存者数据