matplotlib可視化系列之【縮放和投影】

有時候,我們將數據變換之后再繪圖,一方面,可以突出某些區域的數據;另一方面,變換之后可以更好的看出數據之間的關系。

創新互聯是一家專注于網站設計制作、做網站與策劃設計,肅州網站建設哪家好?創新互聯做網站,專注于網站建設十多年,網設計領域的專業建站公司;建站業務涵蓋:肅州等地區。肅州做網站價格咨詢:028-86922220

matplotlib 提供了兩種變換數據的方式,一種是 Scale(縮放),一種是Projection(投影)。

Scale是對數據的一個維度進行變換,Projection則是對2個或者2個以上的維度進行變換。

Scale - 縮放

線性縮放

線性縮放是默認的縮放方式,數據的值是通過線性變換之后顯示在圖形的。
每個數值變換成圖形上的像素位置之后繪制在圖形上。

比如:

x = list(range(1, 11))
y = x

fig = plt.figure(figsize=(6,6))
ax = plt.subplot(1,1,1, aspect=1, xlim=[1,10], ylim=[1,10])
ax.plot(x, y, marker="o")

plt.show()

顯示圖形如下:

上面的例子中,x 和 y 的關系是 y = x,如果 x 和 y 的關系是 y = 10^x,仍然用線性縮放顯示的話,圖形會被壓縮成一個非常窄的長條形。

比如下面的代碼:

import math

x = list(range(1, 11))
y = [ math.pow(10, a) for a in x]

fig = plt.figure(figsize=(6,6))
ax = plt.subplot(1,1,1, aspect=1, xlim=[1,10])
ax.plot(x, y, marker="o")

plt.show()

可以試試看,因為 x 的值很小的時候,y 的值就會很大,顯示出來的圖幾乎無法查看。

對數縮放

matplotlib 中默認還提供了

  • log:以10為底數的對數縮放,不支持負數和0
  • logit:以2為底數的對數縮放,不支持負數和0
  • symlog:包含線性縮放和對數縮放,0附近的值用線性縮放,其他值用對數縮放

上面的例子中,x 和 y 的關系是 y = 10^x,所以,我們可以在Y軸上用對數縮放。
同時調節 ylim 的范圍,使得圖形顯示的更加均勻。

import math

x = list(range(1, 11))
y = [ math.pow(10, a) for a in x]

fig = plt.figure(figsize=(6,6))
ax = plt.subplot(1,1,1, aspect=1, xlim=[1,10], ylim=[10, math.pow(10, 10)])
ax.set_yscale('log')
ax.plot(x, y, marker="o")

plt.show()

顯示效果如下:

自定義縮放

自定義縮放函數時,定義2個可互相轉換的函數。
比如,對于 y = x^2 關系,也就是,y 是 x 的平方。默認顯示的效果如下:

x = list(range(1, 11))
y = [ a * a for a in x]

fig = plt.figure(figsize=(6,6))
ax = plt.subplot(1,1,1, aspect=1, xlim=[1,10], ylim=[1, 10*10])

ax.plot(x, y, marker="o")

plt.show()

添加自定義縮放后:

def forward(x):
    return x**2

def inverse(x):
    return x**(1/2)

x = list(range(1, 11))
y = [ a * a for a in x]

fig = plt.figure(figsize=(6,6))
ax = plt.subplot(1,1,1, aspect=1, xlim=[1,10], ylim=[1, 10*10])

ax.set_xscale('function', functions=(forward, inverse))
ax.plot(x, y, marker="o")

plt.show()

圖形的顯示美觀很多。

Projection - 投影

投影是多個維度的變換,一般用在坐標系的轉換上。

笛卡爾坐標系和極坐標系

比如,下面例子中分別將數據顯示在笛卡爾坐標系和極坐標中,體會下其中的區別。

x = list(range(1, 11))
y = x

fig = plt.figure(figsize=(12,6))
ax1 = plt.subplot(1,2,1, aspect=1, xlim=[1,10], ylim=[1, 10], projection='polar')
ax1.plot(x, y, marker="o")

ax2 = plt.subplot(1,2,2, aspect=1, xlim=[1,10], ylim=[1, 10])
ax2.plot(x, y, marker="o")

plt.show()

極坐標系一般用在非線性的關系中,上面的數據用 笛卡爾坐標更合適。

投影的場景

投影使用的場景其實不只是坐標系的變換。

因為我們平時繪制2D圖形比較多,2D圖形只有2個維度,所以一般用縮放(Scale)變換就足夠了。
但是在 3D 圖形的場景中,投影就會用的多一些,matplotlib 繪制3D圖形需要額外的庫,這里不演示了。

此外,和地理信息結合展示數據的時候,投影也會用的比較多。
因為數據對應到經緯度上至少是2個維度的同時變換(如果地理信息中包含海拔高度信息,則是3個維度的變換)

名稱欄目:matplotlib可視化系列之【縮放和投影】
URL標題:http://m.kartarina.com/article2/dsogjic.html

成都網站建設公司_創新互聯,為您提供定制開發網站制作自適應網站虛擬主機定制網站營銷型網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

h5響應式網站建設
主站蜘蛛池模板: 无码不卡av东京热毛片| 亚洲精品无码AV人在线播放 | 红桃AV一区二区三区在线无码AV| 狠狠躁狠狠躁东京热无码专区| 国产精品无码成人午夜电影| 精品无码一区二区三区电影 | 久久av高潮av无码av喷吹| 国产精品无码a∨精品| 无码中文字幕一区二区三区| 国产精品无码久久综合| 高清无码一区二区在线观看吞精| 无码人妻精品一区二区三| 免费看无码自慰一区二区| 中文字幕无码亚洲欧洲日韩| 亚洲国产精品无码专区在线观看| 成人免费无码大片A毛片抽搐色欲 成人免费无码大片a毛片 | 99精品一区二区三区无码吞精| 精品无码国产污污污免费网站国产| 最新无码人妻在线不卡| 久久精品国产亚洲AV无码偷窥| 少妇性饥渴无码A区免费| 色欲aⅴ亚洲情无码AV| 亚洲中文字幕无码mv| 曰韩人妻无码一区二区三区综合部| 一本色道无码不卡在线观看| 人妻av无码专区| 亚洲av麻豆aⅴ无码电影| 精品一区二区三区无码免费直播| 成人无码Av片在线观看| 大胆日本无码裸体日本动漫| 九九在线中文字幕无码| 亚洲av无码专区亚洲av不卡| 亚洲AV无码一区二区三区性色| 无码精品人妻一区二区三区漫画 | 午夜福利av无码一区二区| 中文字幕无码无码专区| 国产日韩精品中文字无码| 性无码免费一区二区三区在线| 久久久久久久人妻无码中文字幕爆 | 用舌头去添高潮无码视频| 色综合色国产热无码一|