中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
實(shí)戰(zhàn)!Python 30 行代碼畫各種 3D 圖形

來源:Python 技術(shù)「ID: pythonall」

之前的文章有講解過 Matplotlib 的用法,可能有的小伙伴們已經(jīng)略有忘記,如果有不熟悉的讀者朋友們請回顧Matplotlib學(xué)習(xí)進(jìn)階 ,今天文章教大家如何用不到 30 行代碼繪制 Matplotlib 3D 圖形,Matplotlib 繪制的都是平面 3D 圖形,接下來上才藝!

回顧 2D 作圖

用賽貝爾曲線作 2d 圖。此圖是用基于 Matplotlib 的 Path 通過賽貝爾曲線實(shí)現(xiàn)的,有對賽貝爾曲線感興趣的朋友們可以去學(xué)習(xí)學(xué)習(xí),在 matplotlib 中,figure 為畫布,axes 為繪圖區(qū),fig.add_subplot()、plt.subplot() 方法均可以創(chuàng)建子圖。以下是作圖實(shí)踐。

import matplotlib.path as mpath
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
#定義繪圖指令與控制點(diǎn)坐標(biāo)
Path = mpath.Path
# Path 控制坐標(biāo)點(diǎn)繪制貝塞爾曲線
# 圖形數(shù)據(jù)構(gòu)造

# MOVETO表示將繪制起點(diǎn)移動到指定坐標(biāo)
# CURVE4表示使用4個控制點(diǎn)繪制3次貝塞爾曲線
# CURVE3表示使用3個控制點(diǎn)繪制2次貝塞爾曲線
# LINETO表示從當(dāng)前位置繪制直線到指定位置
# CLOSEPOLY表示從當(dāng)前位置繪制直線到指定位置,并閉合多邊形
path_data = [
    (Path.MOVETO, (1.88-2.57)),
    (Path.CURVE4, (0.35-1.1)),
    (Path.CURVE4, (-1.751.5)),
    (Path.CURVE4, (0.3752.0)),
    (Path.LINETO, (0.851.15)),
    (Path.CURVE4, (2.23.2)),
    (Path.CURVE4, (30.05)),
    (Path.CURVE4, (2.0-1.5)),
    (Path.CLOSEPOLY, (1.58-2.57)),
    ]
codes,verts = zip(*path_data)
path = mpath.Path(verts, codes)
patch = mpatches.PathPatch(path, facecolor='r', alpha=0.5)
ax.add_patch(patch)
# plot control points and connecting lines
x, y = zip(*path.vertices)
line, = ax.plot(x, y, 'go-')
ax.grid()
ax.axis('equal')
plt.show()
心型效果圖

3D 帽子圖1

Matplotlib 繪制 3D 圖形使用 mplot3d Toolkit 即 mplot3d 工具包,在 matplotlib 中使用 mplot3d 工具包。繪制 3D 圖可以通過創(chuàng)建子圖,然后指定 projection 參數(shù) 為 3d 即可,返回的 ax 為 Axes3D 對象。mplot3d 官方學(xué)習(xí)文檔

導(dǎo)入包:

from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
from mpl_toolkits.mplot3d import Axes3D

繪圖全過程:

import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

fig = plt.figure()

# 指定圖形類型是 3d 類型
ax = fig.add_subplot(projection='3d')

# 構(gòu)造數(shù)據(jù)
X = np.arange(-550.25)
Y = np.arange(-550.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

# Plot the surface.
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)
# Customize the z axis.
ax.set_zlim(-1.011.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
# Add a color bar which maps values to colors.
fig.colorbar(surf, shrink=0.5, aspect=5)

plt.show()

呈現(xiàn)效果:

帽子圖1

3D 帽子圖2

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

fig = plt.figure()
# 指定圖形類型為 3d 類型
ax = fig.add_subplot(111, projection='3d')
# X, Y value
X = np.arange(-550.25)
Y = np.arange(-550.25)

# 設(shè)置 x-y 平面的網(wǎng)格
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X ** 2 + Y ** 2)
# height value
Z = np.sin(R)

# rstride:行之間的跨度  cstride:列之間的跨度
# rcount:設(shè)置間隔個數(shù),默認(rèn)50個,ccount:列的間隔個數(shù)  不能與上面兩個參數(shù)同時出現(xiàn)
#vmax和vmin  顏色的最大值和最小值
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'))

# zdir : 'z' | 'x' | 'y' 表示把等高線圖投射到哪個面
# offset : 表示等高線圖投射到指定頁面的某個刻度
ax.contourf(X,Y,Z,zdir='z',offset=-2)

# 設(shè)置圖像z軸的顯示范圍,x、y軸設(shè)置方式相同
ax.set_zlim(-2,2)

plt.show()
帽子圖2

3D 線性圖

3D 線性圖使用 Axes3D.plot來繪制 繪畫的基本方法:Axes3D.plot(xs, ys[, zs, zdir='z', *args, **kwargs])

參數(shù)說明:

參數(shù)描述
xs一維數(shù)組,點(diǎn)的 x 軸坐標(biāo)
ys一維數(shù)組,點(diǎn)的 y 軸坐標(biāo)
zs一維數(shù)組,可選項(xiàng),點(diǎn)的 z 軸坐標(biāo)
zdir可選項(xiàng),在 3D 軸上繪制 2D 數(shù)據(jù)時,數(shù)據(jù)必須以 xs,ys 的形式傳遞,若此時將 zdir 設(shè)置為 'y’,數(shù)據(jù)將會被繪制到 x-z 軸平面上,默認(rèn)為 'z’
**kwargs其他關(guān)鍵字參數(shù),可選項(xiàng),可參見 matplotlib.axes.Axes.plot
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 依次獲取畫布和繪圖區(qū)并創(chuàng)建 Axes3D 對象
fig = plt.figure()
ax = fig.gca(projection='3d')

# 第一條3D線性圖數(shù)據(jù)
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z1 = np.linspace(-22100)
r = z1**2 + 1
x1 = r * np.sin(theta)
y1 = r * np.cos(theta)

# 第二條3D線性圖數(shù)據(jù)
z2 = np.linspace(-33100)
x2 = np.sin(z2)
y2 = np.cos(z2)

# 繪制3D線性圖
ax.plot(x1, y1, z1, color='b', label='3D Line1')
ax.plot(x2, y2, z2, color='r', label='3D Line2')

# 設(shè)置標(biāo)題、軸標(biāo)簽、圖例,也可以直接使用 plt.title、plt.xlabel、plt.legend...
ax.set_title('3D Line View', pad=15, fontsize='10')
ax.set_xlabel('x ', color='r', fontsize='14')
ax.set_ylabel('y ', color='g', fontsize='14')
ax.set_zlabel('z ', color='b', fontsize='14')
ax.legend()
plt.show()

結(jié)果顯示:

線性圖

3D 散點(diǎn)圖

繪制 3D 散點(diǎn)圖的基本方法是:Axes3D.scatter(xs, ys[, zs=0, zdir='z', s=20, c=None, depthshade=True, *args, **kwargs])

參數(shù)詳解:

參數(shù)描述
xs一維數(shù)組,點(diǎn)的 x 軸坐標(biāo)
ys一維數(shù)組,點(diǎn)的 y 軸坐標(biāo)
zs一維數(shù)組,可選項(xiàng),點(diǎn)的 z 軸坐標(biāo)
zdir可選項(xiàng),在 3D 軸上繪制 2D 數(shù)據(jù)時,數(shù)據(jù)必須以 xs,ys 的形式傳遞,若此時將 zdir 設(shè)置為 'y’,數(shù)據(jù)將會被繪制到 x-z 軸平面上,默認(rèn)為 'z’
s標(biāo)量或數(shù)組類型,可選項(xiàng),標(biāo)記的大小,默認(rèn) 20
c標(biāo)記的顏色,可選項(xiàng),可以是單個顏色或者一個顏色列表支持英文顏色名稱及其簡寫、十六進(jìn)制顏色碼等,更多顏色示例參見官網(wǎng) Color Demo
depthshadebool 值,可選項(xiàng),默認(rèn) True,是否為散點(diǎn)標(biāo)記著色以提供深度外觀
**kwargs其他關(guān)鍵字
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

def randrange(n, vmin, vmax):

    return (vmax - vmin) * np.random.rand(n) + vmin

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

n = 100

# For each set of style and range settings, plot n random points in the box
# defined by x in [23, 32], y in [0, 100], z in [zlow, zhigh].
for c, m, zlow, zhigh in [('r''o'-50-25), ('b''^'-30-5)]:
    xs = randrange(n, 2332)
    ys = randrange(n, 0100)
    zs = randrange(n, zlow, zhigh)
    ax.scatter(xs, ys, zs, c=c, marker=m)

ax.set_title('3D Diagram View', pad=15, fontsize='10')
ax.set_xlabel('x ', color='r', fontsize='14')
ax.set_ylabel('y ', color='g', fontsize='14')
ax.set_zlabel('z ', color='b', fontsize='14')

plt.show()

結(jié)果顯示為:

散點(diǎn)圖

總結(jié)

本文主要是講述使用 Python 第三方庫 Matplotlib 來繪畫 3D 圖形,當(dāng)然除了小編繪畫的這些還有更多好看的圖形,一個好的圖形能給我們帶來不一樣的視覺享受,同時也可以幫助我們學(xué)到很多知識,做出很多有成就感的東西,但最關(guān)鍵的是思維,技術(shù)始終是實(shí)現(xiàn)一個產(chǎn)品或者目標(biāo)的工具,我想這就是 Python 最具魔力的地方吧!大伙都實(shí)踐起來呀~

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
python數(shù)據(jù)分析工具之 matplotlib詳解
一本書掌握Python強(qiáng)大的繪圖庫Matplotlib
使用matplotlib繪制3D圖表
三維散點(diǎn)圖
Python圖表繪制:matplotlib繪圖庫入門
生命科學(xué)中的 UMAP(降維算法)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服