鱼C论坛

 找回密码
 立即注册
查看: 2422|回复: 9

用matplotlib画三维图的时候我已经设定了z的表达式两个变量,为什么还是报错?

[复制链接]
发表于 2020-2-18 11:48:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

fig=plt.figure()
ax=Axes3D(fig)
x=np.arange(0,1,1)
y=np.arange(0,8,2)
z=((35*(np.cos(4*x))+20*(np.sin(2*x))+9)/64)*(np.cos(y))
ax.plot_surface(x, y, z)
plt.show()


代码如上,感谢各位大哥
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-18 11:53:39 | 显示全部楼层

  1. import matplotlib.pyplot as plt
  2. from mpl_toolkits.mplot3d import Axes3D
  3. import numpy as np

  4. fig=plt.figure()
  5. ax=Axes3D(fig)
  6. x=np.arange(0,1,1)
  7. y=np.arange(0,8,2)
  8. z=((35*(np.cos(4*x))+20*(np.sin(2*x))+9)/64)*(np.cos(y)).reshape(-1,1)
  9. print(z.shape)
  10. ax.plot_surface(x, y, z)
  11. plt.show()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-18 11:55:47 | 显示全部楼层

这样出来的图像不是我要结果了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-18 12:01:57 | 显示全部楼层
snowJR 发表于 2020-2-18 11:55
这样出来的图像不是我要结果了

你想要打的是什么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-18 12:06:06 | 显示全部楼层
塔利班 发表于 2020-2-18 12:01
你想要打的是什么

以x,y为变量z为函数的图像,我插一个用sympy画的给你看看
import sympy as sp
from sympy.plotting import plot3d
x=sp.symbols('x')
y=sp.symbols('y')
x1=sp.sin(x)
x2=sp.cos(4*x)
x3=sp.cos(2*x)
y1=sp.cos(y)
plot3d(((35*x2+20*x3+9)/64)*y1,(x,0,4),(y,0,8))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-18 12:18:14 | 显示全部楼层

  1. import matplotlib.pyplot as plt
  2. from mpl_toolkits.mplot3d import Axes3D
  3. import numpy as np

  4. fig=plt.figure()
  5. ax=Axes3D(fig)
  6. x=np.arange(0,10,0.1)
  7. y=np.arange(0,8,0.1)
  8. x,y = np.meshgrid(x,y)
  9. z=((35*(np.cos(4*x))+20*(np.sin(2*x))+9)/64)*(np.cos(y))
  10. ax.plot_surface(x, y, z)
  11. plt.show()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-18 12:39:37 | 显示全部楼层

x,y = np.meshgrid(x,y)在这里起到什么作用?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-18 12:55:59 | 显示全部楼层
snowJR 发表于 2020-2-18 12:39
x,y = np.meshgrid(x,y)在这里起到什么作用?

之前的x,y没有任何关系,这里是建立网格点,一个xoy上的点得有x,y坐标吧,要不你x,y长度也不一样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-18 12:57:38 | 显示全部楼层
塔利班 发表于 2020-2-18 12:55
之前的x,y没有任何关系,这里是建立网格点,一个xoy上的点得有x,y坐标吧,要不你x,y长度也不一样

哦哦,明白了,谢谢大佬~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-18 13:09:17 | 显示全部楼层
塔利班 发表于 2020-2-18 12:55
之前的x,y没有任何关系,这里是建立网格点,一个xoy上的点得有x,y坐标吧,要不你x,y长度也不一样

大佬大佬,我改了一下代码,画的图超出坐标轴了。。。。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

fig=plt.figure()
ax=Axes3D(fig)
x=np.arange(0,10,0.1)
y=np.arange(0,8,0.1)
x,y = np.meshgrid(x,y)
z=((35*(np.cos(4*x))+20*(np.sin(2*x))+9)/64)*(np.cos(y))

ax.set_xlabel('θ')
ax.set_xlim(0,4)
ax.set_ylabel('φ')
ax.set_ylim(0,8)
ax.set_zlabel('Y')
ax.set_zlim(0,1)
ax.plot_surface(x, y, z)
plt.show()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-22 15:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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