Matplotlib绘制常用三维图


在这里插入图片描述

想学习架构师构建流程请跳转:Java架构师系统架构设计

1 三维图像的绘制简介

Matplotlib使用和绘制二维图表:https://blog.csdn.net/ZGL_cyy/article/details/125705060

matplotlib支持绘制三维线框图, 三维曲面图, 三维散点图. 需要使用axes3d提供3d坐标系.

from mpl_toolkits.mplot3d import axes3d
ax3d = mp.gca(projection='3d')

ax3d.plot_wireframe()	# 绘制3d线框图
ax3d.plot_surface()		# 绘制3d曲面图
ax3d.scatter()			# 绘制3d散点图

2 三维线框图

ax3d.plot_wireframe(
    x, y, 	# x,y网格点坐标矩阵
    z, 		# z为每个坐标点的值
	rstride=30,	# 行跨距
    cstride=30, # 列跨距
    linewidth=1,
    color=''
)	

案例演示:

"""
三维线框图
"""
import numpy as np
import matplotlib.pyplot as mp
from mpl_toolkits.mplot3d import axes3d

# 生成网格点坐标矩阵
n = 1000
x, y = np.meshgrid(np.linspace(-3, 3, n),
				   np.linspace(-3, 3, n))
# 根据x,y 计算当前坐标下的z高度值
z = (1-x/2 + x**5 + y**3) * np.exp(-x**2 -y**2)

mp.figure('Wireframe', facecolor='lightgray')
ax3d = mp.gca(projection='3d')
ax3d.set_xlabel('X', fontsize=14)
ax3d.set_ylabel('Y', fontsize=14)
ax3d.set_zlabel('Z', fontsize=14)
ax3d.plot_wireframe(x, y, z, rstride=10, 
	cstride=10,color='dodgerblue')
mp.show()

在这里插入图片描述

3 三维曲面图

ax3d.plot_surface(
    x, y, 	# x,y网格点坐标矩阵
    z, 		# z为每个坐标点的值
	rstride=30,	# 行跨距
    cstride=30, # 列跨距
    cmap='jet'
)	

案例演示:

"""
三维曲面图
"""
import numpy as np
import matplotlib.pyplot as mp
from mpl_toolkits.mplot3d import axes3d

# 生成网格点坐标矩阵
n = 1000
x, y = np.meshgrid(np.linspace(-3, 3, n),
				   np.linspace(-3, 3, n))
# 根据x,y 计算当前坐标下的z高度值
z = (1-x/2 + x**5 + y**3) * np.exp(-x**2 -y**2)

mp.figure('Surface', facecolor='lightgray')
ax3d = mp.gca(projection='3d')
ax3d.set_xlabel('X', fontsize=14)
ax3d.set_ylabel('Y', fontsize=14)
ax3d.set_zlabel('Z', fontsize=14)
ax3d.plot_surface(x, y, z, rstride=50, 
	cstride=50, cmap='jet')
mp.show()

在这里插入图片描述

4 三维散点图

ax3d.scatter(
	x, y, z,  		 # x,y,z  确定一组散点坐标
    marker='',		 # 点型
    s = 60,			 # 点的大小
    edgecolor='',	 # 边缘色
    facecolor='',	 # 填充色
    zorder=3,		 # 绘制图层编号 
    c=d,			 # 设置过渡性颜色
    cmap='jet'		 # 颜色映射
)
12345678910

案例演示:

"""
三维散点图
"""
import numpy as np
import matplotlib.pyplot as mp
import mpl_toolkits.mplot3d as axes3d

n = 500
x = np.random.normal(0, 1, n)
y = np.random.normal(0, 1, n)
z = np.random.normal(0, 1, n)
d = np.sqrt(x**2 + y**2 + z**2)

mp.figure('3D Scatter')
ax3d = mp.gca(projection='3d')
ax3d.set_xlabel('X', fontsize=14)
ax3d.set_ylabel('Y', fontsize=14)
ax3d.set_zlabel('Z', fontsize=14)
ax3d.scatter(x, y, z, s=60, alpha=0.6, 
	c=d, cmap='jet')
mp.show()

在这里插入图片描述

5 三维柱状图

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
#构造需要显示的值
X=np.arange(0, 5, step=1)#X轴的坐标
Y=np.arange(0, 9, step=1)#Y轴的坐标
#设置每一个(X,Y)坐标所对应的Z轴的值,在这边Z(X,Y)=X+Y
Z=np.zeros(shape=(5, 9))
for i in range(5):
    for j in range(9):
        Z[i, j]=i+j
xx, yy=np.meshgrid(X, Y)#网格化坐标
X, Y=xx.ravel(), yy.ravel()#矩阵扁平化
bottom=np.zeros_like(X)#设置柱状图的底端位值
Z=Z.ravel()#扁平化矩阵
width=height=1#每一个柱子的长和宽
#绘图设置
fig=plt.figure()
ax=fig.gca(projection='3d')#三维坐标轴
ax.bar3d(X, Y, bottom, width, height, Z, shade=True)#
#坐标轴设置
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z(value)')
plt.show()

在这里插入图片描述

6 三维折线图

import numpy as np
import matplotlib.pyplot as plt

xs1 = np.ones(100)
ys1 = range(1, 101)
zs1 = np.zeros(100)

xs2 = np.ones(100) * 2
ys2 = range(1, 101)
zs2 = np.zeros(100)

xs3 = np.ones(100) * 3
ys3 = range(1, 101)
zs3 = np.zeros(100)
for i in range(21, 100):
  zs3[i] = -0.22

xs4 = np.ones(100) * 4
ys4 = range(1, 101)
zs4 = np.zeros(100)


# Plot
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
ax.plot(xs1, ys1, zs1, lw=2, color=[0.8, 0.33, 0])
ax.plot(xs2, ys2, zs2, lw=2, color=[0.33, 0.8, 0])
ax.plot(xs3, ys3, zs3, lw=2, color=[0, 0.5, 0.8])
ax.plot(xs4, ys4, zs4, lw=2, color=[0.8, 0.1, 0.5])
# ax.set_xlabel("X Axis")
# ax.set_ylabel("Y Axis")
# ax.set_zlabel("Z Axis")
# ax.set_title("Addective fault simulation")
plt.show()

在这里插入图片描述

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PyQt是一种用于开发GUI应用程序的Python库,而Matplotlib是一个用于创建2D和3D图形的Python库。通过结合使用PyQt和Matplotlib,我们可以创建出交互式的三维图形。 要创建一个PyQt+Matplotlib三维图形,首先需要安装好PyQt和Matploblib库。然后,我们可以使用Matplotlib的Axes3D模块来创建一个三维坐标系,并在其中添加数据点、曲线或曲面。 创建一个基本的三维图形可以遵循以下步骤: 1. 导入必要的库:import PyQt5.QtWidgets as qtw,import matplotlib.pyplot as plt,import numpy as np,from mpl_toolkits.mplot3d import Axes3D 2. 创建一个PyQt的MainWindow窗口:app = qtw.QApplication([]),window = qtw.QMainWindow(),window.show() 3. 创建一个Matplotlib的FigureCanvasQTAgg对象,并将其添加到MainWindow窗口中:canvas = FigureCanvasQTAgg(plt.figure()),window.setCentralWidget(canvas) 4. 在FigureCanvasQTAgg对象上创建一个子图并设置为三维坐标系:ax = canvas.figure.add_subplot(111, projection='3d') 5. 在三维坐标系上添加数据点、曲线或曲面:ax.scatter(x, y, z) 或 ax.plot_surface(X, Y, Z) 6. 执行程序并显示窗口:app.exec() 例如,可以使用以下代码创建一个简单的三维散点图: ```python import PyQt5.QtWidgets as qtw import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D app = qtw.QApplication([]) window = qtw.QMainWindow() window.show() fig = plt.figure() canvas = FigureCanvasQTAgg(fig) window.setCentralWidget(canvas) ax = fig.add_subplot(111, projection='3d') x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] z = [5, 9, 3, 2, 8] ax.scatter(x, y, z) app.exec() ``` 以上代码将创建出一个PyQt窗口,其中包含了一个散点图,散点图的数据由列表x、y和z提供。 总而言之,PyQt结合Matplotlib可以方便地创建出各种类型的三维图形,我们可以根据自己的需要在图形中添加不同类型的数据点、曲线或曲面,从而实现交互式和可视化的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵广陆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值