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系列-22]:Python之人工智能 - 基本工具 - 6- 绘制二元函数的三维曲面图