R语言gg3D包绘制3D图形

2023-11-14

本次分享一个绘图还不错的包——gg3D,2018年1月公布。

一、安装包

       gg3D包目前(写该文章时)在R语言官方网站还不能找到并下载,但可以通过开源的托管平台gitHub下载。

运行如下代码:

install.packages('devtools')
devtools::install_github("AckerDWM/gg3D")

       下载好gg3D包后,可以查看帮助发现只有5个函数分别为:axes_3D 绘制3D坐标轴,axis_labs_3D 标记坐标刻度,labs_3D标记坐标标签,stat_3D 绘制几何对象,stat_wireframe绘制3D线框或3D曲面。

       可以使用labs_3D添加轴标题。使用hjust,vjust和angle来实现良好的定位。

       可以使用axis_labs_3D添加轴标签。标签显示每个轴的最小值和最大值。同样,您可以使用hjust,vjust和angle来实现良好的定位。

二、投影绘制

       旋转3D投影,theta控制旋转,phi控制图的倾斜。先看一个“3种形态鸢尾花”数据集在3维空间的绘制。

# gg3D通常与 theme_void 以消除二维坐标系统
# 绘制鸢尾花数据集
library(gg3D)
library(ggplot2)
theta=10 #方位角的度数
phi=50 # 渐近线
ggplot(iris, aes(x=Petal.Width, y=Sepal.Width, z=Petal.Length, color=Species)) + 
  axes_3D(theta=theta, phi=phi) + stat_3D(theta=theta, phi=phi) +
  axis_labs_3D(theta=theta, phi=phi, size=3, hjust=c(1,1,1.2,1.2,1.2,1.2), vjust=c(-.5,-.5,-.2,-.2,1.2,1.2)) +
  labs_3D(theta=theta, phi=phi, hjust=c(1,0,0), vjust=c(1.5,1,-.2),labs=c("Petal width", "Sepal width", "Petal length")) +theme_void()

三、曲线绘制

      除了点之外,还可以使用stat_3D在3D中绘制其他geom。这些包括文本,行和路径。

      再看一个“饮食对鸡生长的影响”数据集的三维曲线绘制。

ggplot(ChickWeight, aes(x=as.numeric(Diet), y=as.numeric(Time), z=as.numeric(weight),color=Chick)) +
  theme_void() +
  axes_3D(theta=30, phi=20,colour='red') + stat_3D(theta=30, phi=20, geom="path") +
  theme(legend.position = "none",panel.background=element_rect(fill = 'black'))

四、曲面绘制

       可以使用stat_wireframe创建线框图。如果输入是熔融基质的形式,结果将是最好的。当然,线框可以分组并与其他绘图对象组合。

s = seq(-pi, pi, length= 100)
x <- expand.grid(s,s)$ Var1 # 100*100,expand.grid排列组合
y <- expand.grid(s,s)$ Var2
x1=c(x,x);y1=c(y,y);g=c(x,y)
z <- sin(x1)+cos(y1)
dt <- data.frame(x=x1,y=y1,z,g)
ggplot(dt, aes(x=x,y=y,z=z,group=g)) + theme_void() + axes_3D(theta=theta, phi=phi,colour='black') +
  stat_3D(theta=theta, phi=phi, geom="path",colour='557799') + theme(panel.background=element_rect(fill = 'black'))

五、注释修改

       目前gg3D贴图将所有轴缩小到范围(0,1)。当轴刻度变化很大时,这使得绘图很容易看到。但是,它使得任意定位的注释的添加不直观。仍然可以创建注释:指定具有不会被绘制的点的轴范围。

ggplot(ChickWeight, aes(x=as.numeric(Diet), y=as.numeric(Time), z=as.numeric(weight),
  color=Chick)) + theme_void() + axes_3D(theta=30, phi=20) +
  stat_3D(theta=30, phi=20, geom="path") + theme(legend.position = "none") +
  stat_3D(theta=30, phi=20,
          inherit.aes = F,
          data=data.frame(
            x=c(1:4,min(as.numeric(ChickWeight$Diet)), max(as.numeric(ChickWeight$Diet))),
            y=c(0,0,0,0,min(ChickWeight$Time), max(ChickWeight$Time)),
            z=c(0,0,0,0,min(ChickWeight$weight), max(ChickWeight$weight)),
            label=c(paste("Diet", 1:4), NA, NA)),
          aes(x=x, y=y, z=z, label=label),geom="text", vjust=1.2, hjust=1)

六、不足点

       当然,gg3D包也有它的不足:

       1、不能够自定义坐标刻度风格;颜色的透明度不能随意设置。

       2、只支持点对点数据格式,不支持公式化数据格式,不符合三维空间中常用的数学表示方法,这也会浪费很多时间在数据的设计上。

       3、目前该包只支持point,line,path三种几何类型,不支持pie,bar,hist对象。

七、拓展学习

      下面还有一个拓展学习。

df = volcano %>% 
  reshape2::melt() %>%
  mutate(col=interaction(Var1>mean(Var1), Var2>mean(Var2)))

g1 = ggplot(df, aes(Var1, Var2, z=value)) +
  axes_3D() +
  stat_wireframe(alpha=.5) +
  theme_void() +
  theme(legend.position = "none") +
  labs_3D(hjust=c(0,1,1), vjust=c(1, 1, -0.2), angle=c(0, 0, 90))

g2 = ggplot(df, aes(Var1, Var2, z=value, color=col)) +
  axes_3D() +
  stat_wireframe(alpha=.5) +
  theme_void() +
  theme(legend.position = "none") +
  labs_3D(hjust=c(0,1,1), vjust=c(1, 1, -0.2), angle=c(0, 0, 90))

g3 = ggplot(df, aes(Var1, Var2, z=value)) +
  axes_3D() +
  stat_wireframe(alpha=.5) +
  stat_3D(aes(color=value), alpha=.5) +
  theme_void() +
  theme(legend.position = "none") +
  scale_color_gradientn(colors=plot3D::jet2.col()) +
  labs_3D(hjust=c(0,1,1), vjust=c(1, 1, -0.2), angle=c(0, 0, 90))

plot_grid(g1, g2, g3, ncol=3)

 

文章未经博主同意,禁止转载!

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R语言gg3D包绘制3D图形 的相关文章

  • R语言描述性统计

    使用Hmisc这个包 只需要调用 my data read csv test csv Hmisc describe my data 可以打印出各个变量的均值方差等信息
  • R语言——数据排序

    R语言中涉及排序的基本函数有order sort和rank三个 下面看看它们的基本用法 x表示需要排序的数据 decreasing表示是否按降序排序数据 method表示所使用的排序算法 na last表示如何处理NA值 缺失值 若为FAL
  • R语言的Rattle可视化BI数据挖掘分析工具

    Rattle介绍 Rattle是一个免费的开源数据挖掘工具包 使用 Gnome 图形界面以统计语言 R编写 它在GNU Linux Macintosh OS X和MS Windows下运行 Rattle正在澳大利亚和国际上用于商业 政府 研
  • R语言与机器学习中的回归方法学习笔记

    来源 http blog sina com cn s blog 62b37bfe0101hom5 html key word lars rpart randomForest cp svm data diabetes prune boosti
  • 如何用R分析CNKI文献关键词词频?

    疑惑 如何用VOSviewer分析CNKI数据 一文发布后 有同学问我 王老师 我有个问题 我用cnki导出关键词后 想统计关键词的词频 我应该用什么样的工具 如果不利用citespace和python 做出excel那种的统计表格 该怎么
  • 第六章课后习题及答案

    第六章习题答案 转载于 https www cnblogs com hhdn archive 2007 05 27 761356 html
  • 802.11K/V/R协议介绍

    802 11K V R协议介绍 1 传统无线漫游介绍 1 1 什么是无线漫游 一台无线终端备 STA 通过连接Wi Fi获取上网体验 Wi Fi名称 又称为SSID 是由无线接入网 AP 提供的 因为一台AP设备的覆盖范围有限 所以无线网络
  • SQL中去掉字符串中最后一个字符(小技巧)

    长度减一就可以了 select left 字段名 len 字段名 1 from 表名
  • R语言基础——缺失数据

    R语言基础 缺失数据 缺失数据的分类 统计学家通常将缺失数据分为三类 它们都用概率术语进行描述 但思想都非常直观 我们将用sleep研究中对做梦时长的测量 有12个动物有缺失值 来依次阐述三种类型 1 完全随机缺失 若某变量的缺失数据与其他
  • R语言绘图:实现数据点的线性拟合,进行显著性分析(R-squared、p-value)、添加公式到图像

    最近在做关于数据点线性拟合相关的研究 感觉R语言在这方面很方便 而且生成的图片很漂亮 所以在这里和大家分享一下代码 这是别人所绘制的拟合图像 很漂亮 自己也用iris鸢尾花数据集进行一个线性拟合看看 拟合线性模型最基本的函数就是lm 格式为
  • R语言中用于计算Rsquare的包rsq

    文章目录 理论介绍 线性模型情形 广义线性模型情形 函数介绍 rsq 的介绍 实例 rsq partial 的介绍 相关文献 pcor 函数介绍 vresidual 函数介绍 实例 理论介绍 线性模型情形 R squared 值范围 0 1
  • r如何让新增加的列出现在第一列 r如何调整新增加的列的位置

    https www cnblogs com liujiaxin2018 p 16211983 html 1 任意位置插入列 复制代码 gt a lt letters 1 5 gt b lt LETTERS 1 5 gt c lt sampl
  • 统计学三大分布(卡方、t、F)即相应概率密度图的R语言实现

    三大统计分布 1 2 chi 2 2分布 设随机变量 X 1
  • R数据科学-第九章使用lubridate处理日期和时间

    本章将会使用以下三个包 gt library tidyverse gt library lubridate gt library nycflights13 一 创建日期或时间 表示日期或时间的数据有三种 日期 在tibble中显示为date
  • R----stringr包介绍学习

    1 stringr介绍 stringr包被定义为一致的 简单易用的字符串工具集 所有的函数和参数定义都具有一致性 比如 用相同的方法进行NA处理和0长度的向量处理 字符串处理虽然不是R语言中最主要的功能 却也是必不可少的 数据清洗 可视化等
  • 不同kNN模型在R语言中的比较

    不同kNN模型在R语言中的比较 k近邻 k Nearest Neighbors 简称kNN 是一种常见的机器学习算法 被广泛用于分类和回归问题 它基于一个简单的假设 与某个样本集中距离最近的k个样本具有相似的特征和标签 本文将探讨在R语言中
  • 14. Bayesian Networks With Examples in R的学习笔记(贝叶斯网络 bic打分相关)

    bnlearn官网推荐书目 Bayesian Networks With Examples in R 下载了英文版pdf学习了一下 书还是比较浅显易懂的 没有读多少 暂时把自己看的部分整理 翻译到这里留存 欢迎大家交流 pdf下载地址 ht
  • R-INLA Project目录

    集成嵌套拉普拉斯近似法 INLA 是一种近似贝叶斯推断的方法 在过去的几年里 由于其速度和通过R INLA软件包的易用性 它已经成为马尔科夫链蒙特卡洛等其他方法的替代品 尽管INLA方法的重点是可以表达为潜伏高斯马尔可夫随机场 GMRF 的
  • 主成分分析R语言实现

    主成分分析是一种常见的降维统计方法 它通过适当的变量替换 使得新变量成为原变量的线性组合 并且新变量间彼此独立 从而可从错综复杂的关系中寻求主要成分信息 揭示变量内在关系 本次主要分享的是该方法的R语言实现 目录 数据集展示 一 计算相关系
  • 4. 统计描述和基线表格绘制

    目录 1 连续型变量统计描述 单变量统计描述 1 summary函数 2 psych包中的describe 函数 3 Hmisc包中的describe 函数 4 pastecs包的stat desc 的函数 分组统计描述 1 doBy包的s

随机推荐

  • 互联网公司数据产品经理和数据分析师,主要有什么区别?

    数据产品经理和数据分析师 是目前互联网公司的热门职位 它跟数据分析师的职责有重叠的部分 不同的地方是这个职位关注的点是数据分析的产品化 这是普通互联网公司数据产品经理的日常 那数据产品经理跟互联网公司里的产品经理有什么区别呢 在大的互联网公
  • mysql+'@'%_mysql忘记登录的人:命令拒绝用户”@’%’

    跑步秀表示我以具有数据库所有权限的用户身份登录 跑步表状态 导致错误 并且错误不显示我已登录的用户名 就好像对于这个命令 mysql忘记了我是谁 其他select语句工作正常 有人可以解释一下吗怎么修 谢谢 Welcome to the M
  • HUAWEI+Eudemon1000E+防火墙+典型配置案例

    当使用consol口登入Eudemon1000E 防火墙时 如果登入失败退出可能会被锁定 提示 User interface con0 is locked 锁定的时间默认是10分钟 可以通过对con0 配置修改锁定值 设置串口console
  • 解决java.lang.RuntimeException: Can't toast on a thread that has not called Looper.prepare()

    最近在整理Android开发过程中的一些错误 话不多说 直接上错误 错误原因是自己想在网络请求成功后 弹出一个Toast提醒 但由于程序在主线程中创建handler后会创建一个looper对象 而子线程却不会 那什么时候需要looper L
  • 飞桨AI课程干货--带你开启新世界的大门!

    笔者近期体验了免费的 百度深度学习7日打卡第六期 Python小白逆袭大神 训练营 课程每天都有对应的直播 由中科院团队负责教学 每天有对应的作业贯穿其中 带你全程体验百度AI开放平台 AI Studio 飞桨PaddlePaddle Ea
  • SQL视图View的总结和使用

    实际工作当中 数据交互查询返回结果 SQL你是没办法找其他的完美替代的 但有的时候还是会遇到一些很头痛的问题需要视图view来解决 比如以下场景 view日常使用场景 场景一 有的时候 多个表并表条件查询 尤其是好几张表那种一起查询的那种
  • JS 使用正则

    在JS中如何使用正则来校验字符串 1 使用RegExpObject test string 匹配则为true否则为false 声明一个正则对象 var a 0 9 需要注意的是 a不是字符串 而是一个对象 我们可以打印下a的构造函数 没错
  • ESP32-WROVER-E无法正常写入固件

    在之前用模块下载程序都是好的 然后突然就出现了无法下载的现象 打印了他的输出都是 rst 0x10 RTCWDT RTC RESET boot 0x13 SPI FAST FLASH BOOT invalid header 0xffffff
  • 【2023】华为OD机试真题Java-题目0219-查找充电设备组合

    非常典型的动态规划问题 package com company test import java util Arrays public class Main1 public static void main String args int
  • Matlab使用LSTM网络做classification和regression时XTrain的若干种数据结构-part I

    目前看来 Deep learning的两大用途是classification和regression 以LSTM为例 它的优势在于对时序数据 sequence data 强大的处理能力 简单来说 可以用作 1 sequence to labe
  • 浅谈C++

    重载原因 C 中的运算符重载是一种特性 允许程序员定义自定义类类型的运算符操作 通过运算符重载 可以对类对象执行类似于内置类型的操作 例如加法 减法 乘法等 运算符重载通过定义特定的成员函数或非成员函数来实现 成员函数的运算符重载为类的成员
  • 【通过粒子滤波进行地形辅助导航】用于地形辅助导航的粒子滤波器和 PCRB研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 粒子滤波 Particle Filter
  • linux搭建 sftp服务 && sftp自动上传脚本

    1 新建sftp用户组 sftp 用户家目录 groupadd sftp mkdir p sftpdata sftp 2 新建sftp用户 useradd d sftpdata sftp tester m g sftp s sbin nol
  • 安装 Hana Studio

    1 从sap 官网下载下来的安装包是 sar 类型的压缩包 2 需要用专门的解压工具 SAPCAR 3 运行sapcar 工具和安装包放到英文路径下 win r 输入cmd 输入CD SAPCAR保存路径 我的保存在 出现这种 没有打开相应
  • pandas之Series()菜鸟教程

    Pandas数据结构Series 基本概念及创建 一维数组 Serise import numpy as np import pandas as pd import time Series 数据结构 Series 是带有标签的一维数组 可以
  • CUDA安装详细教程

    一 CUDA下载 CUDA官网 二 CUDA具体安装步骤 1 检查电脑的NVIDIA版本 在cmd中输入nvidia smi 注意nvidia smi中的是驱动对应的cuda最高版本 只要此版本大于等于你安装的cuda即可 若命令nvidi
  • 机器学习笔试面试超详细总结(一)

    文章目录 1 判别模型和生成模型 2 最大概率分词 3 中文分词的基本方法 4 CRF 条件随机场 的特点 5 隐马尔可夫模型 HMM 时间复杂度及可以使用的数据集 6 在二分类问题中的评价方案 7 决策树特点 8 过拟合 9 异方差性 1
  • 关于gitlab的使用1——拉取代码

    1 快速上手 1 1注册 1 2登录 1 3选择 1 4选择所要拉取代码到idea的项目 1 5 选择索要拉取的模块 1 6选择clone按钮进行操作 1 7复制ssh或者http协议地址 1 8打开idea 1 9输入协议地址和保存路径
  • 关于Ajax跨域提交时session丢失的问题

    今天在工作中遇到了一个问题 就是当使用ajax和jsonp进行跨域时 每一服务器都会在cookie里set一个新的sessionId 会将原有的sessionId覆盖 也就是说客户端对于服务器来说始终处于未登录状态 我使用谷歌浏览器是没有问
  • R语言gg3D包绘制3D图形

    本次分享一个绘图还不错的包 gg3D 2018年1月公布 一 安装包 gg3D包目前 写该文章时 在R语言官方网站还不能找到并下载 但可以通过开源的托管平台gitHub下载 运行如下代码 install packages devtools