python使用matplotlib绘制3D图

python使用matplotlib绘制3D图,第1张

python中绘制3D图形

python绘制3D图形,依赖模块matplotlib,但需要安装mpl_toolkits工具包,调用mplot3d类进行3D图形的绘制,mpl_toolkits是mataplotlib里面的工具包

1、安装matplotlib模块
 pip install --upgrade matplotlib
# windows系统需进入到python安装目录下的Scripts文件夹下执行
2. 绘制3D曲面图

绘制曲面图使用的是plot_surface()方法,这个方法的参数相对而言更简单。且X、Y、Z三者的顺序相对较为容易分辨。

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['font.sans-serif'] = ['STKAITI']
plt.rcParams['axes.unicode_minus'] = False

def three_dimension_curved_surface():
    plt.rcParams['axes.facecolor'] = '#cc00ff'
    fig = plt.figure(figsize=(10, 8), facecolor='#cc00ff')
    ax = Axes3D(fig)
    delta = 0.125  # 步长
    # 生成代表X轴数据的列表
    x = np.arange(-4.0, 4.0, delta)
    print(x)
    # 生成代表Y轴数据的列表
    y = np.arange(-3.0, 4.0, delta)
    print(x)
    # 对x、y数据执行网格化
    X, Y = np.meshgrid(x, y)
    Z1 = np.exp(-X**2 - Y**2)
    Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
    # 计算Z轴数据(高度数据)
    Z = (Z1 - Z2) * 2
    # 绘制3D图形
    ax.plot_surface(X, Y, Z,
        rstride=1,  # rstride(row)指定行的跨度
        cstride=1,  # cstride(column)指定列的跨度
        cmap=plt.get_cmap('rainbow'))  # 设置颜色映射
    plt.xlabel('X轴', fontsize=15)
    plt.ylabel('Y轴', fontsize=15)
    ax.set_zlabel('Z轴', fontsize=15)
    ax.set_title('three_dimension_curved_surface', y=1.02, fontsize=25, color='gold')
    # 设置Z轴范围
    ax.set_zlim(-2, 2)
    plt.savefig("three_dimension_curved_surface.jpg")
    plt.show()

three_dimension_curved_surface()
3. 绘制3D柱状图

        绘制3D柱状图使用的是bar()方法。在调用相关方法的时候,比如设置轴标签时,left对应的是y轴,zs对应的是x轴。使用plt.xticks()方法, *** 作的是zs;plt.yticks()方法 *** 作的是left轴;height对应着z轴。

bar(left, height, zs=0, zdir=‘z’, *args, **kwargs)
"""
left表示指向侧边的轴,
zs表示指向我们的方向的轴,
height即表示高度的轴。
这三者都需要是一维的序列对象。

"""

def example_bar():
    # 创建画布
    fig = plt.figure()
    # 创建3D坐标系
    axes3d = Axes3D(fig)
    # x,y = np.random.rand(2, 10) * 4
    x = [3.66321043, 1.29017557, 2.84006691, 3.96170737, 3.57874492, 0.32759713, 3.90725404, 0.94591511, 0.17395628, 3.28341506] 
    y = [3.66321043, 1.29017557, 2.84006691, 3.96170737, 3.57874492, 0.32759713, 3.90725404, 0.94591511, 0.17395628, 3.28341506] 
    z = [0, 0, 0, 0, 2, 0, 0, 0, 0, 0] 
    hist, xedges ,yedges = np.histogram2d(x,  y, bins=4,range=[[0,4],[0,4]])
    print(hist, xedges ,yedges)

    xpos,ypos = np.meshgrid(xedges[:-1] + 0.5,yedges[:-1]+0.15)
    xpos = xpos.flatten('F')
    ypos = ypos.flatten('F')
    zpos = np.zeros_like(xpos)
    # print(xpos, ypos, zpos)
    dx =0.5 * np.ones_like(zpos)
    dy = dx.copy()
    dz =hist.flatten()
            
    print(dx, dy, dz)
    axes3d.bar3d(
        xpos,
        ypos,
        zpos,
        dx,
        dy,
        dz, 
        zsort='average')
    plt.xlabel('xlabel----zs')
    plt.ylabel('ylabel----left')
    axes3d.set_zlabel('zlabel----height')
    plt.savefig("example_bar.jpg")
    plt.show()
4、参考
  1. Python numpy.histogram2d函数方法的使用-CJavaPy
  2. Python数据分析(Matplotlib)之3D图形_xGuardian的博客-CSDN博客_python 三维图形
  3. python matplotlib绘制 3D图像专题

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/727188.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存