可视化系列汇总——相关关系图形

简介: 可视化系列汇总——相关关系图形

引言

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

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

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

  1. 庄闪闪的可视化笔记——常用图形[2]
  2. R Graph Gallery[3]
  3. 《R 语言教程》——ggplot 的各种图形[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()

1. 相关关系

1.1 两个变量散点图

展示两个变量之间的相关关系,最常使用的是散点图。在 ggplot 中,使用geom_point()绘制。此外,默认情况下,geom_smooth 会绘制一条平滑线(基于 losses ),可以通过设置method='lm'来调整以绘制最佳拟合的线。

# Scatterplot
gg <- ggplot(midwest, aes(x=area, y=poptotal)) + 
  geom_point(aes(col=state, size=popdensity)) + 
  geom_smooth(method="loess", se=F) + 
  xlim(c(0, 0.1)) + 
  ylim(c(0, 500000)) + 
  labs(subtitle="Area Vs Population", 
       y="Population", 
       x="Area", 
       title="Scatterplot", 
       caption = "Source: midwest")
plot(gg)



两个变量散点图


1.2 环绕式散点图

使用 ggalt 包中的 geom_encircle() 函数可实现在散点图中圈选特定区域:

# install.packages("ggalt")
library(ggalt)
options(scipen = 999)
library(ggplot2)
library(ggalt)
## 设定筛选条件
midwest_select <- midwest[midwest$poptotal > 350000 & 
                            midwest$poptotal <= 500000 & 
                            midwest$area > 0.01 & 
                            midwest$area < 0.1, ]
# Plot
ggplot(midwest, aes(x=area, y=poptotal)) + 
  geom_point(aes(col=state, size=popdensity)) +   # draw points
  geom_smooth(method="loess", se=F) + 
  xlim(c(0, 0.1)) + 
  ylim(c(0, 500000)) +   # draw smoothing line
  geom_encircle(aes(x=area, y=poptotal), 
                data=midwest_select, 
                color="red", 
                size=2, 
                expand=0.08) +   # encircle
  labs(subtitle="Area Vs Population", 
       y="Population", 
       x="Area", 
       title="Scatterplot + Encircle", 
       caption="Source: midwest")


环绕式散点图

1.3 抖动图

抖动图可以解决数据点重叠的问题。通过 geom_jitter() 函数中的 width 参数设置抖动范围,重叠点在其原始位置周围随机抖动。

g <- ggplot(mpg, aes(cty, hwy))
g + geom_jitter(width = .5, size=1) +
  labs(subtitle="mpg: city vs highway mileage", 
       y="hwy", 
       x="cty", 
       title="Jittered Points")


抖动图

1.4 计数图

克服数据点重叠问题的第二个选择是使用计数图 geom_count()。重叠点越多,圆就越大。

g + geom_count(col="tomato3", show.legend=F) +
  labs(subtitle="mpg: city vs highway mileage", 
       y="hwy", 
       x="cty", 
       title="Counts Plot")


计数图

1.5 气泡图

气泡图适合 4 维数据,其中两个是数值型(分别是 X 和 Y),另一个是分类变量(用 color 表示)和另一个数值变量(用 size 表示)。

data(mpg, package="ggplot2")
mpg_select <- mpg[mpg$manufacturer %in% c("audi", "ford", "honda", "hyundai"), ]
# Scatterplot
theme_set(theme_bw())  # pre-set the bw theme.
g <- ggplot(mpg_select, aes(displ, cty)) + 
  labs(subtitle="mpg: Displacement vs City Mileage",
       title="Bubble chart")
g + geom_jitter(aes(col=manufacturer, size=hwy)) + 
  geom_smooth(aes(col=manufacturer), method="lm", se=F)


气泡图

1.6 边际直方图/箱线图

如果您想在同一个图中显示变量的关系和分布,可以使用边际直方图。更改 ggMarginal() 函数中的 type 参数可以将边际直方图换成箱线图或者密度图。

library(ggExtra)
data(mpg, package="ggplot2")
# Scatterplot
theme_set(theme_bw())  
mpg_select <- mpg[mpg$hwy >= 35 & mpg$cty > 27, ]
g <- ggplot(mpg, aes(cty, hwy)) + 
  geom_count() + 
  geom_smooth(method="lm", se=F)
ggMarginal(g, type = "histogram", fill="transparent")



ggMarginal(g, type = "boxplot", fill="transparent")


ggMarginal(g, type = "density", fill="transparent")


1.7 相关系数图

相关系数图可以查看同一组数据中多个连续变量的相关性。

library(ggcorrplot)
# Correlation matrix
data(mtcars)
corr <- round(cor(mtcars), 1)
# Plot
ggcorrplot(corr, hc.order = TRUE, 
           type = "lower", 
           lab = TRUE, 
           lab_size = 3, 
           method="circle", 
           colors = c("tomato2", "white", "springgreen3"), 
           title="Correlogram of mtcars", 
           ggtheme=theme_bw)



相关系数图

参考资料

[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

目录
相关文章
|
机器学习/深度学习 自然语言处理 算法
【文本摘要(1)】抽取式之textrank(无监督学习):生成200字以内摘要
【文本摘要(1)】抽取式之textrank(无监督学习):生成200字以内摘要
388 0
|
安全 API 数据安全/隐私保护
微服务的安全性考虑
【8月更文第29天】随着微服务架构的流行,确保这些服务的安全性成为了系统设计中的一个关键因素。本文将探讨微服务环境下如何确保数据安全、API 安全以及网络通信的安全,并提供相应的代码示例。
276 1
|
Web App开发 数据可视化 前端开发
前端数据可视化插件(四)关系图
前端数据可视化插件(四)关系图
前端数据可视化插件(四)关系图
|
机器学习/深度学习 人工智能 搜索推荐
AI实践应用
AI实践横跨网络安全、软件测试、深度学习、生物识别、日常生活、计算机网络及更多领域。例如,AI用于防御网络攻击、自动化测试、家务机器人、人脸识别、文本编辑、搜索引擎优化、聊天机器人、智能医疗、工业4.0和金融风控。随着技术进步,AI持续推动各行业的数字化与智能化变革。
403 2
|
10月前
|
分布式计算 资源调度 大数据
Pandas高级数据处理:分布式计算
随着数据量增长,传统的Pandas单机处理难以应对大规模数据。Dask作为Pandas的补充,支持分布式计算,能处理更大数据集并提高效率。本文介绍Dask在数据加载、类型推断和分区管理中的常见问题及解决方法,如使用`dask.dataframe.read_csv()`、指定`dtype`、调整分区数等,并总结了内存溢出、类型不匹配和网络通信失败等报错的解决方案。
228 25
|
10月前
|
存储 供应链 数据建模
供应链场景使用ClickHouse最佳实践
在供应链管理中,ClickHouse凭借其高性能查询、高压缩比和实时数据处理能力,能够显著提升数据处理和分析的效率。通过合理的数据建模、优化实践和性能调优,可以充分发挥ClickHouse的优势,为供应链管理提供强有力的支持。
206 12
|
12月前
|
机器学习/深度学习 人工智能 搜索推荐
AI在医疗领域的革命:智能诊断系统的未来
在科技日新月异的今天,人工智能(AI)技术正逐渐渗透到我们生活的每一个角落,其中医疗领域尤为显著。本文将探讨AI在医疗诊断中的应用及其带来的变革,重点介绍智能诊断系统的发展现状与未来趋势。通过深入浅出的方式,我们将揭示AI如何改变传统医疗模式,提高诊断效率和准确性,最终造福广大患者。
|
存储 人工智能 开发者
三文带你轻松上手鸿蒙的AI语音02-声音文件转文本
三文带你轻松上手鸿蒙的AI语音02-声音文件转文本
359 0
三文带你轻松上手鸿蒙的AI语音02-声音文件转文本
|
机器学习/深度学习 边缘计算 人工智能
未来操作系统的发展趋势与挑战
随着科技的不断进步,未来操作系统将面临着更多的挑战和机遇。本文将探讨未来操作系统的发展趋势,包括人工智能、物联网、边缘计算等技术的融合,以及可能面临的安全和隐私挑战。同时,本文也将分析未来操作系统的发展方向,以及在新技术和新应用下,操作系统需要做出的调整和创新。
676 0
|
传感器 人工智能 算法
逐渐走向实用,揭秘世界顶尖人形机器人ASIMO
从《列子·汤问》传说中以假乱真的舞者到现在科幻作品中的各种类人机器人,人类从没停止过对创造类人机器的幻想。而随着机器人学、人工智能和计算科学等科学技术的发展,人类长久以来的梦想正在逐渐成为现实,我们的生活中也渐渐开始有了它们的身影。
1524 0
逐渐走向实用,揭秘世界顶尖人形机器人ASIMO