You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在plot3D的3D直方图中按组配色并添加图例

自定义3D直方图解决方案(基于plot3D包)

以下是实现需求的完整代码和步骤说明:

1. 加载包与数据

首先确保安装并加载plot3D包,导入VADeaths数据集:

# 首次使用需安装包
# install.packages("plot3D")
library(plot3D)

data(VADeaths)

2. 定义分组与颜色映射

将原始年龄组合并为3个类别,并为每个类别分配指定颜色:

# 原始年龄组到合并类别的映射
age_groups <- c(
  "50-54" = "五十多岁",
  "55-59" = "五十多岁",
  "60-64" = "六十多岁",
  "65-69" = "六十多岁",
  "70-74" = "70+"
)

# 各合并类别的颜色配置
group_colors <- c(
  "五十多岁" = "#0072B2",  # 蓝色
  "六十多岁" = "#F0E442",  # 黄色
  "70+" = "#FFFFFF"        # 白色
)

# 生成每个原始年龄组对应的颜色向量
x_colors <- group_colors[age_groups[rownames(VADeaths)]]

3. 绘制3D直方图

使用hist3D绘制图形,通过col参数传入分组颜色:

hist3D(
  x = 1:5, y = 1:4, z = VADeaths,
  bty = "g", phi = 20, theta = -60,
  xlab = "", ylab = "", zlab = "", main = "VADeaths 年龄组死亡分布",
  col = x_colors, border = "black", shade = 0.8,
  ticktype = "detailed", space = 0.15, d = 2, cex.axis = 1e-9
)

4. 添加轴标签

调整x轴标签为合并后的类别,y轴保留原有标签:

# 添加合并后的年龄组标签(对应分组位置居中)
text3D(
  x = c(1.5, 3.5, 5), y = rep(0.5, 3), z = rep(3, 3),
  labels = names(group_colors),
  add = TRUE, adj = 0, cex = 1.2
)

# 添加性别与城乡标签
text3D(
  x = rep(1, 4), y = 1:4, z = rep(0, 4),
  labels = colnames(VADeaths),
  add = TRUE, adj = 1, cex = 1.2
)

5. 添加右侧图例

用基础绘图的legend函数在图右侧添加颜色说明:

legend(
  x = "topright", inset = c(-0.2, 0),
  legend = names(group_colors),
  fill = unname(group_colors),
  border = "black",
  bty = "n",  # 隐藏图例边框
  cex = 1.1
)

关键说明

  • 颜色映射:通过向量匹配,让每个原始年龄组的柱子自动对应到合并类别的颜色
  • 标签位置:将合并组标签放在对应原始组的中间位置,更直观展示分组逻辑
  • 图例调整:利用inset参数将图例偏移到图右侧,避免遮挡主体图形

内容的提问来源于stack exchange,提问作者Chris T.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:20:27