先問兩個問題,你思考過:
為什么matplotlib繪圖,有一個“figure'圖形對象,還需要“canvas'畫布對象?又不是真的在畫布上繪畫?
mpl中是如何實現(xiàn)坐標(biāo)定位的?
在photoshop中也是如此。
在學(xué)習(xí)計算機(jī)繪圖時,經(jīng)常見到一些概念,如:
DPI
PPI
圖像
畫布
圖像尺寸
畫布尺寸
分辯率
inches
像素(pixels)
Axes
Axis
.......等
像我這樣的草根,初期常擰不清它們,并且困惑于:為什么要弄出這么多“差不多”(相似)的概念?
我也很長時間停留在對它們的一知半解上,因為那時也認(rèn)為,大致知道這此概念就“差不多了”(馬馬虎虎),我只要能畫出圖形來即可!
其實理清這些概念很重要,它是輸出圖像質(zhì)量、繪圖坐標(biāo)設(shè)置、matplotlib一些參數(shù)設(shè)置等的基礎(chǔ),甚至有時直接決定了你自由操控matplotlib的能力(如坐標(biāo)變換)。在對它們模糊的時候,使用matplotlib,很多參數(shù)設(shè)置的目的和產(chǎn)生的結(jié)果也就是模糊的。
等我花一些時間理清楚它們后,過去對matplotlib中一些不能理解的地方也豁然開朗了。
本打算把類似上面的一些基礎(chǔ)性概念在一篇文章中做個總結(jié),因篇幅的限制,需要分幾篇了。
繪圖過程中,絕大多數(shù)時間,我們都是在顯示器(本文以液晶顯示器為例)上操作、查看圖像。
顯示器有一個最直接、固定的參數(shù),就是經(jīng)常說的屏幕尺寸。
屏幕尺寸(物理尺寸),用英寸 inches表示,它是矩形'液晶面板'的對角線長度。比如,17寸顯示器,23.1寸顯示器...等。
矩形的對角線是23.1 inches,顯示器的長、寬是多少呢?這就引入了屏幕比例的概念,如標(biāo)準(zhǔn)的4:3,16:9。
1 英寸 = 2.54 厘米。
我正在用的臺式機(jī)上的顯示器是:23.1英寸,16:9。
用 l 、w 分別表示液晶面板的長和寬,有:
解上面的方程組即可大概地計算出顯示器屏幕的長和寬了,單位是厘米。
計算結(jié)果是:
l = 51.55556 ≈ 51 厘米
w = 28.76559 ≈ 29 厘米
我們可以用尺子量一下屏幕顯示區(qū)的長和寬。更精確的是使用硬件檢測軟件獲取顯示器的詳細(xì)信息,我的顯示器檢測結(jié)果如下:
小結(jié):
用液晶面板的對角線長度,單位英寸,inches,表示 ;
屏幕的長寬比叫屏幕比例,如 16:9;
上兩點計算出屏幕的物理長、寬,一般用厘米或英寸表示。
在matplotlib中,`display`坐標(biāo)就是基于這個屏幕構(gòu)建的坐標(biāo),所以用inches或像素標(biāo)識。
后面會專題討論matplotlib中的各種坐標(biāo)系,上面的知識會有助于你的理解。
液晶是一種特殊的有機(jī)化合物, 在常溫條件下,它呈現(xiàn)出既有液體的流動性,又有晶體的光學(xué)各向異性,因而稱為“液晶”。
液晶的物理特性是:當(dāng)通電時,排列變的有秩序,使光線容易通過(看起來就是亮);不通電時排列混亂,阻止光線通過(看起來就是灰暗)。讓液晶如閘門般地阻隔或讓光線穿透。
液晶層中的液滴都被包含在細(xì)小的單元格結(jié)構(gòu)中,一個或多個單元格構(gòu)成屏幕上的一個像素。在玻璃板與液晶材料之間是透明的電極,電極分為行和列,在行與列的交叉點上,通過改變電壓而改變液晶的旋光狀態(tài),液晶材料的作用類似于一個個小光閥。這樣就可以控制每個像素的亮度和顏色了。
顯然,相同尺寸的液晶層上劃分的單元格(像素)越多,顯示器的顯示精度就越高,顯示出來的圖像就越細(xì)膩,但這種顯示器的制作工藝難度就會增加,成本也會增加。
顯示器就是通過在一個一個單元格(像素)中填充不同的顏色來表達(dá)圖像的。
像素就是最小的顯示單元格,在一個單元格中只能顯示相同的顏色。
我們在選購顯示器時,非常關(guān)注的”分辨率“參數(shù),它就與”像素“有關(guān)。像素常用字母PX表示。
分辨率,又稱解析度、解像度。即顯示屏幕區(qū)域被分解為多少個像素(單元格)。
雖然在系統(tǒng)中有設(shè)置顯示器分辨的地方,但液晶顯示器的最大分辨率在出廠后就是固定的了。能設(shè)置的僅是當(dāng)前分辨率。下圖是windows 10 系統(tǒng)設(shè)置顯示分辨率的界面。
我的顯示器最大分辨率是 1920*1080,即長向上有1920個PX,寬向上有1080PX
總的有 2073600 個像素,它就是我的顯示的分辨率了。這個數(shù)字太大,不好理解,所以一般直接用類似 1920PX * 1080PX這樣的形式來表示屏幕的分辨率,手機(jī)屏幕也是如此。
題外話:液晶面板的單元格劃分在出廠時就固定了,為什么還能設(shè)置當(dāng)前分辨率呢?
假如我將當(dāng)前分辨率調(diào)整為1280px*960px,按照定義,長向就是1280個像素,寬向就是960個像素。其實并不是你改變了顯示器分辨率,而是操作系統(tǒng)欺騙了你。操作系統(tǒng)通過一系列運(yùn)算將1920*1080個單元格矩陣變換為1280*960個模擬像素矩陣呈現(xiàn)給你。所以,就有了當(dāng)前分辨率和最大分辨。
基于分辨率的含義,人們還用每英寸長度上像素個數(shù)來表示屏幕分辨率,即 Pixels per inches,縮寫為 PPI。
我的顯示器長向上最大為1920像素,物理長度是51厘米(折合20.078英寸),每英寸長度上有1920 px / 20.078 inches ≈ 96 PPI。
所以,有時又說我的顯示器分辨率是 96 PPI。
也有人把他說成 96 DPI,這是不嚴(yán)格的。對于顯示器分辨率,嚴(yán)格來說應(yīng)該用 96 PPI。當(dāng)然你很清楚它們的含義時,反而混用也沒有關(guān)系了。
DPI 是 Dots per inches的縮寫。DPI是一個與打印機(jī)、印刷緊密相關(guān)的概念。
打印機(jī)是通過一個一個的墨點來打印圖像的,每個墨點的色彩只能是一樣的,打印機(jī)在每英寸上可打印的點數(shù)就是DPI。顯然DPI越大,打印出來的圖像就越細(xì)膩。所以,常用DPI作為打印機(jī)的分辨率來表示打印機(jī)的最大可打印質(zhì)量。
為什么說是最大可打印質(zhì)量呢?即這臺打印機(jī)最大打印分辨率,但實際打印分辨率還與圖像的分辨率有關(guān)。
一般打印機(jī)的分辨在150-300DPI,高的能達(dá)到600DPI。
我們用100%的比例打印圖像:
假如有一臺打印機(jī)的分辨率是600DPI,要打印一幅分辨率(后面會討論圖像分辨率)為300DPI的圖像,打印機(jī)是不可能改變圖像分辨率的,打印到紙上的照片的分辨率就是300DPI,因為圖像的原始點是這么大,即使打印機(jī)用了兩個點表達(dá)圖像中的一個點,但這兩個點是一樣的色彩。
反過來,用一臺300DPI的打印機(jī),打印一幅600DPI的圖像,打印出來的照片也只能是300DPI的。因為打印機(jī)無法表達(dá)更小的點。
嚴(yán)格來說:
像素就是顯示器、圖像被分割成的最小格子;
單個格子越小,每英寸上格子就越多,即像素越大,顯示就越細(xì)膩;
單個格子越大,每英寸上格子就越少,即像素越小,顯示就越粗糙;
顯示分辨率用PPI,Pixels Per Inches;
打印分辨率用DPI,Dots Per Inches。
它們對matplotlib來說很重要。
聯(lián)系客服