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

R语言plotly绘图点与原始数据不匹配及悬停文本修改咨询

问题原因分析
  • 网格数据构造错误:你当前用data.frame(input_1, input_2, input_3, input_4)生成的是101行的长表,每一行的四个输入值完全相等(都是i,i,i,i,i从0到100),并不是三维空间的全量网格点。如果你要生成三维坐标的全排列网格,应该用expand.grid()而非直接合并等长向量。
  • 绘图参数逻辑错误:你同时叠加了add_trace(type='mesh3d')和add_surface()两个图层,且add_surface()中直接将整个my_grid数据框转为矩阵作为z轴输入,my_grid包含4个输入列+1个结果列共5列数值,因此z轴的实际取值是整表所有数值的集合,远超出你以为的input_3的0-100范围。同时你将surfacecolor设为整个my_grid而非final_value列,颜色映射逻辑也不符合你的预期。
  • 理解存在偏差:你默认z轴对应input_3,但上述参数设置错误的情况下,你看到的200.356的z值本质是final_value的计算结果(input_3+input_4最大为200,加上三角函数的偏移刚好落在这个区间),自然无法在input_3的取值范围里找到对应记录。
  • 3D绘图的插值特性:plotly的表面类图层在渲染时会对输入的离散点做自动插值平滑,生成连续的表面,这些插值得到的中间点本身就不存在于原始数据集中。
修正方案与自定义悬停文本

你有4个输入变量,属于四维数据,若要在3D图中展示,需要先固定其中一个输入变量的取值,再生成剩下三个变量的全排列网格计算结果。以下是修正后的代码,同时自定义了悬停文本:

library(plotly)
library(dplyr)
set.seed(123)

# 固定input_4的取值为50(可按需调整)
input_4_fixed <- 50
# 生成input_1、input_2、input_3的全排列网格
my_grid <- expand.grid(
  input_1 = seq(0,100,5), # 步长调大为5避免数据量过大导致卡顿
  input_2 = seq(0,100,5),
  input_3 = seq(0,100,5)
) %>% mutate(
  input_4 = input_4_fixed,
  final_value = sin(input_1) + cos(input_2) + input_3 + input_4
)

# 绘图并自定义悬停文本
plot_ly() %>% 
  add_trace(
    data = my_grid,
    x = ~input_1,
    y = ~input_2,
    z = ~input_3,
    type = 'mesh3d',
    intensity = ~final_value, # 按final_value映射颜色
    hovertext = ~paste0(
      "input_1: ", input_1, "<br>",
      "input_2: ", input_2, "<br>",
      "input_3: ", input_3, "<br>",
      "input_4: ", input_4, "<br>",
      "final_value: ", round(final_value,3)
    ),
    hovertemplate = "%{hovertext}<extra></extra>" # 隐藏默认额外信息
  )

你可以根据需求调整固定的变量、网格步长,若要保留surface图层,对应调整add_surface()的z、surfacecolor和悬停参数即可。


内容的提问来源于stack exchange,提问作者stats_noob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 09:57:02