了解 matplotlib 的坐標(biāo)系統(tǒng),繪制圖形的時(shí)候,如果需要在圖上添加一些額外的元素或者說明文字,
就可以很好的控制添加元素和說明文字的位置。
寧城ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
matplotlib 使用2種坐標(biāo)系,笛卡爾坐標(biāo)系是默認(rèn)的,一般我們繪制的二維圖形基本都是笛卡爾坐標(biāo)系的。
比如各種柱狀圖,折線圖,散點(diǎn)圖等等。
但是,有些場景下,極坐標(biāo)能更好的展示分析的結(jié)果。
比如上面笛卡爾坐標(biāo)系下的柱狀圖,折線圖和散點(diǎn)圖在極坐標(biāo)系下顯示效果類似:
兩種坐標(biāo)系沒有高低之分,根據(jù)場景選擇合適的去展示。
笛卡爾坐標(biāo)系和極坐標(biāo)系是宏觀上的坐標(biāo)系統(tǒng),對于每個(gè)具體的圖形,matplotlib 為了更好的在圖形上繪制各種元素,
基于笛卡爾坐標(biāo)系或者極坐標(biāo)系,定義了繪制圖形的4個(gè)坐標(biāo)系:
在笛卡爾坐標(biāo)系下:
在極坐標(biāo)系下:
matplotlib 提供了接口,可以在4種坐標(biāo)系之間的坐標(biāo)是可以互相轉(zhuǎn)換的。
對于如下的示例圖形,提供的6種坐標(biāo)系之間的轉(zhuǎn)換接口如下:
fig = plt.figure(figsize=(6, 5), dpi=100)
ax = fig.add_subplot(1, 1, 1)
ax.set_xlim(0,360), ax.set_ylim(-1,1)
轉(zhuǎn)換方向 | 轉(zhuǎn)換方法 |
---|---|
DC_to_FC | ax.transData.transform |
FC_to_DC | ax.transData.inverted().transform |
NDC_to_FC | ax.transAxes.transform |
FC_to_NDC | ax.transAxes.inverted().transform |
NFC_to_FC | fig.transFigure.transform |
FC_to_NFC | fig.transFigure.inverted().transform |
一共4種坐標(biāo)系,如果兩兩之間都可以互相轉(zhuǎn)換,應(yīng)該有12種情況,這里卻只有6種情況。
這是因?yàn)槠渌那闆r可以由上面這6種接口推導(dǎo)出來,比如:
下面,用github上一段開源代碼示例看看轉(zhuǎn)換的結(jié)果:
# ----------------------------------------------------------------------------
# Title: Scientific Visualisation - Python & Matplotlib
# Author: Nicolas P. Rougier
# License: BSD
# ----------------------------------------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.transforms as transforms
fig = plt.figure(figsize=(6, 5), dpi=100)
ax = fig.add_subplot(1, 1, 1)
ax.set_xlim(0, 360)
ax.set_ylim(-1, 1)
DC_to_FC = ax.transData.transform
FC_to_DC = ax.transData.inverted().transform
NDC_to_FC = ax.transAxes.transform
FC_to_NDC = ax.transAxes.inverted().transform
NFC_to_FC = fig.transFigure.transform
FC_to_NFC = fig.transFigure.inverted().transform
print(NFC_to_FC([1, 1])) # (600,500)
print(NDC_to_FC([1, 1])) # (540,440)
print(DC_to_FC([360, 1])) # (540,440)
DC_to_NDC = lambda x: FC_to_NDC(DC_to_FC(x))
print(DC_to_NDC([0, -1])) # (0.0, 0.0)
print(DC_to_NDC([180, 0])) # (0.5, 0.5)
print(DC_to_NDC([360, 1])) # (1.0, 1.0)