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

等高线图绘制异常求助:基于变量计算的z值绘图为空

问题原因与修复方案

核心问题

  1. 数据结构不匹配等高线图要求:plotly的contour和lattice的contourplot都需要x(nodes)和y(sumJ)构成规则二维网格,每个网格点对应唯一的z(WD)值。但你的数据是长格式,sumJ取值随nodes离散变化,无法形成规则网格,导致绘图时无法生成有效等高线。
  2. WD取值跨度极大:dense="not"时WD最大约0.439,dense="fully"时WD最大可达100,两种情况的数值跨度悬殊,也是空图的诱因之一。

修复步骤

1. 简化数据生成逻辑

根据公式,WD可直接由sumJ和nodes计算,无需冗余变量,简化后的数据更清晰:

library(tidyverse)
library(plotly) 
library(lattice)

# 生成两种密度类型的数据
data_not <- expand.grid(nodes = seq(2, 455, by = 1), jaccard = seq(0.1, 100, by = 0.1)) %>%
  mutate(sumJ = (nodes-1)*jaccard,
         WD = 2 * sumJ / (nodes * (nodes - 1)),
         dense = "not")

data_fully <- expand.grid(nodes = seq(2, 455, by = 1), jaccard = seq(0.1, 100, by = 0.1)) %>%
  mutate(sumJ = (nodes*(nodes-1)/2)*jaccard,
         WD = 2 * sumJ / (nodes * (nodes - 1)),
         dense = "fully")

data <- bind_rows(data_not, data_fully) %>%
  select(nodes, sumJ, WD, dense) %>%
  distinct()

2. 适配数据特性的绘图方案

方式一:按密度类型分组绘制

将两种dense情况分开,避免数值跨度干扰:

Plotly 实现
# 绘制非完全密度的等高线(用jaccard替代sumJ,线性关系更清晰)
plot_ly(data = data_not, x = ~nodes, y = ~jaccard, z = ~WD, type = "contour") %>%
  layout(title = "WD vs 节点数 & Jaccard(非完全密度)",
         xaxis = list(title = "节点数"),
         yaxis = list(title = "Jaccard"))
Lattice 实现
# 分面展示两种密度类型的等高线
contourplot(WD ~ nodes + jaccard | dense, data = data,
            main = "WD vs 节点数 & Jaccard(按密度类型分面)",
            xlab = "节点数", ylab = "Jaccard")

方式二:对sumJ取对数压缩范围

若必须用sumJ作为y轴,取对数可缩小数据跨度,让等高线显示:

# Plotly 对数sumJ版本
plot_ly(data = data, x = ~nodes, y = ~log10(sumJ), z = ~WD, type = "contour") %>%
  layout(title = "WD vs 节点数 & Log10(SumJ)",
         xaxis = list(title = "节点数"),
         yaxis = list(title = "Log10(SumJ)"))

# Lattice 对数sumJ版本
contourplot(WD ~ nodes + log10(sumJ), data = data,
            main = "WD vs 节点数 & Log10(SumJ)",
            xlab = "节点数", ylab = "Log10(SumJ)")

备选:用散点图展示离散分布

如果数据本身是离散的,散点图比等高线更合适:

plot_ly(data = data, x = ~nodes, y = ~sumJ, color = ~WD, type = "scatter", mode = "markers") %>%
  layout(title = "WD分布(节点数 vs SumJ)")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:57:51