python35種繪圖函數(shù)詳細總結
基礎圖
下面這8種圖像一般只有兩組坐標,直觀容易理解。
| 函數(shù) | 坐標參數(shù) | 圖形類別 | |
|---|---|---|---|
| plot | x,y | 曲線圖 | |
| stackplot | x,y | 散點圖 | |
| stem | x,y | 莖葉圖 | |
| scatter | x,y | 散點圖 | |
| polar | x,y | 極坐標圖 | |
| step | x,y | 步階圖 | |
| bar | x,y | 條形圖 | |
| barh | x,y | 橫向條形圖 |
其中,除了極坐標需要添加一個極坐標映射之外,其他函數(shù)均在直角坐標系中繪制,效果如下

繪圖代碼如下
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(25)/3
y = np.sin(x)
fDct = {"plot" : plt.plot, "stackplot": plt.stackplot,
"stem" : plt.stem, "scatter" : plt.scatter,
"polar": plt.polar, "step" : plt.step,
"bar" : plt.bar, "barh" : plt.barh, }
fig = plt.figure(figsize=(14,6))
for i,key in enumerate(fDct, 1):
p = "polar" if key=="polar" else None
ax = fig.add_subplot(2,4,i, projection=p)
fDct[key](x, y)
plt.title(key)
plt.tight_layout()
plt.show()誤差線
實際繪圖時,誤差線這種需求十分常見,尤其是在做擬合的時候,除了要畫出趨勢線之外,還可能要畫出其抖動的范圍,下面三種函數(shù)主要實現(xiàn)這個功能。
| 函數(shù) | 坐標 | 圖形類別 |
|---|---|---|
| errorbar | x,y,xerr,yerr | 誤差線 |
| fill_between | x,y1,y2 | 縱向區(qū)間圖 |
| fill_betweenx | y, x1, x2 | 橫向區(qū)間圖 |
圖像效果為

繪圖代碼如下,errorbar函數(shù)的誤差方向,與輸入的參數(shù)有關。
x = np.arange(25)/3
y = np.sin(x)
y1, y2 = 0.9*y, 1.1*y
x1, x2 = 0.9*x, 1.1*x
xerr = np.abs([x1, x2])/10
yerr = np.abs([y1, y2])/10
fig = plt.figure(figsize=(12,6))
ax = fig.add_subplot(221)
ax.errorbar(x, y, yerr=yerr)
plt.title("errorbar with yerr")
ax = fig.add_subplot(222)
ax.errorbar(x, y, xerr=xerr)
plt.title("errorbar with xerr")
ax = fig.add_subplot(223)
ax.fill_between(x, y1, y2)
plt.title("fill_between")
ax = fig.add_subplot(224)
ax.fill_betweenx(y, x1, x2)
plt.title("fill_betweenx")
plt.tight_layout()
plt.show()三維圖
| 繪圖函數(shù) | 坐標 | 繪圖類型 | 坐標說明 |
|---|---|---|---|
| plot | x,y,z | 三維曲線圖 | |
| scatter | x,y,z | 三維散點圖 | |
| plot_surface | x,y,z | 三維曲面圖 | x,y必須是網(wǎng)格 |
| plot_wireframe | x,y,z | 三維網(wǎng)格圖 | x,y必須是網(wǎng)格 |
| plot_trisurf | x,y,z | 三角曲面圖 | x,y,z是一維數(shù)組 |
plot和scatter雖然是二維繪圖函數(shù),但如果新增一個三維坐標,就可以搖身一變,成為三維曲線圖或者三維散點圖

繪圖代碼如下
x = np.arange(100)/10
y,z = np.sin(x), np.cos(x)
fig = plt.figure(figsize=(8,4))
ax = fig.add_subplot(121, projection='3d')
ax.plot(x,y,z)
plt.title("plot")
ax = fig.add_subplot(122, projection='3d')
ax.scatter(x,y,z)
plt.title("scatter")
plt.tight_layout()
plt.show()真正專業(yè)的三維圖是plot_surface, plot_wireframe和plot_trisurf

如果仔細看就會發(fā)現(xiàn)plot_trisurf的紋理和前兩者不同,相比之下,前兩者必須要求輸入規(guī)整的數(shù)據(jù)。繪圖代碼如下
X, Y = np.indices([30, 30])/3 - 5
Z = np.sin(np.sqrt(X**2 + Y**2))
fig = plt.figure(figsize=(12,5))
ax = fig.add_subplot(131, projection='3d')
ax.plot_surface(X, Y, Z)
plt.title("plot_surface")
ax = fig.add_subplot(132, projection='3d')
ax.plot_wireframe(X, Y, Z)
plt.title("plot_wireframe")
ax = fig.add_subplot(133, projection='3d')
ax.plot_trisurf(X.reshape(-1), Y.reshape(-1), Z.reshape(-1))
plt.title("plot_trisurf")
plt.tight_layout()
plt.show()等高線圖
| 繪圖函數(shù) | 坐標 | 說明 |
|---|---|---|
| contour | [x,y,]z | 等高線 |
| contourf | [x,y,]z | 填充等高線 |
| pcolormesh | [x,y,]z | 偽彩圖 |
| imshow | z | 圖像 |
其中,imshow就是正常的圖片展示函數(shù),這幾個函數(shù)可以只指定z軸然后繪圖
X, Y = np.indices([100,100])/30 - 1.5
Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)
fDct = {"contour": plt.contour, "contourf":plt.contourf,
"pcolormesh" : plt.pcolormesh, "imshow":plt.imshow}
fig = plt.figure(figsize=(9,6))
for i,key in enumerate(fDct, 1):
ax = fig.add_subplot(2,2,i)
fDct[key](Z)
plt.title(key)
plt.tight_layout()
plt.show()繪圖結果如下

可以看到,imshow和另外三種函數(shù)的區(qū)別是,其橫坐標和縱坐標之間的比例始終是1:1,并不隨著圖像的拉伸而放大或者縮小。
除了imshow之外,另外三種函數(shù)還支持輸入x,y,z三個坐標軸的數(shù)據(jù)來繪圖,效果如下

繪圖代碼如下
X, Y = np.indices([100,100])/30 - 1.5
Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)
fDct = {"contour": plt.contour, "contourf":plt.contourf,
"pcolormesh" : plt.pcolormesh}
fig = plt.figure(figsize=(9,3))
for i,key in enumerate(fDct, 1):
ax = fig.add_subplot(1,3,i)
fDct[key](X,Y,Z)
plt.title(key)
plt.tight_layout()
plt.show()場圖
| 繪圖函數(shù) | 坐標 | 說明 |
|---|---|---|
| quiver | x,y,u,v | 向量場圖 |
| streamplot | x,y,u,v | 流場圖 |
| barbs | x,y,u,v | 風場圖 |
quiver以單點為單位,繪制出某點處向量的方向;streamplot則在此之上,將每個點銜接到一起,顯得更加有流動性;barbs則是以風向標志取代了向量,這個圖過于專業(yè),我應該沒啥機會用到。
Y, X = np.indices([6,6])/0.75 - 4
U = X + Y
V = Y - X
dct = {"quiver":plt.quiver, "streamplot":plt.streamplot,
"barbs" :plt.barbs}
fig = plt.figure(figsize=(12,4))
for i,key in enumerate(dct, 1):
ax = fig.add_subplot(1,3,i)
dct[key](X,Y,U,V)
plt.title(key)
plt.tight_layout()
plt.show()
統(tǒng)計圖
| 繪圖函數(shù) | 坐標 | 說明 |
|---|---|---|
| hist | x | 數(shù)據(jù)直方圖 |
| boxplot | x | 箱線圖 |
| violinplot | x | 小提琴圖 |
| enventplot | x | 平行線疏密圖 |
| hist2d | x,y | 二維直方圖 |
| hexbin | x,y | 鉆石圖 |
| pie | x | 餅圖 |
其中hist, boxplot, violinplot, enventplot是統(tǒng)計一維數(shù)據(jù)的,可直接輸入隨機數(shù),繪圖函數(shù)會自行統(tǒng)計其區(qū)間

繪圖代碼如下
x = np.random.standard_normal(size=1000)
dct = {"hist" : plt.hist, "violinplot" : plt.violinplot,
"boxplot": plt.boxplot}
fig = plt.figure(figsize=(10,6))
for i,key in enumerate(dct, 1):
ax = fig.add_subplot(2,2,i)
dct[key](x)
plt.title(key)
ax = fig.add_subplot(224)
ax.eventplot(x)
plt.title("eventplot")
plt.tight_layout()
plt.show()hist2d和hexbin用于統(tǒng)計二維數(shù)據(jù),最終以圖像的形式展示出來,二者在觀感上的主要區(qū)別是,hist2d的“像素”是方形的,而hexbin則是六邊形的。

繪圖代碼如下
x = np.random.randn(5000)
y = 1.2 * x + np.random.randn(5000) / 3
fig = plt.figure(figsize=(10,5))
ax = fig.add_subplot(121)
ax.hist2d(x, y, bins=[np.arange(-3,3,0.1)] * 2)
plt.title("hist2d")
ax = fig.add_subplot(122)
ax.hexbin(x, y, gridsize=20)
plt.title("hexbin")
plt.tight_layout()
plt.show()最后還有一個餅圖,餅圖要求輸入坐標必須都大于0,繪圖代碼如下
plt.pie([1,2,3,4,5]) plt.tight_layout() plt.show()

非結構坐標圖
下面這四個繪圖函數(shù)有一個特點,即其繪圖坐標并不是格式化的,而支持隨機坐標進行繪圖,這一點和plot_trisurf比較相似
| 繪圖函數(shù) | 坐標 | 說明 |
|---|---|---|
| tricontour | x,y,z | 非結構等高線 |
| tricontourf | x,y,z | 非結構化填充等高線 |
| tricolor | x,y,z | 非結構化偽彩圖 |
| triplot | x,y | 三角連線圖 |

繪圖代碼如下
x = np.random.uniform(-4, 4, 256)
y = np.random.uniform(-2, 2, 256)
z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)
levels = np.linspace(z.min(), z.max(), 7)
fig = plt.figure(figsize=(12,6))
ax = fig.add_subplot(221)
ax.plot(x, y, 'o', markersize=1, color='lightgrey', alpha=0.5)
ax.tricontour(x, y, z, levels=levels)
plt.title("tricontour")
ax = fig.add_subplot(222)
ax.plot(x, y, 'o', markersize=1, color='lightgrey', alpha=0.5)
ax.tricontourf(x, y, z, levels=levels)
plt.title("tricontourf")
ax = fig.add_subplot(223)
ax.plot(x, y, 'o', markersize=1, color='lightgrey', alpha=0.5)
ax.tripcolor(x, y, z)
plt.title("tripcolor")
ax = fig.add_subplot(224)
ax.triplot(x,y)
plt.title("triplot")
plt.tight_layout()
plt.show()以上就是python35種繪圖函數(shù)詳細總結的詳細內容,更多關于python繪圖函數(shù)的資料請關注腳本之家其它相關文章!
相關文章
利用Python操作MongoDB數(shù)據(jù)庫的詳細指南
MongoDB是由C++語言編寫的非關系型數(shù)據(jù)庫,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng),其內容存儲形式類似JSON對象,下面這篇文章主要給大家介紹了關于利用Python操作MongoDB數(shù)據(jù)庫的相關資料,需要的朋友可以參考下2022-06-06
idea2020手動安裝python插件的實現(xiàn)方法
這篇文章主要介紹了idea2020手動安裝python插件的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07
Python鏈式調用數(shù)據(jù)處理實際應用實例探究
本文將深入介紹Python鏈式調用的概念、原理以及實際應用,通過豐富的示例代碼,幫助讀者更全面地理解和應用這一編程技巧2024-01-01

