前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >oblicubes包带你绘制立方体图

oblicubes包带你绘制立方体图

作者头像
R语言数据分析指南
发布2023-08-18 13:41:11
1530
发布2023-08-18 13:41:11
举报

欢迎关注R语言数据分析指南

❝本节来介绍一款R包「oblicubes」其主要作用是用于绘制立方体图,小编测试后发现颇有新意,下面来简单介绍一下。感兴趣的朋友欢迎分享转发,「更多详细内容请参考作者官方文档」

官方文档

❝https://trevorldavis.com/R/oblicubes/ ❞

安装R包

代码语言:javascript
复制
remotes::install_github("trevorld/oblicubes")
library(oblicubes)
library(tidyverse)
library(grid)
library(grDevices)

案例 1

代码语言:javascript
复制
angles <- c(135, 90, 45, 180, 45, 0, -135, -90, -45) # 创建角度向量
scales <- c(0.5, 0.5, 0.5, 0.5, 0.0, 0.5, 0.5, 0.5, 0.5) # 创建缩放比例向量
mat <- matrix(c(1, 2, 1, 2, 3, 2, 1, 2, 1), nrow = 3, ncol = 3) # 创建一个3x3的矩阵
# 使用矩阵创建高度图的坐标数据
coords <- xyz_heightmap(mat, col = c("red", "yellow", "green"))
vp_x <- rep(1:3/3 - 1/6, 3) # 创建视口的x坐标
vp_y <- rep(3:1/3 - 1/6, each = 3) # 创建视口的y坐标
代码语言:javascript
复制
# 遍历每个视口
for (i in 1:9) {
  # 进入当前视口
  pushViewport(viewport(x=vp_x[i], y=vp_y[i], width=1/3, height=1/3))
  grid.rect(gp = gpar(lty = "dashed"))   # 绘制虚线矩形
  # 绘制倾斜的立方体
  grid.oblicubes(coords, width = 0.15, xo = 0.25, yo = 0.15,
                 angle = angles[i], scale = scales[i],
                 gp = gpar(lwd=4))
  
  # 根据索引i的不同添加角度或者缩放比例的文本
  if (i != 5)
    grid.text(paste("angle =", angles[i]), y=0.92, gp = gpar(cex = 1.2))
  else
    grid.text(paste("scale = 0"), y=0.92, gp = gpar(cex = 1.2))
  popViewport()   # 退出当前视口
}

绘制3D热图

代码语言:javascript
复制
data("volcano", package = "datasets") # 载入"volcano"数据集
# 使用高度图函数创建坐标数据
df <- xyz_heightmap(volcano, scale = 0.3, min = 1, solid = FALSE)

# 创建基于坐标数据的ggplot对象
g <- ggplot(df, aes(x, y, z = z, fill = raw)) +  
  geom_oblicuboids(light = FALSE) +  # 添加倾斜立方体的几何图层
  coord_fixed() +   # 设置坐标系为等比例缩放
  # 设置填充颜色的渐变
  scale_fill_gradientn(name = "Height (m)",
                       colours=terrain.colors(256)) +
  labs(x = "East (10m)", y = "North (10m)",
       title = "Maungawhau (`datasets::volcano`)")

# 绘制ggplot对象
plot(g)

数据清洗

代码语言:javascript
复制
df <- as.data.frame(datasets::Titanic) |> # 转换"Titanic"数据集为数据框
  # 过滤出年龄为"Child"且频数大于0的数据
  filter(Age == "Child", Freq > 0) |>
  group_by(Sex, Survived, Class) |>  # 按性别、是否幸存和船舱等级进行分组
  summarize(Freq = seq.int(sum(Freq)), .groups = "drop")   # 计算频数的序列

绘制3D条形图

代码语言:javascript
复制
ggplot(df, aes(x = Survived, y = Freq, fill = Survived)) +
  # 创建分面网格,按照船舱等级和性别进行分面
  facet_grid(cols = vars(Class, Sex)) +
  coord_fixed() +   # 设置坐标系为等比例缩放
  # 添加倾斜立方体的几何图层,设置y轴和z轴的偏移、角度和缩放比例
  geom_oblicubes(yoffset = -0.5, zoffset = -0.5, angle = -45, scale = 0.7) +
  # 设置填充颜色的手动映射
  scale_fill_manual(values = c("Yes" = "lightblue", "No" = "red")) +
  scale_y_continuous(expand = expansion(), name = "") +   # 设置y轴连续变量的扩展范围和名称
  scale_x_discrete(name = "", breaks = NULL) +
  labs(title = "Children on the Titanic (by ticket class)")+
  theme_bw()  # 设置主题为黑白
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言数据分析指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 欢迎关注R语言数据分析指南
  • 官方文档
  • 安装R包
  • 案例 1
  • 绘制3D热图
  • 数据清洗
  • 绘制3D条形图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档