中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何深入理解Matplotlib3D 繪圖函數plot_surface

發布時間:2021-12-08 17:54:15 來源:億速云 閱讀:247 作者:柒染 欄目:大數據

這篇文章給大家介紹如何深入理解Matplotlib3D 繪圖函數plot_surface,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

今晚開始接觸 Matplotlib 的 3D 繪圖函數 plot_surface,真的非常強大,圖片質量可以達到出版級別,而且 3D 圖像可以旋轉 ,可以從不同角度來看某個 3D 立體圖,但是我發現各大中文開源社區有關 3D 繪圖的代碼都是千篇一律的,現除了看源碼說明,我幾乎得不到半點有關 plot_surface 的重要參數說明,而且我感覺純英文的源碼說明晦澀難懂,而且沒有任何配圖,初學者看得是云里霧里,經過一晚上的調試,我才完全弄明白所有參數的含義,以及如何改變這些參數控制圖形的顯示,現將一點心得分享出來


Talk is cheap, show the code


# -*- coding: utf-8 -*-
# author:           inspurer(月小水長)
# pc_type           lenovo
# create_date:      2019/5/25
# file_name:        3DTest
# github            https://github.com/inspurer
# 微信公眾號         月小水長(ID: inspurer)

"""
繪制3d圖形
"""

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
# 定義figure
fig = plt.figure()
# 創建3d圖形的兩種方式
# 將figure變為3d
ax = Axes3D(fig)

#ax = fig.add_subplot(111, projection='3d')

# 定義x, y
x = np.arange(-4, 4, 0.25)
y = np.arange(-4, 4, 0.25)

# 生成網格數據
X, Y = np.meshgrid(x, y)

# 計算每個點對的長度
R = np.sqrt(X ** 2 + Y ** 2)
# 計算Z軸的高度
Z = np.sin(R)

# 繪制3D曲面


# rstride:行之間的跨度  cstride:列之間的跨度
# rcount:設置間隔個數,默認50個,ccount:列的間隔個數  不能與上面兩個參數同時出現


# cmap是顏色映射表
# from matplotlib import cm
# ax.plot_surface(X, Y, Z, rstride = 1, cstride = 1, cmap = cm.coolwarm)
# cmap = "rainbow" 亦可
# 我的理解的 改變cmap參數可以控制三維曲面的顏色組合, 一般我們見到的三維曲面就是 rainbow 的
# 你也可以修改 rainbow 為 coolwarm, 驗證我的結論
ax.plot_surface(X, Y, Z, rstride = 1, cstride = 1, cmap = plt.get_cmap('rainbow'))

# 繪制從3D曲面到底部的投影,zdir 可選 'z'|'x'|'y'| 分別表示投影到z,x,y平面
# zdir = 'z', offset = -2 表示投影到z = -2上
ax.contour(X, Y, Z, zdir = 'z', offset = -2, cmap = plt.get_cmap('rainbow'))

# 設置z軸的維度,x,y類似
ax.set_zlim(-2, 2)

plt.show()
 


運行結果如下:


如何深入理解Matplotlib3D 繪圖函數plot_surface

1

其中大部分的參數說明我已經在注釋了,應該很容易理解,其中的 rstride (row stride)和 cstride (column stride) (stride是步長的意思,row : 行,column : 列)參數也有了初步的介紹,下面重點討論如何理解他們。


初探

旋轉 3D 圖形


 

如何深入理解Matplotlib3D 繪圖函數plot_surface


 
2

我發現無論是 x 向,還是 y 向,條紋數都是 32
而這剛好是我們 x = np.arange(-4, 4, 0.25)中[4-(-4)]/0.25 = 32
ax.plot_surface(X, Y, Z, rstride = 1, cstride = 1, cmap = plt.get_cmap('rainbow'))中 rstride = 1, cstride = 1,r(row)對應 x向,c(column)對應 y 向,rstride = 1 說明在 x 向的條紋間隔為 1 個 x 向單位長度(也就是 0.25),cstride = 1 說明在y向的條紋間隔為 1 個 x 向單位長度(也是 0.25)。而把rstride = 1, cstride = 1去掉之后,我發現圖形不變,說明 1 個距離是默認值。而且這兩個參數只能是正整數,最小正整數就是 1(默認值),所以為了圖形的平滑,基本上我們不需要修改這個參數。


驗證


 

修改參數,使 rstride = 4

其結果如下:


如何深入理解Matplotlib3D 繪圖函數plot_surface

3

32 / 4 = 8,x向的條紋數變成了 8 ,這符合我們的預期,看來我們得推測是正確的。

 

修改參數,同時使 rstride 和 cstride  = 4

其結果如下:


如何深入理解Matplotlib3D 繪圖函數plot_surface

4

可以看到無論是 x 向,還是 y 向,條紋數都變成了 8 ,同時由于間距變大,圖形也比原來更粗糙了。

這再一次驗證了我們的推測是正確的!

關于如何深入理解Matplotlib3D 繪圖函數plot_surface就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泰宁县| 中牟县| 高淳县| 射洪县| 南涧| 姜堰市| 甘德县| 招远市| 沁源县| 沙洋县| 环江| 古田县| 永德县| 达尔| 鄂伦春自治旗| 宜宾市| 榆林市| 玉门市| 兴化市| 长岭县| 长宁县| 双牌县| 金门县| 柘城县| 汶川县| 铜川市| 涞源县| 木里| 绿春县| 哈巴河县| 永靖县| 福清市| 鲜城| 隆安县| 宣城市| 丰宁| 万宁市| 东光县| 防城港市| 天镇县| 县级市|