我有一个很好的表面,它代表了具有两个独立变量的回归的非线性多部分回归结果.我想将回归预测值绘制为一个漂亮的3D表面,然后将实际值显示为在表面上反弹的点.这将是绘制回归线并将实际值显示为线周围点的3D版本.我无法弄清楚如何用格子做到这一点.我很高兴在R中使用另一个图形库,但我不知道其他人做3D图.
这是我想要做的简化版本:
library(lattice)
#set up some simplified data
x <- seq(-.8, .8, .1)
y <- seq(-.8, .8, .1)
myGrid <- data.frame(expand.grid(x,y))
colnames(myGrid) <- c("x","y")
myGrid$z <- myGrid$x + myGrid$y
noise <- rnorm(length(myGrid$z),.3,.2)
myGrid$z2 <- myGrid$x + myGrid$y + noise
Run Code Online (Sandbox Code Playgroud)
z是我的光滑表面,z2是我的噪点,大部分位于表面之上.所以表面看起来像这样:
wireframe(myGrid$z ~ myGrid$x * myGrid$y, xlab="X", ylab="Y", zlab="Z")
Run Code Online (Sandbox Code Playgroud)
点云看起来像这样:
cloud(myGrid$z2 ~ myGrid$x * myGrid$y, xlab="X", ylab="Y", zlab="Z")
Run Code Online (Sandbox Code Playgroud)
是否有可能在一个格子面板中获得这两个?
Mathematica是否支持线框图像的隐藏线移除?如果情况并非如此,那么有没有人遇到过这样的方法呢?让我们从这开始:
Plot3D[Sin[x+y^2], {x, -3, 3}, {y, -2, 2}, Boxed -> False]
Run Code Online (Sandbox Code Playgroud)

要创建线框,我们可以:
Plot3D[Sin[x+y^2], {x, -3, 3}, {y, -2, 2}, Boxed -> False, PlotStyle -> None]
Run Code Online (Sandbox Code Playgroud)

我们可以做的一件事就是将所有表面着色为白色.然而,这是不希望的.原因是因为如果我们将这个隐藏的线框架模型导出为pdf,我们将拥有Mathematica用于渲染图像的所有白色多边形.我希望能够以pdf和/或eps格式获得隐藏线移除的线框.
我已经发布了这个问题的解决方案.问题是代码运行速度很慢.在当前状态下,它无法在此问题中为图像生成线框.随意玩我的代码.我在帖子的末尾添加了一个链接.您也可以在此链接中找到代码
我正在尝试使用plot_surface和模拟小行星plot_wireframe.我对小行星表面上的点有xy和z值.线框精确到小行星的形状,但表面图不适合线框.如何获得适合线框的曲面图或如何使用线框获得3d实体模型?这是我的模型代码:
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
from matplotlib.mlab import griddata
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
data = np.genfromtxt('data.txt')
x = data[:,0]
y = data[:,1]
z = data[:,2]
ax.plot_wireframe(x, y, z, rstride=1, cstride=1, alpha=1)
xi = np.linspace(min(x), max(x))
yi = np.linspace(min(y), max(y))
X, Y = np.meshgrid(xi, yi)
Z = griddata(x, y, z, xi, yi)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
linewidth=0, antialiased=False) …Run Code Online (Sandbox Code Playgroud) 37 Signal的Getting Real使我确信线框图和编写功能规范文档是构建Web应用程序和动态网站所不需要的中间人步骤.
这些步骤的开销是否值得重量?在HTML/CSS甚至PhotoShop文档中进行原型设计(因此设计人员可以直接使用它们)比使用Visio这样的软件更好吗?就个人而言,我对后者摇摆不定,但我不确定.
在草绘(或模型)工具,如Balsamiq和WireframeSketcher Comic Sans用于给出"粗略"的手绘外观.我唯一的问题是,我对这种字体太厌倦了.
对替代品的任何建议?
编辑:WireframeSketcher不默认为Comic Sans字体,但它是用于显示"粗略"外观的示例.
我正在寻找一种用于线框模型的简单文件格式.我知道VRML,u3D等,但这些似乎对我的需求很重要.我的criterea是:
或者我只是更好地将顶点/边缘列表写入文本文件并完成它?
我依稀记得在 OpenGL 中看到过一些东西(不是 ES,当我遇到这个时,它仍然是 iPhone 上的 v1.0,这就是我从未使用它的原因)让我指定我的多边形的哪些边被认为是轮廓与那些组成面部的内部。因此,这与整个模型的轮廓(我知道如何做)不同,而是平面的轮廓及其所有三角形基本上混合成一个多边形。例如,在一个由 tris 组成的立方体中,每个面实际上是两个 tris。我想渲染正方形的轮廓,而不是脸上的对角线。六边形也是一样。这需要四个tris,但面部轮廓只需要一个。
现在是的,我知道我可以简单地测试所有边,看看它们是否共享共面,但我可以发誓我记得在定义三网格数据时看到某处,你可以说'这条线勾勒出一个面,而这条线勾勒出一个面一个在一张脸里面。这样在渲染时,你可以设置一个标志,基本上说“给我一个线框,但只有完整面边缘周围的线,而不是组成它们的三边形。”
顺便说一句,我的目标是所有支持 OpenGL ES 2.0 的平台,但我的开发平台是 iOS。同样,这个我很确定最初是在 OpenGL 中,一旦着色器出现,它可能已经贬值,但我什至找不到这个功能的参考来检查是否是这种情况。
我现在知道的唯一方法是拥有一组顶点,但有两组独立的索引……一组用于渲染 tris,另一组用于渲染面的线框。这是一个真正的痛苦,因为我最终手动编写了很多代码,再次,我 99% 确定您可以在渲染线条时定义。
我一直在研究R中一个相当复杂的图表.我有一个带有表面的线框,点分布在X,Y,Z空间中(例如在表面下面和上面).
问题在于情节不会"看起来"像点在表面之下.
我试图弄清楚如何最好地可视化此图表,使点看起来在表面下.线框和云的一些示例代码来自此处: R-List Posting
示例中的代码:
library(lattice)
surf <-
expand.grid(x = seq(-pi, pi, length = 50),
y = seq(-pi, pi, length = 50))
surf$z <-
with(surf, {
d <- 3 * sqrt(x^2 + y^2)
exp(-0.02 * d^2) * sin(d)
})
g <- surf
pts <- data.frame(x =rbind(2,2,2), y=rbind(-2,-2,-2), z=rbind(.5,0,-.5))
wireframe(z ~ x * y, g, aspect = c(1, .5),
drape=TRUE,
scales = list(arrows = FALSE),
pts = pts,
panel.3d.wireframe =
function(x, y, z,
xlim, ylim, zlim,
xlim.scaled, ylim.scaled, zlim.scaled,
pts, …Run Code Online (Sandbox Code Playgroud) 我想在 python 中绘制 3d 长方体。
输入:center(中心点有3个点)radius(3个半径值,每个维度一个)
理想情况下,它应该是一个线框图(我需要看看里面有什么)。我不太确定如何去做。使用 python matplotlib 或 Mayavi 就可以了。
谢谢!
到目前为止,我已经尝试了以下代码..但这只绘制了一个立方体
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from itertools import product, combinations
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.set_aspect("equal")
#draw cube
r = [-1, 1]
for s, e in combinations(np.array(list(product(r,r,r))), 2):
if np.sum(np.abs(s-e)) == r[1]-r[0]:
ax.plot3D(*zip(s,e), color="b")
plt.show()
Run Code Online (Sandbox Code Playgroud)
这段代码中缺少的是它只是一个立方体(不是长方体)并且它仅以 0 为中心(我实际上想提供中心)
经过一番思考,我想出了这个。这似乎是正确的。如果您认为它不正确,请告诉我...这是无需安装 myavi、pygame、povray 的最简单方法(我很难在 ipython、conda、我的 Windows 笔记本电脑上安装这些)
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from itertools …Run Code Online (Sandbox Code Playgroud) 我有一个线框着色器,可以在左侧立方体上显示三角形,并希望对其进行更新,使其仅显示四边形,例如在右侧立方体上。
这是代码:
Shader "Custom/Wireframe"
{
Properties
{
_WireColor("WireColor", Color) = (1,0,0,1)
_Color("Color", Color) = (1,1,1,1)
}
SubShader
{
Pass
{
CGPROGRAM
#include "UnityCG.cginc"
#pragma target 5.0
#pragma vertex vert
#pragma geometry geom
#pragma fragment frag
half4 _WireColor, _Color;
struct v2g
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
struct g2f
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float3 dist : TEXCOORD1;
};
v2g vert(appdata_base v)
{
v2g OUT;
OUT.pos = mul(UNITY_MATRIX_MVP, v.vertex);
OUT.uv = v.texcoord;
return …Run Code Online (Sandbox Code Playgroud)