首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mplot3d中禁用透视?

如何在mplot3d中禁用透视?
EN

Stack Overflow用户
提问于 2014-05-24 10:25:05
回答 2查看 9.8K关注 0票数 17

在mplot3d中绘图时,是否可以禁用透视,即使用正交投影?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-24 10:33:00

注意:这已经更新了,请参阅this answer

在某种程度上,您可以在绘制之前运行以下代码片段:

代码语言:javascript
复制
import numpy
from mpl_toolkits.mplot3d import proj3d
def orthogonal_proj(zfront, zback):
    a = (zfront+zback)/(zfront-zback)
    b = -2*(zfront*zback)/(zfront-zback)
    return numpy.array([[1,0,0,0],
                        [0,1,0,0],
                        [0,0,a,b],
                        [0,0,0,zback]])
proj3d.persp_transformation = orthogonal_proj

这是目前在here中发现的一个开放问题。

票数 12
EN

Stack Overflow用户

发布于 2018-04-16 19:57:19

从matplot版本2.2.2 Whats new | github开始,这是正式包含的

所以要绘制透视正交图,你必须添加proj_type = 'ortho',然后你应该有类似这样的东西:

代码语言:javascript
复制
fig.add_subplot(121, projection='3d', proj_type = 'ortho')

示例图片

]2示例取自官方示例script并进行了编辑

代码语言:javascript
复制
'''
======================
3D surface (color map)
======================

Demonstrates plotting a 3D surface colored with the coolwarm color map.
The surface is made opaque by using antialiased=False.

Also demonstrates using the LinearLocator and custom formatting for the
z axis tick labels.
'''

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np

# Make data.
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

# Plot the surface.
fig = plt.figure(figsize=(16,4))
ax.view_init(40, 60)
ax = fig.add_subplot(121, projection='3d')
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)
ax.set_zlim(-1.01, 1.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))


ax = fig.add_subplot(122, projection='3d', proj_type = 'ortho')
# Plot the surface.
surf = ax.plot_surface(X, Y, Z, cmap=cm.viridis, linewidth=0, antialiased=False)
ax.set_zlim(-1.01, 1.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))

plt.show()
票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23840756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档