AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 77900826
Accepted
José
José
Asked: 2024-01-29 23:32:48 +0800 CST2024-01-29 23:32:48 +0800 CST 2024-01-29 23:32:48 +0800 CST

如何将等高线添加到使用 persp() 构建的 3D 图中?

  • 772

我正在尝试绘制函数 x^2+y^2 的 3D 图表,并添加等高线以尝试与使用 Matlab 构建的该图具有相同的方面:

在此输入图像描述

但是,我无法在轴中添加轮廓线、网格线和数学符号。这是我使用该函数提供的代码得到的图persp:

在此输入图像描述

library(rgl)
library(rsm)

# Generate data for the plot
x <- seq(-5, 5, length.out = 25)
y <- seq(-5, 5, length.out = 25)
z <- outer(x, y, function(x, y) x^2 + y^2)

jet.colors <- colorRampPalette( c("blue", "red") ) 
pal <- jet.colors(100)
col.ind <- cut(z,100) 

# Create the plot
persp(x, y, z, 
zlab = "Q1(x1,x2)",
xlab = expression(x^2), #not working
ylab = "x1",
theta = 50, phi = 20, expand = 0.5, 
ticktype = "detailed",
contour(x, y, z),
col = pal[col.ind])
  • 1 1 个回答
  • 21 Views

1 个回答

  • Voted
  1. Best Answer
    user2554330
    2024-01-30T00:51:06+08:002024-01-30T00:51:06+08:00

    您的第二个最后一个参数perspiecontour(x, y, z)被解释为一个xlim参数,因为您没有给它命名。据我所知persp()不支持在同一调用中添加 2D 注释。

    您的代码指定了library(rgl),library(rsm)但据我所知,您没有使用这些包中的任何一个。

    为了做你想做的事,我可以看到两种方法。第一种方法是使用上述校正绘制绘图,然后使用该trans3d函数在其上绘制等高线。由于没有删除隐藏线,因此您需要再次绘制主图以覆盖应该隐藏的线。

    关于有关轴标签的问题x^2:请参阅https://stackoverflow.com/a/23420409/2554330了解使用图形的解决方案lattice,或找出所需的坐标,然后将text(trans3d(x,y,z, trans), label=expression(x^2))其放在那里。

    这是所有这一切的尝试:

    # Generate data for the plot
    x <- seq(-5, 5, length.out = 25)
    y <- seq(-5, 5, length.out = 25)
    z <- outer(x, y, function(x, y) x^2 + y^2)
    
    jet.colors <- colorRampPalette( c("blue", "red") ) 
    pal <- jet.colors(100)
    col.ind <- cut(z,100) 
    
    # Create the plot and save the transformation
    trans <- persp(x, y, z, 
          zlab = "Q1(x1,x2)",
          xlab = "",
          ylab = "x1",
          theta = 50, phi = 20, expand = 0.5, 
          ticktype = "detailed",
          col = pal[col.ind])
    
    # Compute the contour lines and add them
    lines <- contourLines(x, y, z)
    bottom <- min(z)
    for (i in seq_along(lines)) {
      segment <- lines[[i]]
      lines(trans3d(segment$x, segment$y, bottom, trans))
    }
    
    # The lines overwrite the surface, so redraw it
    par(new = TRUE)  # to allow us to draw to the same plot
    persp(x, y, z, 
          zlab = "Q1(x1,x2)",
          xlab = "", #not working
          ylab = "x1",
          theta = 50, phi = 20, expand = 0.5, 
          ticktype = "detailed",
          col = pal[col.ind])
    
    # Add the xlab
    text(trans3d(0, -6, bottom - 10, trans), labels=expression(x^2))
    

    创建于 2024-01-29,使用reprex v2.0.2

    如果需要,您还可以在重新绘制绘图之前(或之后,如果您希望它们位于绘图之前)添加网格线。

    另一种方法使用rgl. show2d()它具有在 3D 场景中的矩形上绘制 2D 绘图的功能。

    • 2

相关问题

  • 将复制活动的序列号添加到 Blob

  • Packer 动态源重复工件

  • 选择每组连续 1 的行

  • 图形 API 调用列表 subscribedSkus 状态权限不足,但已授予权限

  • 根据列值创建单独的 DF 的函数

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    为什么这个简单而小的 Java 代码在所有 Graal JVM 上的运行速度都快 30 倍,但在任何 Oracle JVM 上却不行?

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    何时应使用 std::inplace_vector 而不是 std::vector?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Martin Hope
    Aleksandr Dubinsky 为什么 InetAddress 上的 switch 模式匹配会失败,并出现“未涵盖所有可能的输入值”? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge 为什么这个简单而小的 Java 代码在所有 Graal JVM 上的运行速度都快 30 倍,但在任何 Oracle JVM 上却不行? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini 具有指定基础类型但没有枚举器的“枚举类”的用途是什么? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer 何时应使用 std::inplace_vector 而不是 std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB 为什么 GCC 生成有条件执行 SIMD 实现的代码? 2024-02-17 06:17:14 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve