好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > python如何用matplotlib創建三維圖表

python如何用matplotlib創建三維圖表

熱門標簽:地圖標注可以遠程操作嗎 智能電話機器人調研 江門智能電話機器人 杭州房產地圖標注 滴滴地圖標注公司 400電話在線如何申請 天津塘沽區地圖標注 如何申請400電話代理 甘肅高頻外呼系統

Matplotlib 最開始被設計為僅支持二維的圖表。到 1.0 版本發布左右,一些三維圖表的工具在二維展示的基礎上被創建了出來,結果就是 Matplotlib 提供了一個方便的(同時也是有限的)的可用于三維數據可視化的一套工具。三維圖表可以使用載入mplot3d工具包來激活,這個包會隨著 Matplotlib 自動安裝:

from mpl_toolkits import mplot3d

一旦模塊被導入,三維 axes 就可以像其他普通 axes 一樣通過關鍵字參數projection='3d'來創建:

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
plt.show()

三維 axes 激活后,我們可以在上面繪制不同的三維圖表類型。三維圖表在 notebook 中使用交互式圖表展示會優于使用靜態展示;回憶我們前面介紹過,你可以使用%matplotlib notebook而不是%matplotlib inline來激活交互式展示模式。

三維的點和線

三維圖表中最基礎的是使用(x, y, z)坐標定義的一根線或散點的集合。前面介紹過普通的二維圖表,作為類比,使用ax.plot3D和ax.scatter3D函數可以創建三維折線和散點圖。這兩個函數的簽名與二維的版本基本一致,你可以參考[簡單折線圖]和[簡單散點圖]來復習一下這部分的內容。下面我們繪制一個三維中的三角螺旋,在線的附近在繪制一些隨機的點:

ax = plt.axes(projection='3d')

# 三維螺旋線的數據
zline = np.linspace(0, 15, 1000)
xline = np.sin(zline)
yline = np.cos(zline)
ax.plot3D(xline, yline, zline, 'gray')

# 三維散點的數據
zdata = 15 * np.random.random(100)
xdata = np.sin(zdata) + 0.1 * np.random.randn(100)
ydata = np.cos(zdata) + 0.1 * np.random.randn(100)
ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap='Greens');

注意默認情況下,圖中的散點會有透明度的區別,用于體現在圖中散點的深度。雖然三維效果在靜態圖像中難以顯示,你可以使用交互式的視圖來獲得更佳的三維直觀效果。

三維輪廓圖

類似于我們在[密度和輪廓圖]中介紹的內容,mplot3d也包含著能夠創建三維浮雕圖像的工具。就像二維的ax.contour圖表,ax.contour3D要求輸入數據的格式是二維普通網格上計算得到的 Z 軸的數據值。下面我們展示一個三維的正弦函數輪廓圖:

def f(x, y):
  return np.sin(np.sqrt(x ** 2 + y ** 2))

x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)

X, Y = np.meshgrid(x, y)
Z = f(X, Y)
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contour3D(X, Y, Z, 50, cmap='binary')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z');

有時候默認的視角角度不是最理想的,在這種情況下我們可以使用view_init函數來設置水平角和方位角。在下面的例子中,我們使用的是 60° 的水平角(即以 60° 俯視 x-y 平面)和 35° 的方位角(即將 z 軸逆時針旋轉 35°):

ax.view_init(60, 35)
fig

同樣,注意到當使用 Matplotlib 交互式展示是,這樣的旋轉可以通過鼠標點擊和拖拽來實現。

框線圖和表面圖

使用網格數據生成的三維圖表還有框線圖和表面圖。這兩種圖表將網格數據投射到特定的三維表面,能夠使得結果圖像非常直觀和具有說服力。下面是一個框線圖的例子:

fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_wireframe(X, Y, Z, color='black')
ax.set_title('wireframe');

表面圖類似框線圖,區別在于每個框線構成的多邊形都使用顏色進行了填充。添加色圖用于填充多邊形能夠讓圖形表面展示出來:

ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
        cmap='viridis', edgecolor='none')
ax.set_title('surface');

注意雖然每個顏色填充的表面都是二維的,但是表面的邊緣不需要是直線構成的。下面的例子使用surface3D繪制了一個部分極坐標網格,能夠讓我們切入到函數內部觀察效果:

r = np.linspace(0, 6, 20)
theta = np.linspace(-0.9 * np.pi, 0.8 * np.pi, 40)
r, theta = np.meshgrid(r, theta)

X = r * np.sin(theta)
Y = r * np.cos(theta)
Z = f(X, Y)

ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
        cmap='viridis', edgecolor='none');

表面三角剖分

在一些應用場合中,上面的這種均勻網格繪制的圖表方式太過于局限和不方便。在這些情況下,三角剖分的圖表可以派上用場。如果我們并不是使用笛卡爾坐標系或極坐標系的網格來繪制三維圖表,而是使用一組隨機的點來繪制三維圖表呢?

theta = 2 * np.pi * np.random.random(1000)
r = 6 * np.random.random(1000)
x = np.ravel(r * np.sin(theta))
y = np.ravel(r * np.cos(theta))
z = f(x, y)
ax = plt.axes(projection='3d')
ax.scatter(x, y, z, c=z, cmap='viridis', linewidth=0.5);

上圖并未形象的表示出表面情況。這種情況下我們可以使用ax.plot_trisurf函數,它能首先根據我們的數據輸入找到各點內在的三角函數形式,然后繪制表面(注意的是這里的 x,y,z 是一維的數組):

ax = plt.axes(projection='3d')
ax.plot_trisurf(x, y, z,
        cmap='viridis', edgecolor='none');

上圖的結果很顯然沒有使用網格繪制表面圖那么清晰,但是對于我們并不是使用函數構建數據樣本(數據樣本通常來自真實世界的采樣)的情況下,這能提供很大的幫助。例如我們下面會看到,能使用這種方法繪制一條三維的莫比烏斯環。

例子:繪制莫比烏斯環

theta = np.linspace(0, 2 * np.pi, 30)
w = np.linspace(-0.25, 0.25, 8)
w, theta = np.meshgrid(w, theta)

phi = 0.5 * theta

現在我們已經有了所有需要獲得三維坐標值的參數了。我們定義  為每個坐標點距離環形中間的位置,使用它來計算最終(x,y,z)  三維坐標系的坐標值:

# r是坐標點距離環形中心的距離值
r = 1 + w * np.cos(phi)
# 利用簡單的三角函數知識算得x,y,z坐標值
x = np.ravel(r * np.cos(theta))
y = np.ravel(r * np.sin(theta))
z = np.ravel(w * np.sin(phi))

最后,為了繪制對象,我們必須保證三角剖分是正確的。實現這個最好的方法是在底層的參數上面實現三角剖分,最后讓 Matplotlib 將這個三角剖分投射到三維空間中形成莫比烏斯環。下面的代碼最終繪制圖形:

# 在底層參數的基礎上進行三角剖分
from matplotlib.tri import Triangulation
tri = Triangulation(np.ravel(w), np.ravel(theta))

ax = plt.axes(projection='3d')
ax.plot_trisurf(x, y, z, triangles=tri.triangles,
        cmap='viridis', linewidths=0.2);

ax.set_xlim(-1, 1); ax.set_ylim(-1, 1); ax.set_zlim(-1, 1);

 結合這些技巧,能夠為你提供在 Matplotlib 創建和展現大量三維對象和模式的能力。

以上就是python如何用matplotlib創建三維圖表的詳細內容,更多關于python用matplotlib創建三維圖表的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 用pip給python安裝matplotlib庫的詳細教程
  • python 利用matplotlib在3D空間中繪制平面的案例
  • python 利用matplotlib在3D空間繪制二次拋物面的案例
  • python可視化分析的實現(matplotlib、seaborn、ggplot2)
  • python Matplotlib基礎--如何添加文本和標注
  • python使用matplotlib的savefig保存時圖片保存不完整的問題
  • 如何利用Python matplotlib繪制雷達圖
  • Python3 用matplotlib繪制sigmoid函數的案例
  • python可視化 matplotlib畫圖使用colorbar工具自定義顏色
  • python 用Matplotlib作圖中有多個Y軸
  • python 繪圖模塊matplotlib的使用簡介

標簽:長春 漢中 河池 廊坊 臨汾 重慶 東莞 德宏

巨人網絡通訊聲明:本文標題《python如何用matplotlib創建三維圖表》,本文關鍵詞  python,如,何用,matplotlib,創建,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python如何用matplotlib創建三維圖表》相關的同類信息!
  • 本頁收集關于python如何用matplotlib創建三維圖表的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 小sao货水好多真紧h无玛视频| 毛片**| 3D动漫精品啪啪一区二区竹菊 | 强迫粗暴受辱美人np| 樱桃视频?成人app?i| jj视频污| 男人天堂伊人| 校草互攻互受| 国产产一区二区三区久久毛片国语| 日本撒尿高清偷拍| 色阁五月| 久久91视频| 玉女心经免费看| 北岛玲在线精品一区二区三区| 一级全黄裸体免费观看视频| 欧美成人综合网播九公社| 昂昂昂昂昂昂昂用力| 久久只精品| 国产a级大片| 最猛烈婬乱少妇小说系列红楼梦 | 爱网站| 双男主日漫| 国产熟妇婬乱A片免费看牛牛| 天天摸天天操免费播放小视频| 高跟美妇跪撅丰厚肥臀小说| 嗯啊~乱女小芳好深啊视频 | 国产日韩网站| 公么吃奶摸下面好舒服| 紧张又刺激的国产片| 久久99久久99精品免观看粉嫩| chinese 男男gay viodes| 毛片视频永久免费播放| 私人影院里面可以啪吗| 不要了还夹这么紧| 播放毛片| 全彩爆乳无翼口工漫画大全| 《偷妻》未删减版无码 | 第一次处破女免费观看| 久久久久无码专区亚洲?V| 日本无码av一区二区三色翼会| 授乳Breast Milk|