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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Matplotlib三维绘图,这一篇就够了

發布時間:2023/11/27 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matplotlib三维绘图,这一篇就够了 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Matplotlib三維繪圖,這一篇就夠了

    • 1. 效果圖
      • 1.1 3D線效果圖
      • 1.2 3D散點效果圖
      • 1.3 3D隨機顏色散點效果圖
      • 1.4 3D散點不同mark點效果圖
      • 1.5 3D線框效果圖
      • 1.6 3D曲面不透明效果圖
      • 1.7 3D曲面透明效果圖
    • 2. 源碼
    • 參考

這篇博客將介紹使用 mplot3d 工具包進行三維繪圖,支持簡單的 3D 圖形,包括曲面、線框、散點圖和條形圖。

1. 效果圖

1.1 3D線效果圖

3D線圖效果如下:
可自定義線的顏色及點的樣式;

1.2 3D散點效果圖

3D散點圖(標記了著色以呈現深度外觀)效果如下:

1.3 3D隨機顏色散點效果圖

3D隨機顏色散點圖效果如下:

1.4 3D散點不同mark點效果圖

3D官方散點圖不同mark點效果如下:

1.5 3D線框效果圖

3D線框圖效果如下:

1.6 3D曲面不透明效果圖

3D曲面圖不透明如下:

1.7 3D曲面透明效果圖

3D曲面圖透明如下:

2. 源碼

# matplotlib 3D繪圖# 3D 軸(屬于 Axes3D 類)是通過將 projection="3d" 關鍵字參數傳遞給 Figure.add_subplot 來創建的:
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as npx = np.arange(100)
y = np.random.randint(0, 300, 100)
z = np.random.randint(0, 200, 100)# 3D線圖
def line_3d():# 線fig = plt.figure()ax = fig.add_subplot(projection='3d')# c顏色,marker:樣式*雪花ax.plot(xs=x, ys=y, zs=z, c="y", marker="*")plt.show()# 3D散點圖
def scatter_3d():# 散點圖fig = plt.figure()ax = fig.add_subplot(projection='3d')# s:marker標記的大小# c: 顏色  可為單個,可為序列# depthshade: 是否為散點標記著色以呈現深度外觀。對 scatter() 的每次調用都將獨立執行其深度著色。# marker:樣式ax.scatter(xs=x, ys=y, zs=0, zdir='z', s=30, c="g", depthshade=True, cmap="jet", marker="^")plt.show()def randrange(n, vmin, vmax):"""Helper function to make an array of random numbers having shape (n, )with each number distributed Uniform(vmin, vmax)."""return (vmax - vmin) * np.random.rand(n) + vmin# 3D隨機顏色散點圖
def scatter_random_color_3d():# 隨機顏色散點圖fig = plt.figure()ax = fig.add_subplot(projection='3d')# c: 顏色 可為單個,可為序列# ‘b’ blue 藍色、g’ green 綠色、‘r’ red 紅色、‘c’ cyan 蘭青色# ‘m’ magenta 紫色、‘y’ yellow 黃色、‘k’ black 黑色、‘w’white 白色colors = ['b', 'g', 'r', 'c', 'm', 'y', 'k', 'w']c = np.repeat(colors, 15)[:100]ax.scatter(xs=x, ys=y, zs=0, zdir='z', s=30, c=c, depthshade=True, cmap="jet", marker="^")plt.show()# demo示例# 設置種子以便重現隨機值np.random.seed(19680801)fig = plt.figure()ax = fig.add_subplot(projection='3d')n = 100# 每一個樣式,繪制n個隨機點# 定義 x in [23, 32], y in [0, 100], z in [zlow, zhigh].for m, zlow, zhigh in [('o', -50, -25), ('^', -30, -5)]:xs = randrange(n, 23, 32)ys = randrange(n, 0, 100)zs = randrange(n, zlow, zhigh)ax.scatter(xs, ys, zs, marker=m)ax.set_xlabel('X Label')ax.set_ylabel('Y Label')ax.set_zlabel('Z Label')plt.show()# 線框圖
def wireframe_3d():fig = plt.figure()ax = fig.add_subplot(projection='3d')x = np.random.randint(-30, high=30, size=(50,)).reshape((25, 2))y = np.random.randint(-30, high=30, size=(50,)).reshape((25, 2))z = np.zeros(50).reshape((25, 2))# c: 顏色# ‘b’ blue 藍色、g’ green 綠色、‘r’ red 紅色、‘c’ cyan 蘭青色# ‘m’ magenta 紫色、‘y’ yellow 黃色、‘k’ black 黑色、‘w’white 白色ax.plot_wireframe(x, y, z, color='m')plt.show()# demo示例fig = plt.figure()ax = fig.add_subplot(projection='3d')# 獲取測試數據X, Y, Z = axes3d.get_test_data(0.05)# 繪制基本的線框圖ax.plot_wireframe(X, Y, Z, color='c', rstride=10, cstride=10)plt.show()# 曲面圖,默認情況下,它將以純色的陰影著色,但它也通過提供 cmap 參數支持顏色映射。
# rcount 和 ccount kwargs 都默認為 50,決定了每個方向使用的最大樣本數。如果輸入數據較大,則會將其下采樣(通過切片)到這些點數。
# 為了最大限度地提高渲染速度,將 rstride 和 cstride 分別設置為行數減 1 和列數減 1 的除數。例如,給定 51 行,rstride 可以是 50 的任何除數。
# 同樣,設置 rstride 和 cstride 等于 1(或 rcount 和 ccount 等于行數和列數)可以使用優化路徑。
def surface_3d():# 3D 表面(顏色圖)演示繪制使用冷暖色圖著色的 3D 表面。通過使用 antialiased=False 使表面變得不透明。import matplotlib.pyplot as pltfrom matplotlib import cmfrom matplotlib.ticker import LinearLocatorimport numpy as npfig, ax = plt.subplots(subplot_kw={"projection": "3d"})# 構建數據X = np.arange(-5, 5, 0.25)Y = np.arange(-5, 5, 0.25)X, Y = np.meshgrid(X, Y)R = np.sqrt(X ** 2 + Y ** 2)Z = np.sin(R)# 繪制曲面圖# 繪制使用冷暖色圖著色的 3D 表面。通過使用 antialiased=False 使表面變得不透明。surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,linewidth=0, antialiased=False)# 定制z軸ax.set_zlim(-1.01, 1.01)ax.zaxis.set_major_locator(LinearLocator(10))# A StrMethodFormatter is used automaticallyax.zaxis.set_major_formatter('{x:.02f}')# 添加一個顏色條形圖展示顏色區間fig.colorbar(surf, shrink=0.5, aspect=5)plt.show()# 繪制曲面圖# 繪制使用冷暖色圖著色的 3D 表面。通過使用 antialiased=True 使表面變得透明。fig, ax = plt.subplots(subplot_kw={"projection": "3d"})surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,linewidth=0, antialiased=True)# 定制z軸ax.set_zlim(-1.01, 1.01)ax.zaxis.set_major_locator(LinearLocator(10))# A StrMethodFormatter is used automaticallyax.zaxis.set_major_formatter('{x:.02f}')# 添加一個顏色條形圖展示顏色區間fig.colorbar(surf, shrink=0.5, aspect=5)plt.show()# 三角曲面圖
def tri_surface_3d():n_radii = 8n_angles = 36# 將半徑和角度設為等差數組(省略半徑r=0以消除重復)# start,stop,n,endpoint 默認endpoint為True,包含stop,為False不包含stopradii = np.linspace(0.125, 1.0, n_radii)angles = np.linspace(0, 2 * np.pi, n_angles, endpoint=False)[..., np.newaxis]# 將polar極坐標(半徑、角度)轉換為cartesian笛卡爾坐標(x、y)# (0,0)在此階段手動添加,因此(x,y)平面中的點不會重復x = np.append(0, (radii * np.cos(angles)).flatten())y = np.append(0, (radii * np.sin(angles)).flatten())# 計算z以生成pringle surface普林格爾曲面z = np.sin(-x * y)ax = plt.figure().add_subplot(projection='3d')ax.plot_trisurf(x, y, z, linewidth=0.2, antialiased=True)plt.show()# 3D線圖
line_3d()# 3D散點圖
scatter_3d()# 3D隨機顏色散點圖
scatter_random_color_3d()# 線框圖
wireframe_3d()# 曲面圖,默認情況下,它將以純色的陰影著色,但它也通過提供 cmap 參數支持顏色映射。
surface_3d()# 三角曲面圖
tri_surface_3d()

參考

  • https://matplotlib.org/stable/tutorials/toolkits/mplot3d.html#toolkit-mplot3d-tutorial

總結

以上是生活随笔為你收集整理的Matplotlib三维绘图,这一篇就够了的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。