鱼C论坛

 找回密码
 立即注册
查看: 2868|回复: 3

[已解决]使用matplotlib绘制3D时无法正常绘制

[复制链接]
发表于 2023-2-11 13:20:03 | 显示全部楼层 |阅读模式
5鱼币
在pycharm上运行这段代码,没有报错,但是figure里面是白的,想问问为什么
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
#定义一个图像窗口,在窗口上添加3D坐标轴
fig = plt.figure()
ax = Axes3D(fig)

# X, Y value
#给进 X 和 Y 值,并将 X 和 Y 编织成栅格。
# 每一个(X, Y)点对应的高度值我们用下面这个函数来计算
#0.25是步长
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)    # x-y 平面的网格
R = np.sqrt(X ** 2 + Y ** 2)
# height value
Z = np.sin(R)
#做出一个三维曲面,并将一个 colormap rainbow 填充颜色,
# 之后将三维图像投影到 XY 平面上做一个等高线图。
# 其中,rstride 和 cstride 分别代表 row 和 column 的跨度。
# 跨度越小,图形上的网格越密集
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'),edgecolor='black')

plt.show()
最佳答案
2023-2-11 13:20:04
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X ** 2 + Y ** 2)
Z = np.sin(R)

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'), edgecolor='black')

plt.show()

这里我们做了两个修改:

在定义图形对象fig时只定义了一次,可以省略第二次定义。
用add_subplot()方法代替了Axes3D()方法,来创建3D图形子图。

最佳答案

查看完整内容

import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111, projection='3d') X = np.arange(-4, 4, 0.25) Y = np.arange(-4, 4, 0.25) X, Y = np.meshgrid(X, Y) R = np.sqrt(X ** 2 + Y ** 2) Z = np.sin(R) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'), edgecolor='black') plt.show() 这里我们做了两个修改: 在定义图形 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-11 13:20:04 | 显示全部楼层    本楼为最佳答案   
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X ** 2 + Y ** 2)
Z = np.sin(R)

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'), edgecolor='black')

plt.show()

这里我们做了两个修改:

在定义图形对象fig时只定义了一次,可以省略第二次定义。
用add_subplot()方法代替了Axes3D()方法,来创建3D图形子图。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-12 23:03:27 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-2-16 17:14:14 | 显示全部楼层
月下孤井 发表于 2023-2-16 14:27
import numpy as np
import matplotlib.pyplot as plt

可以了,谢谢!那请问为啥不能用Axes3D()方法呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 07:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表