日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

可视化篇(二)———使用matplotlib绘制常用3D图形及案例

發(fā)布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 可视化篇(二)———使用matplotlib绘制常用3D图形及案例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

可視化篇(二)———使用matplotlib繪制常用3D圖形及案例

  • 摘要
  • (一)添加matplotlib 3D模塊
  • (二)3d圖中繪制曲線
  • (三)3d圖中繪制散點圖
  • (四)3d圖中繪制線框圖
  • (五)3d圖中繪制曲面圖
  • (六)3d圖中繪制三角表面圖
  • (七)3d圖中繪制等高線
  • (八)3d圖中繪制條形圖

摘要

本文通過學(xué)習(xí)matplotlib繪制3d圖形的官方文檔,總結(jié)了常用的3d圖形,以及針對每類圖形,通過一個小案例進行可視化。
官方文檔

(一)添加matplotlib 3D模塊

從工具箱中導(dǎo)入繪制3D圖所需要的坐標軸模塊

from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt

繪制子圖添加坐標軸時先申明繪制的類型為:3D (使用projection = "3d"進行申明)

# 繪制子圖添加坐標軸時先申明繪制的類型為:3D (使用projection = "3d"進行申明) fig = plt.figure() ax = fig.add_subplot(1,1,1,projection = "3d")

(二)3d圖中繪制曲線

1、在3d坐標軸對象下使用plot方法
2、其余參數(shù)同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") # 其余參數(shù)同2d圖 ax1.legend() plt.show()

(三)3d圖中繪制散點圖

1、在3d坐標軸對象下使用scatter方法
2、zdir為指定z軸方向,其余參數(shù)同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軸方向,其余參數(shù)同2d繪圖 ax1.set_xlabel("x") ax1.set_xlabel("y") ax1.set_xlabel("z")

(四)3d圖中繪制線框圖

1、在3d坐標軸對象下使用plot_wireframe方法。
2、Axes3D寫作axes3d也可以
3、X和Y需要是二維數(shù)組
4、rcount:為沿行方向繪制網(wǎng)格的數(shù)目,
ccount:為沿列方向繪制網(wǎng)格的數(shù)目。

# ****************** 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) # XY需要是二維數(shù)組 Z = np.sin(np.sqrt(X**2+Y**2)) ax1.plot_wireframe(X,Y,Z,rcount = 15,ccount = 15) # rcount:為沿行方向繪制網(wǎng)格的數(shù)目,ccount:為沿列方向繪制網(wǎng)格的數(shù)目, plt.show()

(五)3d圖中繪制曲面圖

1、在3d坐標軸對象下使用plot_surface方法。
2、rcount:為沿行方向繪制網(wǎng)格的數(shù)目
ccount:為沿列方向繪制網(wǎng)格的數(shù)目
cmap:設(shè)定配色板(可直接調(diào)用matplotlib.cm中的配色板,如autumn,autumn_r,coolwarm等等)
color:設(shè)定顏色

# ****************** 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) # XY需要是二維數(shù)組 Z = np.sin(np.sqrt(X**2+Y**2))surf = ax1.plot_surface(X, Y, Z, cmap=cm.autumn) """ 其余參數(shù): rcount:為沿行方向繪制網(wǎng)格的數(shù)目 ccount:為沿列方向繪制網(wǎng)格的數(shù)目 cmap:設(shè)定配色板(可直接調(diào)用matplotlib.cm中的配色板,如autumn,autumn_r,coolwarm等等) color:設(shè)定顏色"""fig.colorbar(surf, shrink=0.5, aspect=5) plt.show()

(六)3d圖中繪制三角表面圖

1、 在3d坐標軸對象下使用plot_trisurf方法。
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) # 將二維數(shù)組準換為一維數(shù)組 x = x.flatten() y = y.flatten()# 通過莫比烏斯映射,把x,y轉(zhuǎn)化為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圖中繪制等高線

1、 在3d坐標軸對象下使用contour方法
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) # XY需要是二維數(shù)組 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()

contour方法圖形(等高線不填充):

contourf方法圖形(等高線填充):

(八)3d圖中繪制條形圖

1、 在3d坐標軸對象下使用bar方法
2、 left:表示條形圖的橫軸
height:表示條形圖的縱軸
zdir:多組條形圖的排列方向,即哪個軸
zs:多組條形圖在排列方向上的位置

# ****************** 3d圖中繪制條形圖 ****************** # 在3d坐標軸對象下使用bar方法 from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt import numpy as npfig = 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()

沿z軸排列圖形:

沿y軸排列圖形:(更為美觀)

by CyrusMay 2020 05 07

你是一種感覺
寫在夏夜晚風(fēng)里面
——————五月天(瘋狂世界)——————

總結(jié)

以上是生活随笔為你收集整理的可视化篇(二)———使用matplotlib绘制常用3D图形及案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。