Matplotlib做圖工具核心框架邏輯梳理

0 評(píng)論 1930 瀏覽 1 收藏 12 分鐘
🔗 产品经理的核心价值是能够准确发现和满足用户需求,把用户需求转化为产品功能,并协调资源推动落地,创造商业价值

本文簡要介紹Matplotlib做圖工具的系統(tǒng)架構(gòu),文章使用類圖簡要梳理Matplotlib的核心架構(gòu)思路,立足于洞察工具的核心架構(gòu)邏輯,支撐工具的日常使用。并對(duì)畫布的四層級(jí)容器的作用和使用做演示說明。

一、概要架構(gòu)圖

用計(jì)算機(jī)工具做圖,是現(xiàn)實(shí)世界中畫畫,本質(zhì)需要準(zhǔn)備的東西是一致的,主要包括畫圖工具和畫布兩大模塊。

二、畫圖工具

1. 畫圖工具說明

畫圖工具就是各種筆,鉛筆、水彩筆、刷子、顏料等,每種工具發(fā)揮的作用各有不同。

matplotlib采用面向?qū)ο笤O(shè)計(jì)架構(gòu),設(shè)計(jì)中肯定借鑒了該思路。區(qū)別是計(jì)算機(jī)程序不能完全對(duì)照現(xiàn)實(shí)的對(duì)象構(gòu)建程序。

現(xiàn)實(shí)中,畫家雖然需要準(zhǔn)備各種畫筆,但是最終有價(jià)值的是畫家涂鴉的各種形狀、色彩、布局等,畫筆、顏料等只是實(shí)現(xiàn)涂鴉的手段。

計(jì)算機(jī)畫圖,本質(zhì)是操作各種數(shù)字的變化涂鴉,所以畫圖工具,只需要構(gòu)建各種可以用來組裝的基本圖形、顏色的積木和拼裝平臺(tái)即可。

下圖中的rectangel、circle、line2d、axesimage等就是可供拼接的積木。window、figure、axes、axis就是積木拼接的平臺(tái)。

2. 畫圖工具類圖

按照面向?qū)ο蟮乃枷耄蟛糠值募軜?gòu)都會(huì)劃分為工具區(qū)和應(yīng)用區(qū)。此處工具區(qū)的包括各種形狀的定義、顏色、線條等。

三、 圖像載體

畫布屬于圖像載體,圖像載體還包括其他間接載體,硬盤也是圖像載體。

1. 圖像載體說明

有了畫圖工具,接下來就需要畫布。現(xiàn)實(shí)生活中可以在墻上、紙上、沙地上,各種載體都可以作為畫布。顯然,畫在墻上,別人想?yún)⒂^,只能到現(xiàn)場,畫到紙上,可以把紙帶給別人,畫在沙地上,風(fēng)吹就會(huì)消失。

只有所承載的容器能被更大的容器容納,能實(shí)現(xiàn)儲(chǔ)存、運(yùn)輸、交換,這個(gè)載體才是好載體。

為了使圖畫能支撐更多的移動(dòng)、組合,matplotlib使用了四層容器。

2. 圖像載體類圖

3. 載體承載關(guān)系圖

容器承載的邏輯生活中到處都是:餅干密封到包裝袋、然后一起包裝到盒子、箱子里,裝到運(yùn)載車輛里,車輛在地球上,地球在宇宙中…

使用容器承載,就需要以對(duì)容器指定坐標(biāo)系,用以確定承載物的位置關(guān)系。比如袋子裝餅干、杯子接水,只是這種承載非常直觀,我們并未顯式的聲明容器的位置關(guān)系。只有特別大的東西才會(huì)聲明坐標(biāo)系,比如地球的經(jīng)緯度坐標(biāo)系。

在計(jì)算機(jī)世界里,所有的東西都需要人工構(gòu)建出來,所以所有的容器都需要聲明坐標(biāo)系。小到數(shù)值,大到對(duì)象、模塊、應(yīng)用程序,只是隨著軟件的發(fā)展,直接面向內(nèi)存編碼的任務(wù)更多的交給計(jì)算機(jī)軟件自動(dòng)執(zhí)行了。

Matplotlib做圖工具核心框架邏輯梳理

四、 單坐標(biāo)系構(gòu)圖

雖然,容器層層包裝的情況是普遍的,但是各個(gè)容器之間的關(guān)系并不是均等的,比如雖然餅干經(jīng)過若干層的包裝,但是只有餅干本身才是營養(yǎng)的最終承載者,其余的塑料包裝、盒包裝、箱包裝、到汽車車廂等,其他所有的容器的意義都是為了方便餅干的保存、交易、運(yùn)輸?shù)裙δ堋?/p>

Axes在這四個(gè)包裝容器的地位如同餅干相對(duì)于盒、箱、車廂包裝的意義。

Axes是容器的核心,所有的畫圖工具都可以通過該對(duì)象直接訪問,雖然axis是最小的容器,但是脫離Axes對(duì)象,Axis對(duì)象無法單獨(dú)發(fā)揮作用。

1. 單坐標(biāo)圖的默認(rèn)效果

如下圖,坐標(biāo)系的橫坐標(biāo)為:(-10,10)與函數(shù)x的區(qū)間完全一致。

該圖使用x的數(shù)值邊界作為坐標(biāo)系x軸邊界,此處(-10,10)被用作axis的默認(rèn)值。

此種訪問邏輯,沒有顯式的聲明window、figure、axes、axis并不表示他們不存在,pyplot是用裝飾器模式,將這四個(gè)對(duì)象的細(xì)節(jié)隱藏起來了,可以極大減少參數(shù)的輸入,降低使用的復(fù)雜度。

Matplotlib做圖工具核心框架邏輯梳理

2. 單坐標(biāo)圖調(diào)增坐標(biāo)系范圍

axis是坐標(biāo)軸有兩個(gè)軸,x軸和y軸的大小是分別調(diào)節(jié)實(shí)現(xiàn)的。

調(diào)整后的坐標(biāo)軸和x,y的范圍不一致了。該方式可以用于調(diào)整查看圖形的視角。

Matplotlib做圖工具核心框架邏輯梳理

Matplotlib做圖工具核心框架邏輯梳理

對(duì)比可知,兩條曲線從數(shù)值上看是完全相同的,但是坐標(biāo)系的大小不同,可觀察的視覺就不同。

3. 單坐標(biāo)系疊加多圖

如代碼所示,如果仍然僅適用默認(rèn)的axes,多個(gè)疊加的圖,只能共享同一個(gè)坐標(biāo)系。

Matplotlib做圖工具核心框架邏輯梳理

Matplotlib做圖工具核心框架邏輯梳理

五、多坐標(biāo)系疊加多圖

疊加多坐標(biāo)軸圖片時(shí),必須顯式的聲明figure、axes,否則無法實(shí)現(xiàn)。

window不需要顯式聲明是因?yàn)?,代碼執(zhí)行時(shí)系統(tǒng)會(huì)自動(dòng)聲明,每次執(zhí)行就是一個(gè)window。

axis不需要顯式聲明是因?yàn)?,axis與axes是一對(duì)一對(duì)應(yīng)的并且是聚合關(guān)系,聲明axes時(shí),系統(tǒng)會(huì)自動(dòng)聲明axis。

figure、axes必須手動(dòng)聲明是因?yàn)?,他們與父類都是組合關(guān)系,他們與父類組合時(shí),需要每個(gè)子類以對(duì)象的維度單獨(dú)聲明。

由于figure、axes需要單獨(dú)聲明,所以需要輸入的參數(shù)較多,非必要不要使用該方式。

此處要使用多個(gè)坐標(biāo)軸,只能聲明多個(gè)axes,無法單獨(dú)聲明axis,所以代碼邏輯如下:

Matplotlib做圖工具核心框架邏輯梳理

Matplotlib做圖工具核心框架邏輯梳理

此處代碼,figure(),括號(hào)內(nèi)可以無輸入坐標(biāo)信息,因?yàn)楦鱾€(gè)figure之間是相互獨(dú)立的,figure內(nèi)部各對(duì)象之間相互無影響。也可以輸入任意數(shù)組。兩個(gè)對(duì)象的區(qū)分靠變量名實(shí)現(xiàn)。

從圖中一個(gè)x值對(duì)應(yīng)兩個(gè)y的值,說明這是兩個(gè)函數(shù)的疊加。該方式訪問十分復(fù)雜,非必要不要直接使用ax1對(duì)象訪問。此處僅做示意。

六、 多圖片布局

多個(gè)圖片之間布局,位置定位有兩種思路

  1. 絕對(duì)位置定位:用實(shí)際位置坐標(biāo)定位圖片位置
  2. 相對(duì)位置定位:用數(shù)組自動(dòng)將圖片切分成相同大小的行和列,根據(jù)行和列的位置定位。

1. 絕對(duì)坐標(biāo)布局法說明

Matplotlib做圖工具核心框架邏輯梳理

Axes在figure容器內(nèi),就需要定義準(zhǔn)確的位置,距離左邊框的數(shù)值left,距離下邊框的bottom,axes自己的寬度width,axes自己的高度height。

Axes初始化時(shí),需要作為顯式參數(shù)傳值。

Matplotlib做圖工具核心框架邏輯梳理

Matplotlib做圖工具核心框架邏輯梳理

2. 絕對(duì)坐標(biāo)布局法實(shí)踐

Matplotlib做圖工具核心框架邏輯梳理

Matplotlib做圖工具核心框架邏輯梳理

3. 相對(duì)坐標(biāo)布局法說明

同一個(gè)畫布上可以分為多個(gè)模塊,分別作畫。

畫布的布局是用單元格的方式:

  • 參數(shù)一:整個(gè)畫布有幾行
  • 參數(shù)二:當(dāng)前行有幾列
  • 參數(shù)三:當(dāng)前是第幾個(gè)子圖位置

十以內(nèi),2,1,1與211效果等同。

示意圖如下:

Matplotlib做圖工具核心框架邏輯梳理

4. 絕對(duì)坐標(biāo)布局法實(shí)踐

Matplotlib做圖工具核心框架邏輯梳理

Matplotlib做圖工具核心框架邏輯梳理

七、 多圖片自動(dòng)切割

如圖,同一個(gè)figure導(dǎo)出的圖片是同一張,多個(gè)figure,每個(gè)figure都是獨(dú)立的一張圖片。

所以下面代碼兩個(gè)圖片導(dǎo)出是獨(dú)立的,axes的參數(shù)并不能影響兩個(gè)axes之間的排序,因?yàn)樗麄儾辉谝粋€(gè)容器里。

Matplotlib做圖工具核心框架邏輯梳理

Matplotlib做圖工具核心框架邏輯梳理

Matplotlib做圖工具核心框架邏輯梳理

本文由 @我是產(chǎn)品張 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載

題圖來自Unsplash,基于CC0協(xié)議

該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 目前還沒評(píng)論,等你發(fā)揮!
专题
13980人已学习13篇文章
如果做小红书运营?本专题的文章分享了小红书流量密码。
专题
12398人已学习12篇文章
所谓SOP,即标准作业程序,指将某一事件的标准操作步骤和要求以统一的格式描述出来,用于指导和规范日常的工作。本专题的文章分享了SOP创作指南。
专题
12323人已学习11篇文章
怎么做投放是很多运营人和品牌方的一大难题,做好投放不可缺少以下几大步骤。本专题的文章以小红书投放为例,分享了一些策略,一起来看下吧。
专题
12722人已学习17篇文章
在一些老系统可能会有流程复杂、扩展性不强的问题,此时便需要进行重构。本专题的文章分享了产品重构指南。
专题
16529人已学习14篇文章
本专题的文章分享了拼团功能的设计指南。
专题
36304人已学习27篇文章
作为AIGC的代表性应用之一,ChatGPT仅仅只用了2个月的时间就已经突破了1亿用户。