文章目录

  • 1 三维图
  • 2 三维等高线
  • 3 二维等高线
  • 4 三维表面图上画曲线
  • 5 三维曲线投影到坐标轴

关于三维图像的内容很多博友已经写了
推荐: 三维绘图, 画三维图, 3d图-英文版, 中文版三维图
上面写的都非常详细,很推荐,特别是英文版和中文版三维图那个,基于此,只给我写的一个例子

1 三维图

画f(x,y)=x2+y2f(x,y)=x^2+y^2f(x,y)=x2+y2的三维图

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Dx = np.arange(-10,10,0.2)
y = np.arange(-10,10,0.2)
f_x_y=np.power(x,2)+np.power(y,2)
fig = plt.figure()
ax = plt.gca(projection='3d')
ax.plot(x,y,f_x_y)

画出2维不相关高斯分布的3维图,即下面公式中n=2的情况

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist
from mpl_toolkits.mplot3d import Axes3D #画三维图不可少
from matplotlib import cm  #cm 是colormap的简写# 1_dimension gaussian function
def gaussian(x,mu,sigma):f_x = 1/(sigma*np.sqrt(2*np.pi))*np.exp(-np.power(x-mu, 2.)/(2*np.power(sigma,2.)))return(f_x)# 2_dimension gaussian function
def gaussian_2(x,y,mu_x,mu_y,sigma_x,sigma_y):f_x_y = 1/(sigma_x*sigma_y*(np.sqrt(2*np.pi))**2)*np.exp(-np.power\(x-mu_x, 2.)/(2*np.power(sigma_x,2.))-np.power(y-mu_y, 2.)/\(2*np.power(sigma_y,2.)))return(f_x_y)#设置2维表格
x_values = np.linspace(-5,5,2000)
y_values = np.linspace(-5,5,2000)
X,Y = np.meshgrid(x_values,y_values)
#高斯函数
mu_x,mu_y,sigma_x,sigma_y = 0,0,0.8,0.8
F_x_y = gaussian_2(X,Y,mu_x,mu_y,sigma_x,sigma_y)
#显示三维图
fig = plt.figure()
ax = plt.gca(projection='3d')
ax.plot_surface(X,Y,F_x_y,cmap='jet')
# 显示等高线图
#ax.contour3D(X,Y,F_x_y,50,cmap='jet')

2 三维等高线

将上面等高线打开,三维图注释掉

#ax.plot_surface(X,Y,F_x_y,cmap='jet')
# 显示等高线图
ax.contour3D(X,Y,F_x_y,50,cmap='jet')

3 二维等高线

将上面的图截取截面就是2维平面,是一个个圆形

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist
from mpl_toolkits.mplot3d import Axes3D #画三维图不可少
from matplotlib import cm  #cm 是colormap的简写#定义坐标轴函数
def setup_axes(fig, rect):ax = axisartist.Subplot(fig, rect)fig.add_axes(ax)ax.set_ylim(-4, 4)#自定义刻度
#    ax.set_yticks([-10, 0,9])ax.set_xlim(-4,4)ax.axis[:].set_visible(False)#第2条线,即y轴,经过x=0的点ax.axis["y"] = ax.new_floating_axis(1, 0)ax.axis["y"].set_axisline_style("-|>", size=1.5)
#    第一条线,x轴,经过y=0的点ax.axis["x"] = ax.new_floating_axis(0, 0)ax.axis["x"].set_axisline_style("-|>", size=1.5)return(ax)
# 1_dimension gaussian function
def gaussian(x,mu,sigma):f_x = 1/(sigma*np.sqrt(2*np.pi))*np.exp(-np.power(x-mu, 2.)/(2*np.power(sigma,2.)))return(f_x)# 2_dimension gaussian function
def gaussian_2(x,y,mu_x,mu_y,sigma_x,sigma_y):f_x_y = 1/(sigma_x*sigma_y*(np.sqrt(2*np.pi))**2)*np.exp(-np.power\(x-mu_x, 2.)/(2*np.power(sigma_x,2.))-np.power(y-mu_y, 2.)/\(2*np.power(sigma_y,2.)))return(f_x_y)#设置画布
fig = plt.figure(figsize=(8, 8)) #建议可以直接plt.figure()不定义大小
ax1 = setup_axes(fig, 111)
ax1.axis["x"].set_axis_direction("bottom")
ax1.axis['y'].set_axis_direction('right')
#在已经定义好的画布上加入高斯函数
x_values = np.linspace(-5,5,2000)
y_values = np.linspace(-5,5,2000)
X,Y = np.meshgrid(x_values,y_values)
mu_x,mu_y,sigma_x,sigma_y = 0,0,0.8,0.8
F_x_y = gaussian_2(X,Y,mu_x,mu_y,sigma_x,sigma_y)
#显示三维图
#fig = plt.figure()
#ax = plt.gca(projection='3d')
#ax.plot_surface(X,Y,F_x_y,cmap='jet')
# 显示3d等高线图
#ax.contour3D(X,Y,F_x_y,50,cmap='jet')
# 显示2d等高线图,画8条线
plt.contour(X,Y,F_x_y,8)

4 三维表面图上画曲线

fig = plt.figure()
ax = fig.gca(projection='3d')
temp_test = np.squeeze(temp[:,0,:,:])
Lat,Lon = np.meshgrid(lat,lon)
# Temp = np.zeros((lat.size,lon.size))
Temp = temp_test[0]    #first hour
surf = ax.plot_surface(Lat,Lon,Temp)
fig.colorbar=(surf)  #画表面图
ax.plot(lat_new, lon_new, t_interp,linewidth=10,color='r')  #画曲线plt.show()

由于我的值结果范围太小,看不出来,这条曲线是在表面上画一个环

5 三维曲线投影到坐标轴

由于三维曲面投影到坐标轴已经有了答案,在一开始我给的链接或者官网都有,如下:

(代码可以点开始给的链接进入查看)
但是三维曲线曲线曲线的投影还没有给,所以这里通过查找一番之后总结如下(参考python,matlab)
以下我使用的是python

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.gca(projection='3d')
#输入经纬度和海拔值(也就是x,y,z)
ax.plot(lat_new, lon_new, temp_list[layer], linewidth=10, color='r')plt.show()


现在要将这个图投影到x-z坐标面上

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot(lat_new, lon_new, temp_list[layer], linewidth=10, color='r')
null = [30]*len(lat_new)  #在y=30处的面ax.plot(null, lon_new, temp_list[layer])
# ax.plot(lat_new,null, temp_list[layer])
# ax.plot(lat_new, lon_new, null)plt.show()


同时在三个面上投影

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot(lat_new, lon_new, temp_list[layer], linewidth=10, color='r')
#至于要在多大的值上投影,可以自己测试找到最合适的
x_z = [min(lat_new)-0.5]*len(lat_new)
y_z = [max(lon_new)+0.5]*len(lon_new)
x_y = [min(temp_list[layer])-0.5]*len(temp_list[layer])ax.plot(x_z, lon_new, temp_list[layer])
ax.plot(lat_new, y_z, temp_list[layer])
ax.plot(lat_new, lon_new, x_y)plt.show()

python (matplotlib)画三维图像相关推荐

  1. python画三维立体图-python之画三维图像

    一:利用的包: (1)构建三维对象:mpl_toolkits.mplot3d里面导入Axes3D (2)数据方面操作:numpy (3)绘图工具包:matplotlib.pyplot 二:绘图: 1. ...

  2. python画3d图-python之画三维图像

    一:利用的包: (1)构建三维对象:mpl_toolkits.mplot3d里面导入Axes3D (2)数据方面操作:numpy (3)绘图工具包:matplotlib.pyplot 二:绘图: 1. ...

  3. python.plt 画三维图像

    import matplotlib.pyplot as pltfig = plt.figure(figsize=(10,6)) ax = fig.gca(projection="3d&quo ...

  4. python matplotlib画三维折线图

    from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt import numpy as npX=np.array ...

  5. python绘制三维散点图-python 画三维图像 曲面图和散点图的示例

    用python画图很多是根据z=f(x,y)来画图的,本博文将三个对应的坐标点输入画图: 散点图: import matplotlib.pyplot as plt from mpl_toolkits. ...

  6. python散点图解_python 画三维图像 曲面图和散点图的示例

    用python画图很多是根据z=f(x,y)来画图的,本博文将三个对应的坐标点输入画图: 散点图: import matplotlib.pyplot as plt from mpl_toolkits. ...

  7. python怎么画三维函数图像_python中如何画三维的图形?

    之前教了大家不少简单的画图方法,有的小伙伴已经想尝试更漂亮的高难度图形.小编找到了一个简单容易上手的分享给大家. 如果需要绘制三维的图形,matlab可以,python同样可以,代码风格也是极其的与m ...

  8. python 画三维函数图-如何用Matplotlib 画三维图的示例代码

    最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平面上呈现出立体感 三维的线图和散 ...

  9. python画三维立体图-如何用Matplotlib 画三维图的示例代码

    用Matplotlib画三维图 最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平 ...

  10. python怎样画立体图-如何用Matplotlib 画三维图的示例代码

    用Matplotlib画三维图 最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平 ...

最新文章

  1. 香港商务及经济发展局长:看好物联网发展
  2. linux下遍历目录树方法总结,linux下遍历目录树方法总结(下)
  3. oracle 升级前备份,rac(exadata)升级前的备份及LVM快照的恢复
  4. html css简单form表单源码
  5. 10条途径迅速提高你的生活
  6. 8. 字符串转换整数 (atoi)(正则表达式)
  7. 在 Windows 10 中查找 BitLocker 恢复密钥
  8. Visual Assist X 10.8.2001 破解版 支持VC2013及以下版本
  9. DPI-1047: Cannot locate a 64-bit Oracle Client library
  10. Java中的双重检查(Double-Check)详解
  11. 建立基于安全域的涉密信息系统
  12. 基于机器学习的DNS隐蔽隧道检测方法与实现
  13. 账号二次登陆,强制当前账号下线
  14. 无所不能的python是如何解决程序员的终身大事的?
  15. C语言程序设计入门教程
  16. 弗朗西斯培根的四大假象
  17. select下拉选项禁用
  18. Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network论文翻译——中文版
  19. FreeRTOS中相对延时和绝对延时的区别
  20. soj 9161. VOYAGER

热门文章

  1. 上决╇ф的精确打击问题【最大流】
  2. CSS实现按钮凸出的翻转卡片
  3. 这样学习C语言最有效(连载2)——趣味、通俗、实用的计算机达人成长之路之C语言高级技巧篇...
  4. 你的主机中的软件中止了一个已建立的连接。_【红外应用】红外测温在钢包在线监测中的应用...
  5. 数据中心建设考虑事项
  6. 57套古风字体462套英文字体79套中文字体
  7. 激光测距传感器有哪些优势
  8. 适用于90%网剧、网大的最新备案流程解析
  9. 开源项目|RT-Thread 软件包应用作品:水墨屏桌面台历
  10. 2‘13寸墨水屏时钟diy教程