交互式散点图,快速提升你的PPT观赏性|每日科研绘图·24-08-17

news2024/9/20 16:25:24

一、散点图基础概念

散点图是一种非常直观且功能强大的图表,用于探索和展示两个数值变量之间的相关性。这种图表通过在二维平面上绘制数据点,使得观察者能够一眼看出变量间的潜在联系。

1-1:散点图的构成

  1. X轴(横轴):通常用于表示自变量或解释变量,每个数据点在X轴上的坐标对应其第一个变量的数值。

  2. Y轴(纵轴):用于表示因变量或响应变量,每个数据点在Y轴上的坐标对应其第二个变量的数值。

  3. 数据点:每个数据点在图表上的位置由其在两个变量上的数值决定,形成了散点图的主要视觉元素。


1-2:散点图的应用

  1. 相关性分析:散点图可以揭示两个变量之间的线性关系、非线性关系,或者没有明显关系。

  2. 趋势识别:通过观察数据点的分布模式,可以识别出变量间增加、减少或波动的趋势。

  3. 异常值检测:散点图上远离大多数数据点的个别点可能表示数据中的异常值或离群点。

  4. 分布特征观察:散点图可以帮助观察数据的分布特征,如对称性、偏态等。


1-3:散点图的高级特性

  1. 颜色和形状编码:为了进一步区分数据点,可以根据第三个变量给数据点上色或改变形状。

  2. 数据平滑:在散点图上添加趋势线或回归线,可以帮助观察数据的总体趋势。

  3. 透明度调整:当数据点过多且重叠时,调整数据点的透明度可以更清晰地展示数据的密度。

  4. 交互式元素:在交互式图表中,用户可以通过悬停或点击来获取特定数据点的详细信息。


1-4:散点图的制作

  1. 数据准备:确保数据集中包含两个数值变量,以及可能的分类变量用于颜色或形状编码。

  2. 选择图表工具:使用统计软件或编程语言(如R、Python的matplotlib或seaborn库)来创建散点图。

  3. 调整图表参数:根据需要调整轴标签、图例、标题等,确保图表信息清晰且易于理解。

  4. 分析和解释:制作完成后,对散点图进行分析,提取有关变量关系的见解,并据此做出解释。


1-5:代码演示

以下是一个示例,考虑了1460套公寓的价格及其地面居住面积。该数据集来自Kaggle机器学习竞赛。

# 导入所需的库
library(tidyverse) # 数据处理和绘图
library(hrbrthemes) # 提供美观的主题
library(viridis) # 提供颜色调色板

# 从GitHub加载数据集
data <- read.table("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/2_TwoNum.csv", header=T, sep=",") %>% 
  dplyr::select(GrLivArea, SalePrice) # 选择需要的列:地面居住面积和销售价格

# 绘制散点图
data %>%
  ggplot( aes(x=GrLivArea, y=SalePrice/1000)) + # 设置x轴为地面居住面积,y轴为销售价格(千美元)
    geom_point(color="#69b3a2", alpha=0.6) + # 添加散点,颜色为#69b3a2,透明度为0.6
    ggtitle("Ground living area partially explains sale price of apartments") + # 添加标题
    theme_minimal() + # 使用简洁的主题
    theme(
      plot.title = element_text(size=12) # 设置标题字体大小为12
    ) +
    ylab('Sale price (k$)') + # 设置y轴标签
    xlab('Ground living area') # 设置x轴标签

image-20240817091514227


二、检测变量关系

散点图是一种多功能的可视化工具,它不仅可以揭示变量之间的线性关系,还可以揭示更多复杂的关系和数据特征。

2-1:散点图的多维度分析

  1. 正线性关系

    • 在正线性关系中,数据点呈现出从左下角到右上角的上升趋势,这种模式表明随着一个变量的增加,另一个变量也相应增加。
  2. 负线性关系

    • 与正线性关系相反,负线性关系中数据点呈现出从左上角到右下角的下降趋势,表明一个变量的增加伴随着另一个变量的减少。
  3. 无关系

    • 当数据点在散点图上随机分布,没有明显的上升或下降趋势时,这表明两个变量之间可能不存在线性关系。
  4. 非线性关系

    • 非线性关系可以通过数据点形成的曲线或复杂图案来识别,如S形、波浪形或其他不规则形状,这表明变量间的关系可能需要更复杂的数学模型来描述。
  5. 群组模式

    • 群组模式可能表现为数据点在特定区域的聚集,这可能指示数据中存在某些未观察到的分类变量或自然分组。
  6. 异常值

    • 异常值在散点图上表现为远离其他数据点的孤立点,它们可能是由于测量误差、数据录入错误或真实的离群现象。

2-2:散点图的统计分析

  1. 相关系数

    • 相关系数(如皮尔逊相关系数)是衡量两个变量之间线性关系强度和方向的统计指标。然而,高相关系数并不总是意味着因果关系。
  2. 回归分析

    • 回归分析可以用来拟合一个模型,描述Y变量如何依赖于X变量。这可以是线性回归,也可以是更复杂的非线性回归模型。
  3. 模型诊断

    • 通过散点图可以进行模型诊断,检查拟合的模型是否合理。残差图可以帮助识别模型假设的违反情况。

2-3:散点图的高级可视化技术

  1. 颜色编码

    • 通过颜色编码,可以展示数据点的额外维度,如时间序列的不同阶段或不同类别的成员。
  2. 大小编码

    • 数据点的大小可以表示第三个变量的数值大小,为散点图添加更多信息层次
  3. 透明度调整

    • 在数据点非常密集的区域,调整透明度可以帮助区分数据点的密度和分布。
  4. 交互式元素

    • 交互式散点图允许用户通过工具提示、点击或拖动来探索数据点的详细信息,提供更深入的数据分析体验。

2-4:代码演示

# 创建数据
d1 <- data.frame(x=seq(1,100), y=rnorm(100), name="No trend") # 创建无趋势数据
d2 <- d1 %>% mutate(y=x*10 + rnorm(100,sd=60)) %>% mutate(name="Linear relationship") # 创建线性关系数据
d3 <- d1 %>% mutate(y=x^2 + rnorm(100,sd=140)) %>% mutate(name="Square") # 创建平方关系数据
d4 <- data.frame( x=seq(1,10,0.1), y=sin(seq(1,10,0.1)) + rnorm(91,sd=0.6)) %>% mutate(name="Sin") # 创建正弦关系数据
don <- do.call(rbind, list(d1, d2, d3, d4)) # 将四个数据集合并为一个数据框

# 绘图
don %>%
  ggplot(aes(x=x, y=y)) + # 设置x轴和y轴的变量
    geom_point(color="#69b3a2", alpha=0.8) + # 添加散点图,颜色为#69b3a2,透明度为0.8
    theme_minimal() + # 使用简洁的主题
    facet_wrap(~name, scale="free") # 根据'name'列分面显示,每个子图的尺度自由

image-20240817092215726


三、交互性

交互性是散点图的一大优势。它允许用户放大图形的特定部分,以检测更精确的模式。同时,它还允许用户悬停于点上以获取更多关于它们的信息。

# 导入plotly库,它可以将任何ggplot2图形转换为交互式图形
library(plotly)

# 创建一个新的数据框,其中包含用于悬停信息的文本
p <- data %>%
  mutate(text=paste("Apartment Number: ", seq(1:nrow(data)), "
Location: New York
Any other information you need..", sep="")) %>%
  ggplot( aes(x=GrLivArea, y=SalePrice/1000, text=text)) + # 设置x轴、y轴和悬停文本
    geom_point(color="#69b3a2", alpha=0.8) + # 添加散点图,颜色为#69b3a2,透明度为0.8
    ggtitle("Ground living area partially explains sale price of apartments") + # 添加标题
    theme_minimal() + # 使用简洁的主题
    theme(
      plot.title = element_text(size=12) # 设置标题字体大小为12
    ) +
    ylab('Sale price (k$)') + # 设置y轴标签
    xlab('Ground living area') # 设置x轴标签

# 使用ggplotly函数将ggplot2图形转换为交互式图形,并设置悬停信息为"text"
ggplotly(p, tooltip="text")

在RStudio中是可以交互的,这里无法显示,后期我会介绍如何运用交互式图表提升自己的演示效果。


四、边缘分布

散点图有时会辅以边缘分布。这确实为图形增添了洞察力,揭示了两个变量的分布情况。

边缘分布通常以小图表的形式附加在主散点图的边缘,可以是直方图、密度图或箱线图等形式。这些小图表展示了每个变量在独立于另一个变量的情况下的分布特征,如下:

  • X轴边缘分布:展示了所有数据点在X变量上的分布情况,帮助观察者了解X变量的频率分布、集中趋势和离散程度。
  • Y轴边缘分布:展示了所有数据点在Y变量上的分布情况,同样有助于观察者了解Y变量的统计特性。

通过结合散点图和边缘分布,分析者可以更全面地理解数据集。这种组合不仅显示了变量之间的关联性,还提供了每个变量的单独统计信息,从而增强了数据解释的深度和准确性。例如,如果散点图显示变量之间存在线性关系,边缘分布则可以揭示这种关系是否受到极端值或偏态分布的影响。


# 导入ggExtra库,它提供了一些额外的ggplot2功能,如添加边际直方图
library(ggExtra)

# 创建一个ggplot2散点图
p <- data %>%
  ggplot( aes(x=GrLivArea, y=SalePrice/1000)) + # 设置x轴和y轴的变量
    geom_point(color="#69b3a2", alpha=0.8) + # 添加散点图,颜色为#69b3a2,透明度为0.8
    theme_minimal() + # 使用简洁的主题
    theme(
      legend.position="none" # 不显示图例
    )

# 使用ggExtra库的ggMarginal函数为散点图添加边际直方图,类型为直方图,颜色为灰色
ggExtra::ggMarginal(p, type = "histogram", color="grey")

image-20240817093907661

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2047868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电话语音机器人优势很多

智能语音机器人近年来备受关注&#xff0c;受到很多个人或是企业的青睐&#xff0c;其广泛受到欢迎归因于智能语音机器人对电话销售提供了极大的帮助&#xff0c;其可以完美替代人工进行电销外呼服务&#xff0c;不间断的工作&#xff0c;不带有任何情绪色彩&#xff0c;且能实…

Hive:大数据时代的SQL魔法师

时间&#xff1a;2024年08月17日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频地址&#xff1a;https://xima.tv/1_ZRh54d?_sonic0 希望大家帮个忙&#xff01;如果大家有工作机会&#xff0c;希望帮小蒋内推一下&#x…

半岛体存储器常见类型简介

前言 个人邮箱&#xff1a;zhangyixu02gmail.com在学习 ESP32 的存储器结构时&#xff0c;发现 DRAM 是 Data RAM 而非 Dynamic RAM&#xff0c;IRAM 是 Instruction RAM 而非 Internal RAM 。突然发现自己对于这一块的知识还比较混乱&#xff0c;因此查阅相关资料进行学习整理…

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(一)---UnrealCV获取深度+分割图像

前言 本系列教程旨在使用UE5配置一个具备激光雷达深度摄像机的仿真小车&#xff0c;并使用通过跨平台的方式进行ROS2和UE5仿真的通讯&#xff0c;达到小车自主导航的目的。本教程使用的环境&#xff1a; ubuntu 22.04 ros2 humblewindows11 UE5.4.3python8 本系列教程将涉及以…

04-正弦波,衰减正弦波,正弦波脉冲冲串的产生

1.设置波形线宽 点击Waveforms a 2.添加Comment 3.添加正弦波 3.1先添加一个电压源 3.2增加波形窗口 3.3右键选择Advanced 3.31原始正弦波 名称含义①DC offset直流偏置②Amplitude幅值③Freq频率④Tdelay延迟⑤Theta衰减⑥Phi相位⑦Ncycles产生正弦波的个数 设置完成后&am…

数据结构与算法——BFS(广度优先搜索)

算法介绍&#xff1a; 广度优先搜索&#xff08;Breadth-First Search&#xff0c;简称BFS&#xff09;是一种遍历或搜索树和图的算法&#xff0c;也称为宽度优先搜索&#xff0c;BFS算法从图的某个节点开始&#xff0c;依次对其所有相邻节点进行探索和遍历&#xff0c;然后再…

第T8周:使用TensorFlow实现猫狗识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 文章目录 一、前期工作1.设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;2. 导入数据 二、数据预处理1、加载数据2、再次检查数据3. 配置数据集4…

低代码开发的崛起:机遇与挑战

近年来&#xff0c;“低代码”开发平台的迅速崛起&#xff0c;已经成为IT行业中不可忽视的趋势。这些平台承诺让非专业人士也能快速构建应用程序&#xff0c;通过减少代码编写的需求&#xff0c;大幅提高开发效率。对于许多企业而言&#xff0c;低代码开发工具成为了一个加速数…

Real-Time Open-Vocabulary Object Detection:使用Ultralytics框架进行YOLO-World目标检测

Real-Time Open-Vocabulary Object Detection&#xff1a;使用Ultralytics框架进行YOLO-World目标检测 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows 使用Ultralytics框架进行YOLO-World目标检测进行训练进行预测进行验证 扩展目标跟踪设置提示 参考文献 前言 由…

windows核心编程 第14章,虚拟内存:获取系统信息

windows核心编程 第14章&#xff0c;虚拟内存&#xff1a;获取系统信息 14,获取系统消息 文章目录 windows核心编程 第14章&#xff0c;虚拟内存&#xff1a;获取系统信息14.1 系统信息 14.1 系统信息 许多操作系统的值是根据主机而定的&#xff0c;比如页面的大小&#xff0…

无人机挂载垂直抛投灭火弹技术详解

随着城市化进程的加快&#xff0c;高层建筑、森林、化工园区等区域火灾防控难度日益增大。传统消防手段在面对复杂地形或高层火灾时&#xff0c;往往存在响应速度慢、作业难度大、人员安全风险高等问题。无人机挂载垂直抛投灭火弹技术的出现&#xff0c;为高效、安全、精准的火…

conda install vs pip install

1背景 最近使用pyinstaller打包python程序&#xff0c;启动程序的时候&#xff0c;发现了以下的报错信息 Failed to execute script "pyi_rth_pkgres" due to unhandled dll load failed while importing pyexpat后面查阅了相关文档&#xff0c;比如根据stackoverf…

Vue3+Ts封装下拉懒加载自定义指令

文件夹目录如下: 使用方式: <template><divclass="time-line"v-infinite-scroll="{loadMore: loadMoreItems,threshold: 100 // 当滚动到距离底部 100 像素时触发加载}"> </div> </template><script lang="ts" se…

7次多项式对若干个点进行拟合,并生成图像|MATLAB实现

文章目录 拟合运行结果完整代码拟合 MATLAB对数据进行拟合的意义是通过数学模型和统计方法对实际数据进行分析和预测。拟合可以帮助我们理解数据背后的规律和趋势,从而做出科学决策。 拟合的意义 揭示数据的规律 预测未来趋势 数据修正和异常检测 数据分析和模型验证 总之,…

Prometheus+Grafana保姆笔记(2)——监控Spring Boot微服务程序

Prometheus Grafana 的组合在微服务项目中可以完成许多DevOps任务&#xff0c;它们共同提供了强大的监控和可视化功能。 我们陆续介绍Prometheus Grafana 的相关用法。 上一期&#xff0c;我们介绍了PrometheusGrafana的安装&#xff0c; PrometheusGrafana保姆笔记&#…

javaFx桌面程序开发代码示例

程序效果&#xff1a; 弹窗内容&#xff1a; 1.启动类 HelloJavaFX&#xff1a; import javafx.application.Application; import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene…

赵本山:你把这玩意借我带上,黄晓娟:驴蒙脸你要带这个?--小品《麻将豆腐》(中3)的台词与解说

赵本山&#xff1a;你把这玩意借我带上&#xff0c;黄晓娟&#xff1a;驴蒙脸你要带这个&#xff1f; --小品《麻将豆腐》&#xff08;中3&#xff09;的台词与解说 &#xff08;接上&#xff09; 黄晓娟&#xff08;饰演小姨子&#xff09;&#xff1a;忘了麻将 赵本山&…

车载客流计数器在公交系统中的应用

车载客流计数器在公交系统中的应用&#xff0c;已成为提升运营效率与服务质量的关键工具。随着大数据概念的深入人心&#xff0c;人们愈发认识到数据在决策中的核心地位。公交车客流统计的引入&#xff0c;正是基于这一认识&#xff0c;旨在为公交车辆的运营组织提供详实、精准…

MySQL:表的设计原则和聚合函数

所属专栏&#xff1a;MySQL学习 &#x1f48e;1. 表的设计原则 1. 从需求中找到类&#xff0c;类对应到数据库中的实体&#xff0c;实体在数据库中表现为一张一张的表&#xff0c;类中的属性对应着表中的字段 2. 确定类与类的对应关系 3. 使用SQL去创建具体的表 范式&#xff1…

【Linux多线程】线程同步 与 生产者消费者模型(无锁化模型)

文章目录 1. Linux线程同步1.1 条件变量1.2 同步概念与竞态条件1.3 条件变量函数示例代码1:示例代码2 1.4 为什么 pthread_ cond_ wait 需要互斥量1.5 条件变量使用规范 2. 生产者消费者模型3. 读者 写者 问题3.1 读写锁3.2 读写锁的相关接口 4. 扩展&#xff1a;无锁化模型4.1…