Python绘制三维图详解

Posted 北山啦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python绘制三维图详解相关的知识,希望对你有一定的参考价值。

利用Python绘制三维图

目标: 绘制图像 z 2 = x 2 + y 2 z^2 = x^2 + y^2 z2=x2+y2

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

画曲面的第一步是就是要创建一个二维平面的网格,在Python当中,我们使用meshgrid()函数,在matlab中也是这个函数哦

创建数据:首先创建x和y,它们的范围都是(-1,1)

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

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

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

x_,y_返回网格数组,通过打印x_和y_的形状,可以看到x_,y_都是(100*50) 的二维数组,也就是数组x的长度乘以数组y的长度

print(x_.shape,y_.shape)  
(100, 50) (100, 50)

网格化统一了X,Y的维度,数组运算时,涉及更多数据,范围更广

z_ = x_**2 + y_**2

绘制图形

plt.figure():自定义图像
.add_subplot():添加子图
.plot_surface():绘制曲面
.colorbar():添加颜色棒

fig = plt.figure(figsize=(12,8),facecolor='white') #创建图片
sub = fig.add_subplot(111,projection='3d')# 添加子图,
surf = sub.plot_surface(x_,y_,z_,cmap=plt.cm.brg) #绘制曲面,并设置颜色cmap
cb = fig.colorbar(surf,shrink=0.8,aspect=15) #设置颜色棒


sub.set_xlabel(r"$x$")
sub.set_ylabel(r"$y$")
sub.set_zlabel(r"$z$")
plt.show()

完整代码

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

x = np.linspace(-1,1,100)
y = np.linspace(-1,1,50)
x_,y_ = np.meshgrid(x,y,indexing='ij') 
z_ = x_**2 + y_**2
fig = plt.figure(figsize=(12,8),facecolor='white') #创建图片
sub = fig.add_subplot(111,projection='3d')# 添加子图,
surf = sub.plot_surface(x_,y_,z_,cmap=plt.cm.brg) #绘制曲面,并设置颜色cmap
cb = fig.colorbar(surf,shrink=0.8,aspect=15) #设置颜色棒

sub.set_xlabel(r"$x$")
sub.set_ylabel(r"$y$")
sub.set_zlabel(r"$z$")
plt.show()

Python 绘图个人总结--包括绘制曲线二维栅格图三维栅格图

调用库

from matplotlib import pyplot as plt
import mpl_toolkits.axisartist as axisartist
from matplotlib import colors
import seaborn as sns
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 #有中文出现的情况,需要u'内容'

绘制曲线

# 前文:创建绘图对象
ax = axisartist.Subplot(fig, 111)  # 111 代表1行1列的第1个,subplot()可以用于绘制多个子图
fig.add_axes(ax)  # 将绘图区对象添加到画布中
ax.plot(x,y) :根据x和y绘制曲线(官网

linewidth

设置线宽

color

设置颜色,如果想要自定义RGB,需要将RGB值乘以1/255

marker

设置标记

label

设置标签名称

linestyle

设置曲线风格

# 示例:输入数据(x,y),并设置绘制曲线的线宽、颜色、标记点类型
# RGB  = 144,201,231
ax.plot(x,y,label='优化',linewidth = 1.0,color = (1/255*144,1/255*201,1/255*231),marker = '.')
ax.set_xlabel(text) / ax.set_ylabel(text):设置x轴和y轴的坐标轴标签(官网

fontsize

设置图标字体大小

# 示例:设置x轴标签文本和字号
ax.set_xlabel('lablex',fontsize=12)
ax.tick_params():设置x,y轴刻度值(官网所有参数

axis

选择x,y坐标轴

which

选择主副坐标轴

labelsize

刻度值字体大小

# 示例:设置xy轴(both)的刻度值字号大小
ax.tick_params(axis='both', which='major', labelsize=12) 
ax.legend():绘制图像标签(官网所有参数

fontsize

标签字体大小

labelspacing

调整标签之间上下的距离

borderpad

调整标签与左右边界的距离

# 示例:设置标签字号、上下左右的空间
ax.legend(fontsize=12,labelspacing = 1.1,borderpad=1.1)
ax.xaxis.tick_top():将x轴移到上方(包括x轴标签和刻度)
ax.yaxis.tick_right():将y轴移到右方(包括y轴标签和刻度)
ax.set_xticks(arr):用数组设置x轴刻度值
ax.set_yticks(arr):用数组设置y轴刻度值
(也可以用ax.set_xticks([min,max,gap])的方式,设置刻度值范围以及刻度区间大小)
ax.set_xlim(min,max):用范围设置x轴刻度值的最大最小值
ax.set_ylim(min,max):用范围设置y轴刻度值的最大最小值

二维栅格图

sns.heatmap():绘制热力图(官网

data

数据

cmap

色条范围

vmin

数据最小值

vmax

数据最大值

linewidths

热力图格子线宽

linecolor

热力图格子线颜色

ax

绘图区句柄

cbar

是否显示渐变色条

# 设置色条的范围,从0~2分别是white gray yellow
cmap = colors.ListedColormap(['white','gray','yellow'])
sns.heatmap(arr, cmap = cmap, vmin = 0, vmax = 2, linewidths = 0.75, linecolor= 'black', ax = ax, cbar = False)

三维栅格图

# 创建3D绘图区
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.voxels():将三维数组的数据渲染成栅格(官网

filled

决定哪个坐标的栅格会染色的布尔值矩阵

facecolors

栅格表面颜色

edgecolors

栅格边缘颜色

ax.view_init(elev , azim):调整默认的3D视角,elev参数调整上下的角度,azim调整左右的角度

做笔记也作分享,总结了一下最近用Python画图用到的库以及函数调用,对每种函数调用都列举了我自己用过的参数,以及官网链接,如果觉得有用的话可以三连一手呀哈哈哈~~~

以上是关于Python绘制三维图详解的主要内容,如果未能解决你的问题,请参考以下文章

Python 绘图个人总结--包括绘制曲线二维栅格图三维栅格图

Python怎么生成三维数

[Python系列-22]:Python之人工智能 - 基本工具 - 6- 绘制二元函数的三维曲面图

python matplotlib绘制 3D图像专题 (三维柱状图曲面图散点图曲线图合集)

python多个折线图合并到一个三维图

python 绘制3D图