常用 7 大类型图形可视化——分布

简介: 常用 7 大类型图形可视化——分布

引言

在进行数据分析时,免不了对结果进行可视化。那么,什么样的图形才最适合自己的数据呢?一个有效的图形应具备以下特点:

  • 能正确传递信息,而不会产生歧义;
  • 样式简单,但是易于理解;
  • 添加的图形美学应辅助理解信息;
  • 图形上不应出现冗余无用的信息。

本系列推文,小编将汇总可视化中常用 7 大类型图形,供读者参考。每类制作成一篇推文,主要参考资料为:Top 50 ggplot2 Visualizations[1]。其他类似功能网站,资料包括:

  1. 庄闪闪的可视化笔记——常用图形[2]
  2. R Graph Gallery[3]
  3. 《R 语言教程》——ggplot 的各种图形[4]

系列目录


本文主要介绍第四部分:分布相关图形。前几部分可见:

  1. 常用 7 大类型图形可视化——相关关系图形
  2. 常用 7 大类型图形可视化——偏差关系图形
  3. 常用 7 大类型图形可视化——排序关系图形

这一部分也是小编最常使用的图形。写过的相关推文如:

  1. 复现 sci 顶刊中的 3D 密度函数图
  2. 与 ggplot2 包相关的 109 种拓展包
  3. 用 ggpubr 包制图
  4. 绘制混合密度函数图以及添加分位数线

加载数据集

使用 ggplot2 包中自带数据集作为示例数据集。

library(ggplot2)
library(plotrix)
data("midwest", package = "ggplot2") #加载数据集



midwest 数据集


全局主题设置

全局配色、主题设置。注意,本文使用离散色阶,如果需要使用连续色阶,则需要重写。

options(scipen=999)  # 关掉像 1e+48 这样的科学符号
# 颜色设置(灰色系列)
cbp1 <- c("#999999", "#E69F00", "#56B4E9", "#009E73",
          "#F0E442", "#0072B2", "#D55E00", "#CC79A7")
# 颜色设置(黑色系列)
cbp2 <- c("#000000", "#E69F00", "#56B4E9", "#009E73",
          "#F0E442", "#0072B2", "#D55E00", "#CC79A7")
ggplot <- function(...) ggplot2::ggplot(...) + 
  scale_color_manual(values = cbp1) +
  scale_fill_manual(values = cbp1) + # 注意: 使用连续色阶时需要重写
  theme_bw()

4 分布

4.1 直方图

4.4.1 连续变量的直方图

连续变量的直方图可以使用 geom_bar()geom_histogram() 来完成。当使用 geom_histogram() 时,可以使用 bins 参数来控制分箱的数量。也可以使用 binwidth 设置每个分箱覆盖的范围。binwidth 的值与建立直方图的连续变量在同一个尺度上。

# 连续(数值)变量的直方图
g <- ggplot(mpg, aes(displ)) + scale_fill_brewer(palette = "Spectral")
g + geom_histogram(aes(fill=class), 
                   binwidth = .1, 
                   col="black", 
                   size=.1) +  # change binwidth
  labs(title="Histogram with Auto Binning", 
       subtitle="Engine Displacement across Vehicle Classes")



连续变量的直方图


g + geom_histogram(aes(fill=class), 
                   bins=5, 
                   col="black", 
                   size=.1) +   # change number of bins
  labs(title="Histogram with Fixed Bins", 
       subtitle="Engine Displacement across Vehicle Classes")



连续变量的直方图

4.1.2 分类变量的直方图

分类变量的直方图实际上是根据每个类别的频率绘制的条形图。

library(ggplot2)
theme_set(theme_classic())
# Histogram on a Categorical variable
g <- ggplot(mpg, aes(manufacturer))
g + geom_bar(aes(fill=class), width = 0.5) + 
  theme(axis.text.x = element_text(angle=65, vjust=0.6)) + 
  labs(title="Histogram on Categorical Variable", 
       subtitle="Manufacturer across Vehicle Classes")



分类变量的直方图


4.2 密度图

g <- ggplot(mpg, aes(cty))
g + geom_density(aes(fill=factor(cyl)), alpha=0.8) + 
    labs(title="Density plot", 
         subtitle="City Mileage Grouped by Number of cylinders",
         caption="Source: mpg",
         x="City Mileage",
         fill="# Cylinders")



密度图

4.3 箱线图

箱形图是研究数据分布的一个有用工具。它还可以显示多个组内的分布,以及中值、范围和异常值。箱子内的黑线表示中位数。箱顶是 75% 分位数,箱底是 25% 分位数。线的端点(又称晶须)距离为1.5*IQR,其中 IQR (四分位差)是 25% 到 75% 分位数之间距离。须外的点通常被认为是极值点。设置 varwidth=T将调整盒子的宽度,使其与观察的数量成比例。

g <- ggplot(mpg, aes(class, cty))
g + geom_boxplot(varwidth=T, fill="plum") + 
    labs(title="Box plot", 
         subtitle="City Mileage grouped by Class of vehicle",
         caption="Source: mpg",
         x="Class of Vehicle",
         y="City Mileage")



箱线图 1

g <- ggplot(mpg, aes(class, cty))
g + geom_boxplot(aes(fill=factor(cyl))) + 
  theme(axis.text.x = element_text(angle=65, vjust=0.6)) + 
  labs(title="Box plot", 
       subtitle="City Mileage grouped by Class of vehicle",
       caption="Source: mpg",
       x="Class of Vehicle",
       y="City Mileage")



箱线图 2

这个部分小编在科技论文中常常会使用,具体推文可见:R问题|数值模拟流程记录和分享

4.4 点图+箱线图

在箱线图的基础上,添加点图可以提供更清晰的信息。这些点交错排列,每个点代表一次观测。

g <- ggplot(mpg, aes(manufacturer, cty))
g + geom_boxplot() + 
  geom_dotplot(binaxis='y', 
               stackdir='center', 
               dotsize = .5, 
               fill="red") +
  theme(axis.text.x = element_text(angle=65, vjust=0.6)) + 
  labs(title="Box plot + Dot plot", 
       subtitle="City Mileage vs Class: Each dot represents 1 row in source data",
       caption="Source: mpg",
       x="Class of Vehicle",
       y="City Mileage")



4.5 塔夫特箱线图

这是一个简化版的箱线图。

library(ggthemes)
library(ggplot2)
theme_set(theme_tufte())  # from ggthemes
# plot
g <- ggplot(mpg, aes(manufacturer, cty))
g + geom_tufteboxplot() + 
      theme(axis.text.x = element_text(angle=65, vjust=0.6)) + 
      labs(title="Tufte Styled Boxplot", 
           subtitle="City Mileage grouped by Class of vehicle",
           caption="Source: mpg",
           x="Class of Vehicle",
           y="City Mileage")



塔夫特箱线图

4.6 小提琴图

小提琴图类似于箱线图,但显示了组内的密度。

g <- ggplot(mpg, aes(class, cty))
g + geom_violin() + 
  labs(title="Violin plot", 
       subtitle="City Mileage vs Class of vehicle",
       caption="Source: mpg",
       x="Class of Vehicle",
       y="City Mileage")

绘制箱线图及小提琴图也可以参考ggstance[5]ggpubr[6],或者去网站[7]搜索相关 ggplot 拓展的 R 包:与 ggplot2 包相关的 109 种拓展包。我写过的相关类型可见推文:用ggpubr包制图



4.7 金字塔图

金字塔图提供了一种独特的方式来可视化每个类别包含的样本比例。下面的金字塔是一个很好的例子,说明了在一个营销活动中每个阶段的用户留存率。

library(ggplot2)
library(ggthemes)
options(scipen = 999)  # turns of scientific notations like 1e+40
# Read data
email_campaign_funnel <- read.csv("https://raw.githubusercontent.com/selva86/datasets/master/email_campaign_funnel.csv")
# X Axis Breaks and Labels 
brks <- seq(-15000000, 15000000, 5000000)
lbls = paste0(as.character(c(seq(15, 0, -5), seq(5, 15, 5))), "m")
# Plot
ggplot(email_campaign_funnel, aes(x = Stage, y = Users, fill = Gender)) +   # Fill column
                              geom_bar(stat = "identity", width = .6) +   # draw the bars
                              scale_y_continuous(breaks = brks,   # Breaks
                                                 labels = lbls) + # Labels
                              coord_flip() +  # Flip axes
                              labs(title="Email Campaign Funnel") +
                              theme_tufte() +  # Tufte theme from ggfortify
                              theme(plot.title = element_text(hjust = .5), 
                                    axis.ticks = element_blank()) +   # Centre plot title
                              scale_fill_brewer(palette = "Dark2")  # Color palette



金字塔图

这个图经常有人在群里问,很多是横向的(只需要去除 coord_flip()),如果需要添加误差限,可以使用 geom_errorbar()

参考资料

[1]

Top 50 ggplot2 Visualizations: http://r-statistics.co/Top50-Ggplot2-Visualizations-MasterList-R-Code.html

[2]

庄闪闪的可视化笔记——常用图形: https://liangliangzhuang.github.io/R-tutorial/main-diagram-types.html

[3]

R Graph Gallery: https://www.r-graph-gallery.com/ggplot2-package.html

[4]

R 语言教程——ggplot 的各种图形: https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/ggplotvis.html

[5]

ggstance: https://github.com/lionel-/ggstance

[6]

ggpubr: https://rpkgs.datanovia.com/ggpubr/

[7]

网站: https://exts.ggplot2.tidyverse.org/gallery/

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
数据可视化
R绘图 | 包含/比例关系环图
R绘图 | 包含/比例关系环图
155 0
|
6月前
|
数据可视化 定位技术
r语言空间可视化绘制道路交通安全事故地图
r语言空间可视化绘制道路交通安全事故地图
ArcGIS:如何进行离散点数据插值分析(IDW)、栅格数据的重分类、栅格计算器的简单使用、缓冲区分析、掩膜?
ArcGIS:如何进行离散点数据插值分析(IDW)、栅格数据的重分类、栅格计算器的简单使用、缓冲区分析、掩膜?
449 0
R语言绘制组间比较散点图并自动添加P值信息
查询ggprism包使用时候发现官网给出的一示例图比较常用,这里记录学习一下。
220 3
|
数据可视化 Go 数据库
DiVenn一款用于比较基因列表的交互式Venn图绘制工具
Divenn一种基于网络的基于Web的工具 Divenn 可以将来自多个RNA-seq实验中的基因列表进行比较,并显示每个基因(集)的调控水平和整合到Kegg pathway和GO term的数据信息。我们通过该工具更加方便的了解重叠基因与其相关的pathway或Go terms之间的表达模式,十分有趣。
260 0
|
数据可视化 数据挖掘
常用 7 大类型图形可视化——偏差关系图形
常用 7 大类型图形可视化——偏差关系图形
216 0
|
数据可视化 数据挖掘
常用 7 大类型图形可视化——组成成分图形
常用 7 大类型图形可视化——组成成分图形
120 0
|
数据可视化 数据挖掘 数据格式
常用 7 大类型图形可视化——变化趋势图形
常用 7 大类型图形可视化——变化趋势图形
99 0
|
数据可视化 数据挖掘
常用 7 大类型图形可视化——排序关系图形
常用 7 大类型图形可视化——排序关系图形
163 0
|
数据可视化 数据挖掘
常用 7 大类型图形可视化——群体关系图形
常用 7 大类型图形可视化——群体关系图形
142 0