• Python绘制三维立体图详解


    1.利用Python绘制三维图

    目标: 绘制图像 z^2 = x^2 + y^2 + x/3 + y/3


    1.第一步我们先导入画图所需要的包:

    1. import matplotlib.pyplot as plt
    2. import numpy as np
    3. from mpl_toolkits.mplot3d import Axes3D # 用于绘制3D图案

    2.画曲面的第一步是就是要创建一个二维平面的网格,我们先创建这个二维平面的x轴和y轴,范围在-1到1之间分为100份

    1. x = np.linspace(-1,1,100)
    2. y = np.linspace(-1,1,100)

            再调用numpy中的meshgrid函数,进行网格化操作

    x_,y_ = np.meshgrid(x,y,indexing='ij') 
    

    3.绘制图形:

    plt.figure():自定义图像,plt.add_subplot():添加子图(下面完整代码中的111的含义是创建一个一行一列的子图表格,最后一个1表示第一个子图),plt.plot_surface():绘制曲面,plt.colorbar():添加颜色棒

    显示的函数为:

    z_ = x_**2 + y_**2 + x_ / 3 + y_ / 3

    4.完整代码:

    1. import matplotlib.pyplot as plt
    2. import numpy as np
    3. from mpl_toolkits.mplot3d import Axes3D #绘制3D图案
    4. x = np.linspace(-1,1,100)
    5. y = np.linspace(-1,1,100)
    6. x_, y_ = np.meshgrid(x,y,indexing='ij')
    7. z_ = x_**2 + y_**2 + x_ / 3 + y_ / 3 # 画图所要表现出来的主函数
    8. fig = plt.figure(figsize=(10, 10), facecolor='white') #创建图片
    9. sub = fig.add_subplot(111, projection='3d')# 添加子图,
    10. surf = sub.plot_surface(x_, y_, z_, cmap=plt.cm.brg) #绘制曲面,cmap=plt.cm.brg并设置颜色cmap
    11. cb = fig.colorbar(surf, shrink=0.8, aspect=15) #设置颜色棒
    12. sub.set_xlabel(r"x axis")
    13. sub.set_ylabel(r"y axis")
    14. sub.set_zlabel(r"z axis")
    15. plt.show()

    运行结果如下:

    2.外例:

    1. import numpy as np
    2. import matplotlib.pyplot as plt
    3. fig,ax = plt.subplots()
    4. #配置中文显示
    5. plt.rcParams['font.family'] = ['SimHei'] #用来显示中文标签
    6. plt.rcParams['axes.unicode_minus'] = False #用来正常显示符号
    7. def f(t):
    8. return np.cos(2*np.pi*t)
    9. x1 = np.arange(0.0,4.0,0.5) # 画出定点图
    10. x2 = np.arange(0.0,4.0,0.01)
    11. plt.figure(1)
    12. plt.subplot(1,2,1)
    13. plt.plot(x1,f(x1),'bo',x2,f(x2),'k')
    14. plt.title('子图1')
    15. plt.subplot(1,2,2)
    16. plt.plot(x2,f(x2),'r--')
    17. plt.title('子图2')
    18. plt.show()

    1. import matplotlib.pyplot as plt
    2. import numpy as np
    3. import matplotlib.cm as cm#matplotlib内置的颜色地图
    4. from mpl_toolkits.mplot3d import Axes3D#引入3d绘图模块
    5. X = np.arange(-8, 8, 0.25)
    6. Y = np.arange(-8, 8, 0.25)
    7. X, Y = np.meshgrid(X, Y)#生成网格点矩阵,就是对X,Y进行网格化
    8. R = np.sqrt(X**2 + Y**2 + X + Y)#X**2代表X的二次方
    9. Z = np.sin(R)
    10. fig = plt.figure()#Figure(640x480) 生成画布
    11. ax = Axes3D(fig)#和上一步一起构建一个3d画布
    12. ax.plot_surface(X, Y, Z, rstride=1#行跨(x)为1
    13. , cstride=1 #列跨(y)为1
    14. , cmap=cm.viridis #设置颜色
    15. )#构造3D图像
    16. ax.contourf(X,Y,Z,#传入数据
    17. zdir='z'#设置为z轴为等高线的不变轴
    18. ,offset=-1#映射位置在z=-1处
    19. ,cmap=plt.get_cmap('rainbow')#设置颜色为彩虹色
    20. )#绘制图像的映射,就是等高线图。
    21. plt.xlabel('x_axis')
    22. plt.ylabel('y_axis')
    23. plt.show()

     

    1. import matplotlib.pyplot as plt#引入matplotlib的pyplot模块
    2. import numpy as np
    3. a=np.arange(0.0,5.0,0.01)#构造一个0起始,5结束,0.01为间隔的numpy数组
    4. b=5*np.cos(a*np.pi*2)#其中的np.pi是圆周率
    5. plt.plot(a,b,'r-',label='first')#将a作为x轴,b作为y轴,ro-中的r代表红色,0代表实心点标识,-代表实线,构造一条名为first的曲线。
    6. #plt.xlabel('x_axis')
    7. plt.xlabel('时间',fontproperties='SimHei',fontsize=20)#如果名字中有中文的话一定要用fontproperties='SimHei属性,否则会报错
    8. #plt.ylabel('y_axis')
    9. plt.title('正弦波',fontproperties='SimHei',fontsize=20)#设置标题
    10. plt.xlim((0,5))
    11. plt.ylim((-5,5))
    12. plt.legend(loc='lower right')#注释的位置
    13. plt.grid(True)#添加网格,flase就是不添加
    14. plt.show()#如果先show,之后保存的就是一张空白的图

     

    3.绘图的填充 

    3.1调用函数fill_between()实现曲线下面部分的填充

    1. import numpy as np
    2. import matplotlib.pyplot as plt
    3. x = np.linspace(0,1,500)
    4. y = np.sin(3*np.pi*x)*np.exp(-4*x)
    5. fig,ax = plt.subplots()
    6. plt.plot(x,y)
    7. plt.fill_between(x,0,y,facecolor = 'green',alpha = 0.3)
    8. # plt.fill_between(x[15:300],0,0.4,facecolor = 'green',alpha = 0.3)
    9. # 调整参数可在部分区间内填充
    10. plt.show()

    3.2 两条曲线之间的区域填充 

    1. import numpy as np
    2. import matplotlib.pyplot as plt
    3. import numpy as np
    4. import matplotlib.pyplot as plt
    5. x = np.linspace(0,1,500)
    6. y1 = np.sin(3*np.pi*x)*np.exp(-4*x) + x
    7. y2 = y1 + 0.2
    8. plt.plot(x,y1,'b')
    9. plt.plot(x,y2,'r')
    10. plt.fill_between(x,y1,y2,facecolor = 'green',alpha = 0.5)
    11. plt.show()

     3.3 直接使用fill进行绘图的填充

    1. import numpy as np
    2. import matplotlib.pyplot as plt
    3. x = np.linspace(0,1,500)
    4. y = np.sin(3*np.pi*x)*np.exp(-4*x) + 2*x
    5. fig,ax = plt.subplots()
    6. ax.fill(x,y)
    7. plt.show()

  • 相关阅读:
    国庆来临,外贸人出货必须注意的几个点(附节日营销技巧)
    如何实现安卓屏幕分享及视频聊天?(源码)
    C++【STL】【string类的模拟实现】【string类的深浅拷贝】
    音乐APP首页框架搭建
    [附源码]计算机毕业设计基于springboot的连锁药店销售管理系统
    细说Linux的图形界面系统XServer与VNC及其它
    分布式一致性算法 -- Paxos
    C++教程(2)
    Anaconda + VS Code 的安装与使用
    P1803 凌乱的yyy / 线段覆盖 【贪心】
  • 原文地址:https://blog.csdn.net/weixin_64338372/article/details/128074303