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

向连续刻度提供离散值报错:管道流速等高图绘制问题

解决“向连续刻度提供离散值”错误的管道流速等高图绘制方案

错误根源

Flow和Area列被存储为字符类型,而ggplot2的scale_x_continuous/scale_y_continuous要求轴变量为连续数值型。即便你尝试过转换数值,可能是转换时机或方式存在疏漏。

修正方案

方案1:修复现有代码的数据类型

在创建U数据框后,显式将字符型的Flow和Area转为数值型:

cat("\014")  
graphics.off()
library(rayshader)
library(ggplot2)
library(tidyverse)
library(gapminder)

n= 8

dm<- 300/1000 #max diameter (mm)
am<- (dm^2*pi)/4 #ergo max area (m^2)
qm<- 800/3600 #max flow rate (m^3/h)

i<- am/n
ii<- qm/(am/i)

A<- seq(from = (0+i), to = am, by = i)
Q<- seq(from = (0+ii),to = qm, by = ii)

u<- sapply(Q,'/',A)
uu<- u
colnames(uu) = c(A)
rownames(uu) = c(Q)

# 新增数值转换步骤
U<- as.data.frame(uu) %>% 
  rownames_to_column(var = "Flow") %>% 
  pivot_longer(col = -c(Flow),names_to = "Area", values_to = "Velocity") %>%
  mutate(Flow = as.numeric(Flow), Area = as.numeric(Area))

g2<- U %>% 
  ggplot(aes(x=Flow, y=Area, fill=Velocity))+
  geom_tile()+
  geom_contour(aes(z=Velocity),colour="black")+
  scale_x_continuous("Flow", expand=c(0,0))+
  scale_y_continuous("Area", expand=c(0,0))+
  scale_fill_gradientn("Velocity",colours=terrain.colors(10))+
  coord_fixed()

#rayshader
g2 %>% 
  plot_gg(
    multicore = TRUE,
    raytrace = TRUE,
    width = 7,
    height = 4,
    scale = 300,
    windowsize = c(1400,866),
    zoom = 0.6,
    phi = 30,
    theta = 30
  )

方案2:更简洁的数据生成方式(推荐)

直接用expand.grid生成所有流量和面积的组合,从根源避免字符型变量问题:

cat("\014")  
graphics.off()
library(rayshader)
library(ggplot2)
library(tidyverse)
library(gapminder)

n= 8

dm<- 300/1000 #max diameter (mm)
am<- (dm^2*pi)/4 #ergo max area (m^2)
qm<- 800/3600 #max flow rate (m^3/h)

i<- am/n
ii<- qm/(am/i)

A<- seq(from = (0+i), to = am, by = i)
Q<- seq(from = (0+ii),to = qm, by = ii)

# 直接生成数值型的组合数据框
U <- expand.grid(Flow = Q, Area = A) %>%
  mutate(Velocity = Flow / Area)

g2<- U %>% 
  ggplot(aes(x=Flow, y=Area, fill=Velocity))+
  geom_tile()+
  geom_contour(aes(z=Velocity),colour="black")+
  scale_x_continuous("Flow", expand=c(0,0))+
  scale_y_continuous("Area", expand=c(0,0))+
  scale_fill_gradientn("Velocity",colours=terrain.colors(10))+
  coord_fixed()

#rayshader
g2 %>% 
  plot_gg(
    multicore = TRUE,
    raytrace = TRUE,
    width = 7,
    height = 4,
    scale = 300,
    windowsize = c(1400,866),
    zoom = 0.6,
    phi = 30,
    theta = 30
  )

说明

方案2中expand.grid生成的Flow和Area本身就是数值型,无需额外转换,代码更简洁且不易出错。两种方案都能解决“向连续刻度提供离散值”的错误,正常生成等高图和3D可视化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:10:29