07- 搭建一個穩健的matplotlib繪圖平臺

搭建一個和我的一樣的、穩健的matplotlib繪圖平臺。

網上這一類的交流、總結文章已經很多,我為什麼還要專文來說這個事呢?你可能會說:不就是安裝Python、配置Python環境變數、安裝matplotlib及其依賴包嗎?

從一個小故事看matplotlib平臺穩健性

前些天,有一位網友求救,說他在matplotlib中繪圖,需要將影象解析度設定為 600dpi,但不管怎麼操作就是沒有效果,他在影象屬性中看到的圖片DPI始終只有96dpi

%matplotlib inlineimport numpy as npimport matplotlibimport matplotlib。pyplot as plt# sphinx_gallery_thumbnail_number = 2# 蔬菜種類vegetables = [“cucumber”, “tomato”, “lettuce”, “asparagus”, “potato”, “wheat”, “barley”]# 農夫名字farmers = [“Farmer Joe”, “Upland Bros。”, “Smith Gardening”, “Agrifun”, “Organiculture”, “BioGoods Ltd。”, “Cornylee Corp。”]# 收成harvest = np。array([[0。8, 2。4, 2。5, 3。9, 0。0, 4。0, 0。0], [2。4, 0。0, 4。0, 1。0, 2。7, 0。0, 0。0], [1。1, 2。4, 0。8, 4。3, 1。9, 4。4, 0。0], [0。6, 0。0, 0。3, 0。0, 3。1, 0。0, 0。0], [0。7, 1。7, 0。6, 2。6, 2。2, 6。2, 0。0], [1。3, 1。2, 0。0, 0。0, 0。0, 3。2, 5。1], [0。1, 2。0, 0。0, 1。4, 0。0, 1。9, 6。3]])# fig, ax = plt。subplots()fig = plt。figure(dpi=600)ax = fig。add_subplot(1,1,1)im = ax。imshow(harvest)# 設定x,y座標長度ax。set_xticks(np。arange(len(farmers)))ax。set_yticks(np。arange(len(vegetables)))# x,y具體標籤ax。set_xticklabels(farmers)ax。set_yticklabels(vegetables)# x軸標籤旋轉45°顯示plt。setp(ax。get_xticklabels(), rotation=45, ha=“right”, rotation_mode=“anchor”)# 顯示每個方格的值for i in range(len(vegetables)): for j in range(len(farmers)): text = ax。text(j, i, harvest[i, j], ha=“center”, va=“center”, color=“w”)ax。set_title(“Harvest of local farmers (in tons/year)”)fig。tight_layout()plt。savefig(“cm。jpeg”,dpi = 600)plt。show()

他把程式碼發了過來,似乎沒有什麼問題。我在jupyter lab中執行這段程式碼,生成“cm。jpeg”檔案,在PS中檢視影象尺寸:

07- 搭建一個穩健的matplotlib繪圖平臺

完全正確,解析度就是預期的600dpi。

我讓把他看到的影象屬性截圖給我看看,如下:

07- 搭建一個穩健的matplotlib繪圖平臺

按照這個屬性引數,很容易計算出,他電腦上的這張cm。jpeg影象的物理尺寸是:

寬度 = 40英寸;

高度 = 30英寸。

mpl預設的figsize是(6, 4)。他的程式碼並沒有設定“figsize”,但生成的影象尺寸是(40,30) 英寸,這個尺寸太大了,顯然是在哪裡修改了rcParams引數,導致了他的苦惱。

如果你對上面的關於解析度和影象尺寸的關係不是很清楚,請重新閱讀第4,第5篇文章。

由於Python的開源性,各種開發包又很多,包之間的依賴性極其複雜,所以你的每一個操作都有可能影響整個開發平臺的穩定性,甚至引發災難性後果。

比如:

你在程式碼中無意中修改了某個包的預設引數,再也得不到預期的結果;

你升級了某個包,但其它依賴於它的包還沒有對應的升級包(你沒有升級,或者沒有可用的升級包),導致其它包執行出錯;

等等。。。。

所以,搭建一個穩健的Python平臺非常重要。像你我這樣透過網路交流,雙方保持測試環境的儘可能一致也是非常有好處的。

推薦的Python平臺搭建方式

搭建Python平臺,目前從大方面來說,常見的主要有兩種方式:

直接安裝Python,使用pip安裝和管理平臺,需要用哪個包再安裝它;

透過安裝Anaconda,一次性安裝常用的庫,使用conda安裝和管理平臺。

第1種方式適合非常專業的人員,要求對Pyhton的包管理非常熟練,對包的依賴性有較深的瞭解,並且有很強的解決遇到的各種問題的能力。

像我這樣的草根推薦第2種方式。

Anaconda是什麼,有什麼優勢?

Anaconda是以Python為核心,針對科學計算和機器學習而構建的一個整合環境。

它以一個整潔的包裝給了我們使用Python所需的一切,讓我們可以專注於使用工具而不是維護它們。

首先,它在一個包裝中集成了Python科學計算和機器學習常用的庫;

其次,它使用conda安裝和管理環境,在下載、安裝、更新包時會自動分析你的系統和當前環境,並自動處理包之間的依賴關係;

第三,它還提供一個導航器,讓我這樣的草根可以在圖形視窗管理環境;

第四,它還提供了spyder, prompt等附加工具,作為官方的IDE和Shell命令工具。

一句話,它的優勢在於

整合

了我們使用Python的主要工具。

建議你按照下面的步驟從頭搭建一個

穩健

的Python開發平臺,這樣你的測試環境和我的就基本一致了,各種程式碼的測試結果也就會基本一致,也會避免出現莫名的問題。

下載,安裝Anaconda

登入anaconda官網 https://www。anaconda。com/distribution/#download-section

07- 搭建一個穩健的matplotlib繪圖平臺

下載相應的版本,我的作業系統是windows 10 64bit 的。

強烈建議下載 Python 3.7 版的,Python2 即將被放棄。

如果你過去一直使用Python 2 ,也不要擔心,轉到Python 3 真的很容易,並且從長遠看是必須的,也是值得的。

像安裝其它windows程式一樣,雙擊執行安裝,一路next,在指定安裝路徑時,建議設定如下:

07- 搭建一個穩健的matplotlib繪圖平臺

其它都是預設設定即可。

安裝結束後,程式選單中會有一個Anaconda3資料夾。

07- 搭建一個穩健的matplotlib繪圖平臺

配置環境變數

需要進行兩次配置,第一次:

如下圖,開啟系統環境變數設定視窗:

07- 搭建一個穩健的matplotlib繪圖平臺

07- 搭建一個穩健的matplotlib繪圖平臺

07- 搭建一個穩健的matplotlib繪圖平臺

雙擊 PATH

開啟下面的視窗:

新建;

瀏覽;

找到左邊三個路徑

依次重複操作,即可將Anaconda的環境變數新增到系統中。

07- 搭建一個穩健的matplotlib繪圖平臺

新增圖中左側的三個路徑到環境變數中

測試Python和conda是否安裝配置成功

開啟Anaconda Prompt命令列視窗:

輸入命令 : python,返回如下內容:

07- 搭建一個穩健的matplotlib繪圖平臺

表示Python安裝配置成功,我的Python版本是3。7。3。

輸入命令:conda,返回如下內容:

07- 搭建一個穩健的matplotlib繪圖平臺

表示 conda 管理工具安裝配置成功。

建立工作虛擬環境

強烈建議:

在上面的安裝測試完成後,先建立一個工作虛擬環境。再開始你的探索之旅!

為什麼要工作建立虛擬環境?

前面說過,因為Python的開源性,包的依賴性複雜,在使用過程中,隨時都會破壞整個 Python 環境,導致出現一些莫名的問題和錯誤。

前面的安裝過程會建立一個base環境,如果直接在這個環境下工作、學習、測試,當系統中的python環境出現問題無法修復時,就不得不解除安裝Anaconda,再重新安裝它。

如果我們建立一個新環境,工作、測試、學習都在這個環境下進行,當出現問題時,我們只需要刪除這個環境,再重新建立一個環境即可,這比從頭安裝Anaconda要節省時間。

當然虛擬環境還有其它一些用途,不在我們的討論範圍內。

建立工作虛擬環境

啟動 Anaconda Prompt, 執行如下命令:

conda create -n py373env python=3。7

建立一個名為 “py373env”, Python版本為3。7的虛擬環境。

當然,環境的名稱你可以根據喜好定,我習慣於這樣命名,一看就知道,這是一個Python的虛擬環境,並且Python版本是3。7。3。

需要一定的時間,它會下載、安裝一些包,建立你指定的環境,建立完成後。

在Anaconda Prompt中輸入:

conda activate py373env

啟用‘py373env’環境。

07- 搭建一個穩健的matplotlib繪圖平臺

可以發現命令列的引導符最右邊的括號中原來的base,變成了py373env,這就表示,你原來處在base環境中,現在轉到了py373env環境中。

你在哪個環境中的操作,主要影響這個環境。比如更新、安裝包,修改一些包的預設引數,只會影響該環境下的包,不會影響base環境。

將虛擬環境也新增到系統環境變數中

07- 搭建一個穩健的matplotlib繪圖平臺

養成立即啟用工作虛擬環境的好習慣

我習慣於在jupyter lab中工作、學習、測試Python程式碼,資料分析、資料視覺化。

每天開啟 Anaconda Prompt,輸入的第一行命令就是:

conda activate py373env

即,立即轉到我的 py373env 虛擬環境,確保我的操作都是在這個環境下。除非我非常清楚地知道我要在其它環境下工作,我才退出py373env環境,啟用其它環境。

退出py373env環境,使用命令:

conda deactivate

07- 搭建一個穩健的matplotlib繪圖平臺

推薦 jupyter lab

jupyter lab是jupyte notebook的替代計劃。

jupyter提供了在web中輸入、儲存、執行程式碼,顯示結果。。。。。的強大功能。

它集互動模式、IDE模式的優點於一身。

是我測試Python程式碼、進行資料分析、matplotlib資料視覺化的主要戰場。

下面將以在py373env虛擬環境中安裝、配置jupyter lab為例介紹 Anaconda的包安裝和管理。

設定conda的下載映象源(即下載通道)

Anaconda的官方下載通道是 conda-forge

有時會出現下載失敗,下載速度慢的問題,可以新增清華大學的映象伺服器。

在“系統盤(c)-使用者——-使用者名稱”目錄下有一個Anaconda的配置檔案檔案:。condarc

07- 搭建一個穩健的matplotlib繪圖平臺

用記事本開啟這個“。condarc”檔案,刪除裡面的內容,將下面的內容複製進去,儲存即可。

channels: - https://mirrors。tuna。tsinghua。edu。cn/anaconda/cloud/msys2/ - https://mirrors。tuna。tsinghua。edu。cn/anaconda/cloud/conda-forge - https://mirrors。tuna。tsinghua。edu。cn/anaconda/pkgs/free/ - conda-forgeshow_channel_urls: truessl_verify: true

安裝jupyter lab

啟用虛擬環境:

conda activate py373env

在py373env環境下,執行命令:

conda install -c conda-forge jupyterlab

conda會自動分析你的環境,找到合適jupyterlab版本和包,下載安裝它們。

命令中的 “-c conda-forge”是指定從anaconda的官方映象下載安裝,這是推薦的方式。如果因網路的問題,直接使用:

conda install jupyterlab

它會根據分析結果和網速選擇配置檔案中列出的映象源中合適的通道下載映象。

安裝完成後,在py373env環境下,輸入:

jupyter lab

即可啟動jupyter lab。

07- 搭建一個穩健的matplotlib繪圖平臺

安裝jupyterlab的擴充套件

jupyterlab有很多擴充套件外掛可用。安裝合適的外掛,能夠使你的效率提高很多。

JupyterLab 的外掛是 npm 安裝包。所以按照 JupyterLab 的外掛,需要提前安裝好 Node。js。

安裝命令:

conda install -c conda-forge nodejs

完成之後,有兩種方式進行外掛的安裝:

透過開啟 Extension Manager 來安裝和管理外掛

透過執行命令的方式安裝。 限於篇幅就不講了。

開啟Extension Manager安裝和管理外掛

如果使用第一種方式,需要手動開啟 Extension Manager。

在jupytelab頁面,設定,高階設定 (command+逗號 ),選擇Extension Manager一欄,修改設定為 true:

07- 搭建一個穩健的matplotlib繪圖平臺

07- 搭建一個穩健的matplotlib繪圖平臺

這樣就可以使用Extension Manager來安裝jupyterlab的擴充套件外掛了。

07- 搭建一個穩健的matplotlib繪圖平臺

可以搜尋外掛,安裝外掛,對已安裝的外掛啟用、禁用、解除安裝。

安裝好jupyter toc 目錄外掛,就可以使用目錄在文件中導航了。

07- 搭建一個穩健的matplotlib繪圖平臺

是不是看起來還不錯?

一個穩健的Python,matplotlib平臺搭建好了,後面就讓我們在這個平臺上煉身手吧!

因為是草根們的草堂,所以可能有點太細了!但這會是我堅持的風格,儘可能讓各等級的草根都能看懂。

關注“Python草堂”,輕鬆閱讀下一篇:Python資料視覺化百花叢中你應該折哪朵?

你的贊和建議,甚至批評都是我前進的動力!