【matploblib三维图教程】绘制线图,散点图,线框图

相信许多使用过python的小伙伴都知道matplotlib是个强大的数据可视化工具,但是大部分小伙伴都只用其绘制平面图形,本系列将会教大家如何利用matplotlib来绘制3D图像

一、简介

相较于之前的版本,最新版的matplotlib只需要通过将关键字参数projection="3d" 传递给来创建(Axes3D类的)Figure.add_subplot即可创建创建3维画布,其具体使用同2D相差无几:

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

在Matplotlib 1.0.0之前,Axes3D需要先实例化 。

from mpl_toolkits.mplot3d import Axes3D
ax = Axes3D(fig)

而Matplotlib在版本3.2.0中进行了更改:在Matplotlib 3.2.0之前,需要显式导入 mpl_toolkits.mplot3d模块,才能将“ 3d”参数传进 Figure.add_subplot。下面我们就来绘制各种图像:

二、图像

1、线图

函数点击可以查看该函数源码

Axes3D.plot(self,xs,ys,* args,zdir ='z'** kwargs )
参数
xs 数据点的x坐标
ys 数据点的y坐标
zs 数据点的z坐标
zdir {‘x’,‘y’,‘z’}绘制2D数据时,用作z的方向(“ x”,“ y”或“ z”);默认为“ z”。
**kwargs 其他

代码

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

t = np.linspace(0, 20, 100)
x = np.sin(t)
y = np.cos(t)

plt.plot(x, y, t)
plt.show()

效果图
在这里插入图片描述

2、散点图

函数点击可以查看该函数源码

Axes3D.scatter(self,xs,ys,zs = 0,zdir ='z',s = 20,c = None,depthshade = True* args,** kwargs )
参数
xs,ys 数据点阵列的位置
zs float类型或类似数组的参数,可选,默认值:0。表示 Z位置。长度与xs和 ys相同的数组,或者是将所有点放置在同一平面上的单个值。
zdir {‘x’,‘y’,‘z’,’-x’,’-y’,’-z’},可选,默认值:‘z’。zs的轴方向。在3D上绘制2D数据时,这很有用。数据必须作为xs,ys传递。然后将zdir设置 为“ y”,将数据绘制到xz平面上。
s 标量或阵列状,可选的,默认值:20。标记大小(以磅为单位)** 2。长度与xs和ys相同的数组或单个值可使所有标记的大小相同。
c 颜色,序列或颜色序列,可选
depthshade bool,可选,默认值:True。是否为散射标记着色以提供深度外观。每次调用scatter()都会独立执行深度着色。

代码

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

x = np.random.randint(0, 10, size=50)
y = np.random.randint(0, 10, size=50)
z = np.random.randint(0, 10, size=50)
# 颜色
c = np.random.randint(0, 20, 50)
# 大小
s = np.abs(np.random.randn(50) * 80)
plt.scatter(x, y, zs=z, s=s, c=c)
plt.show()

效果图:
在这里插入图片描述

扫描二维码关注公众号,回复: 10201233 查看本文章

3、线框图

函数点击可以查看该函数源码

Axes3D.plot_wireframe(self,X,Y,Z,* args,** kwargs )
参数
x,y,z 数据
rcount,ccount int类型。每个方向上使用的最大样本数。如果输入数据较大,则会将其下采样(通过切片)到这些点数。将计数设置为零会导致不在相应方向上对数据进行采样,从而生成3D线图而不是线框图。默认为50。
rstride,cstride int类型。下采样在每个方向上都迈出大步。这些参数与rcount和ccount互斥。如果仅将 rstride或cstride中的一个设置,则其他默认设置为1。将stride设置为零会导致不在相应方向上采样数据,从而生成3D线图而不是线框图。

代码

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

x, y = np.mgrid[-1:1:10j, -1:1:10j]
z = x * np.exp(-x ** 2 - y ** 2)
ax.plot_wireframe(x, y, z)
plt.show()

效果

在这里插入图片描述

发布了61 篇原创文章 · 获赞 454 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/weixin_41045354/article/details/105126472
今日推荐