本文通过学习matplotlib绘制3d图形的官方文档,总结了常用的3d图形,以及针对每类图形,通过一个小案例进行可视化。 从工具箱中导入绘制3D图所需要的坐标轴模块。 绘制子图添加坐标轴时先申明绘制的类型为:3D (使用projection = “3d”进行申明)。 1、在3d坐标轴对象下使用plot方法。 1、在3d坐标轴对象下使用scatter方法。 1、在3d坐标轴对象下使用plot_wireframe方法。 1、在3d坐标轴对象下使用plot_surface方法。 1、 在3d坐标轴对象下使用plot_trisurf方法。 1、 在3d坐标轴对象下使用contour方法。 contour方法图形(等高线不填充): 1、 在3d坐标轴对象下使用bar方法。 沿z轴排列图形: 你是一种感觉可视化篇(一)———使用matplotlib绘制常用3D图形及案例
摘要
官方文档(一)添加matplotlib 3D模块
from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt
# 绘制子图添加坐标轴时先申明绘制的类型为:3D (使用projection = "3d"进行申明) fig = plt.figure() ax = fig.add_subplot(1,1,1,projection = "3d")
(二)3d图中绘制曲线
2、其余参数同2d图。# ************* 3d图中绘制曲线 ************* # 在3d坐标轴对象下使用plot方法 import numpy as np fig = plt.figure() ax1 = fig.add_subplot(1,1,1,projection = "3d") x = np.linspace(-10,10,100) y = np.linspace(-10,10,100) z = x**10 + y**3 ax1.plot(x,y,z,label = "3d curve") # 其余参数同2d图 ax1.legend() plt.show()
(三)3d图中绘制散点图
2、zdir为指定z轴方向,其余参数同2d绘图。# ****************** 3d图中绘制散点图 ****************** # 在3d坐标轴对象下使用scatter方法 from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.add_subplot(1,1,1,projection = "3d") from sklearn.datasets import make_blobs data = make_blobs(n_samples = 100,n_features = 3,cluster_std = 2) x = data[0][:,0] z = data[0][:,1] y = data[0][:,2] label = data[1] colors = "" for i in range(100): if label[i] == 0: colors += "r" elif label[i] == 1: colors += "g" else: colors += "b" ax1.scatter(x,y,z,zdir = "z",c = colors) # zdir为指定z轴方向,其余参数同2d绘图 ax1.set_xlabel("x") ax1.set_xlabel("y") ax1.set_xlabel("z")
(四)3d图中绘制线框图
2、Axes3D写作axes3d也可以。
3、X和Y需要是二维数组。
4、rcount:为沿行方向绘制网格的数目,
ccount:为沿列方向绘制网格的数目。# ****************** 3d图中绘制线框图 ****************** # 在3d坐标轴对象下使用plot_wireframe方法 from mpl_toolkits.mplot3d import axes3d # Axes3D写作axes3d也可以 import matplotlib.pyplot as plt import numpy as np fig = plt.figure(figsize=(16,8)) ax1 = fig.add_subplot(1,1,1,projection = "3d") x = np.linspace(-5,5,1000) y = np.linspace(-5,5,1000) X,Y = np.meshgrid(x,y) # X和Y需要是二维数组 Z = np.sin(np.sqrt(X**2+Y**2)) ax1.plot_wireframe(X,Y,Z,rcount = 15,ccount = 15) # rcount:为沿行方向绘制网格的数目,ccount:为沿列方向绘制网格的数目, plt.show()
(五)3d图中绘制曲面图
2、rcount:为沿行方向绘制网格的数目
ccount:为沿列方向绘制网格的数目
cmap:设定配色板(可直接调用matplotlib.cm中的配色板,如autumn,autumn_r,coolwarm等等)
color:设定颜色# ****************** 3d图中绘制曲面图 ****************** # 在3d坐标轴对象下使用plot_surface方法 from mpl_toolkits.mplot3d import axes3d # Axes3D写作axes3d也可以 import matplotlib.pyplot as plt from matplotlib import cm import numpy as np fig = plt.figure(figsize=(16,8)) ax1 = fig.add_subplot(1,1,1,projection = "3d") x = np.linspace(-5,5,1000) y = np.linspace(-5,5,1000) X,Y = np.meshgrid(x,y) # X和Y需要是二维数组 Z = np.sin(np.sqrt(X**2+Y**2)) surf = ax1.plot_surface(X, Y, Z, cmap=cm.autumn) """ 其余参数: rcount:为沿行方向绘制网格的数目 ccount:为沿列方向绘制网格的数目 cmap:设定配色板(可直接调用matplotlib.cm中的配色板,如autumn,autumn_r,coolwarm等等) color:设定颜色 """ fig.colorbar(surf, shrink=0.5, aspect=5) plt.show()
(六)3d图中绘制三角表面图
2、以绘制莫比乌斯带为列。# ****************** 3d图中绘制三角表面图 ****************** # 在3d坐标轴对象下使用plot_trisurf方法 from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt import numpy as np from matplotlib import cm import matplotlib.tri as mtri # 以绘制莫比乌斯带为列 fig = plt.figure() ax1 = fig.add_subplot(1, 1, 1, projection='3d') x = np.linspace(0, 2*np.pi,100) y = np.linspace(-0.5, 0.5,20) x,y = np.meshgrid(x,y) # 将二维数组准换为一维数组 x = x.flatten() y = y.flatten() # 通过莫比乌斯映射,把x,y转化为X,Y,Z X = (1 + 0.5 * y * np.cos(x / 2.0)) * np.cos(x) Y = (1 + 0.5 * y * np.cos(x / 2.0)) * np.sin(x) Z = 0.5 * y * np.sin(x / 2.0) tri = mtri.Triangulation(x, y) ax1.plot_trisurf(X, Y, Z, triangles=tri.triangles, cmap=cm.coolwarm) ax1.set_zlim(-0.5, 0.5) plt.show()
(七)3d图中绘制等高线
2、绘制填充的等高线,使用contourf方法。
3、zdir:选定投影方向。
offset:选定投影方向的投影位置。# ****************** 3d图中绘制等高线 ****************** # 在3d坐标轴对象下使用contour方法 # 绘制填充的等高线,使用contourf方法 from mpl_toolkits.mplot3d import axes3d # Axes3D写作axes3d也可以 import matplotlib.pyplot as plt from matplotlib import cm import numpy as np fig = plt.figure(figsize=(16,16)) # contour方法 ax1 = fig.add_subplot(2,1,1,projection = "3d") x = np.linspace(-5,5,1000) y = np.linspace(-5,5,1000) X,Y = np.meshgrid(x,y) # X和Y需要是二维数组 Z = np.sin(np.sqrt(X**2+Y**2)) surf = ax1.plot_surface(X, Y, Z,alpha = 0.3) ax1.contour(X, Y, Z, zdir='z', offset=-1.5, cmap=cm.coolwarm) ax1.contour(X, Y, Z, zdir='x', offset=-7, cmap=cm.coolwarm) ax1.contour(X, Y, Z, zdir='y', offset=7, cmap=cm.coolwarm) """ zdir:选定投影方向 offset:选定投影方向的投影位置 """ ax1.set_xlabel('X') ax1.set_xlim(-7, 7) ax1.set_ylabel('Y') ax1.set_ylim(-7, 7) ax1.set_zlabel('Z') ax1.set_zlim(-1.5, 1.5) # contourf方法 ax2 = fig.add_subplot(2,1,2,projection = "3d") surf = ax2.plot_surface(X, Y, Z,alpha = 0.3) ax2.contourf(X, Y, Z, zdir='z', offset=-1.5, cmap=cm.coolwarm) ax2.contourf(X, Y, Z, zdir='x', offset=-7, cmap=cm.coolwarm) ax2.contourf(X, Y, Z, zdir='y', offset=7, cmap=cm.coolwarm) """ zdir:选定投影方向 offset:选定投影方向的投影位置 """ ax2.set_xlabel('X') ax2.set_xlim(-7, 7) ax2.set_ylabel('Y') ax2.set_ylim(-7, 7) ax2.set_zlabel('Z') ax2.set_zlim(-1.5, 1.5) plt.show()
contourf方法图形(等高线填充):
(八)3d图中绘制条形图
2、 left:表示条形图的横轴
height:表示条形图的纵轴
zdir:多组条形图的排列方向,即哪个轴
zs:多组条形图在排列方向上的位置# ****************** 3d图中绘制条形图 ****************** # 在3d坐标轴对象下使用bar方法 from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt import numpy as np fig = plt.figure(figsize=(16,16)) ax1 = fig.add_subplot(2,1,1,projection = "3d") np.random.seed(10) for color,z in zip(["r","g","b","k","y"],[0,10,20,30,40]): x = np.arange(10) y = np.abs(np.random.randn(10)) ax1.bar(left = x,height = y,zs = z,zdir = "z",color = color) """ left:表示条形图的横轴 height:表示条形图的纵轴 zdir:多组条形图的排列方向,即哪个轴 zs:多组条形图在排列方向上的位置 """ # 由此可知沿y轴排列会较为美观 ax2 = fig.add_subplot(2,1,2,projection = "3d") for color,z in zip(["r","g","b","k","y"],[0,10,20,30,40]): x = np.arange(10) y = np.abs(np.random.randn(10)) ax2.bar(left = x,height = y,zs = z,zdir = "y",color = color) """ left:表示条形图的横轴 height:表示条形图的纵轴 zdir:多组条形图的排列方向,即哪个轴 zs:多组条形图在排列方向上的位置 """ ax1.set_xlabel("x",size = 20) ax2.set_xlabel("x",size = 20) ax1.set_ylabel("y",size = 20) ax2.set_ylabel("y",size = 20) ax1.set_zlabel("z",size = 20) ax2.set_zlabel("z",size = 20) plt.show()
沿y轴排列图形:(更为美观)
by CyrusMay 2020 05 07
写在夏夜晚风里面
——————五月天(疯狂世界)——————
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算