日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

零基礎(chǔ)用 Python 畫圖表,讓你的論文更美觀

 學(xué)習(xí)雪雪 2018-02-12

曾經(jīng)我在高中的時(shí)候有一篇數(shù)學(xué)探索的小作業(yè),其中我需要畫出一張比較復(fù)雜的函數(shù)圖。由于 X 和 Y 的坐標(biāo)軸標(biāo)簽都需要一定的自定義,所以微軟 Office 自帶的畫圖工具自然無(wú)法滿足我的要求。經(jīng)過(guò)一段時(shí)間的尋找,我終于找到了最適合自己的工具:那就是用 Python。

用 matplotlib 可以畫出這樣的圖片,這張圖的源代碼請(qǐng)參考文末
用 matplotlib 可以畫出這樣的圖片,這張圖的源代碼請(qǐng)參考文末

其實(shí),「用 Python」這個(gè)說(shuō)法比較籠統(tǒng),我們?cè)谶@篇文章其實(shí)是要學(xué)習(xí) Python 的一個(gè)模組:matplotlib 的簡(jiǎn)單使用方法。

使用 matplotlib 這個(gè)模組,我們就可以擺脫微軟 Office 的傳統(tǒng)畫圖方法。以此帶來(lái)的新畫圖方法就是通過(guò)數(shù)學(xué)式的方法來(lái)畫圖。更加有用的是,我們可以方便地自定義圖表,畫出更好看、更美觀的效果。

誠(chéng)然,使用 matplotlib 畫圖離不開使用編程語(yǔ)言。但是請(qǐng)務(wù)必不要害怕接觸編程:畫出一個(gè)簡(jiǎn)單的圖只需要幾行非常簡(jiǎn)單并且易于理解的代碼。畫出復(fù)雜一些的圖片也會(huì)有一些常識(shí)和修正,不過(guò)請(qǐng)放心,本篇文章將不會(huì)涉及任何高級(jí)編程知識(shí),零基礎(chǔ)也能上手。

安裝必要的軟件

本篇文章中,我們涉及到的軟件只有一個(gè)免費(fèi)軟件,那就是 Anaconda。你可以在 這個(gè)網(wǎng)站 上下載到 Anaconda,軟件完全免費(fèi),并支持 Windows 和 macOS。如果你有安裝 Visual Studio,你可以直接在 Visual Studio 內(nèi)下載并安裝 Anaconda。通常我們會(huì)選擇 Python 3.6 版本。

安裝完成之后,你會(huì)在開始菜單中的 Anaconda 文件夾中看到 Spyder 這個(gè)應(yīng)用,我們打開這個(gè)應(yīng)用,迎面而來(lái)的就是一個(gè)代碼編輯器,我們就要在這個(gè)代碼編輯器內(nèi)寫出所有畫圖的代碼。

編寫代碼:初步了解 matplotlib

打開 Spyder,我們就會(huì)看到屏幕的左邊是代碼編輯區(qū)域,屏幕的左下角則是輸出區(qū)域。在這個(gè)步驟,我們將主要操作屏幕的左邊,也就是代碼編輯區(qū)域,來(lái)輸入我們畫圖用到的代碼。

導(dǎo)入模組

編輯代碼的第一步,就是告訴我們要寫的程序要包括什么模組。簡(jiǎn)單來(lái)說(shuō)我們就是要告訴程序,我們要在程序內(nèi)包括什么功能。首先我們輸入以下代碼:

import matplotlib.pyplot as plt import numpy as np

這兩行代碼中, import 的意思就是,我們要導(dǎo)入兩個(gè)模組,一個(gè)叫做 matplotlib.pyplot,還有一個(gè)叫做 numpy。matplotlib.pyplot 主要負(fù)責(zé)畫圖功能。numpy 則負(fù)責(zé)高級(jí)數(shù)學(xué)的功能,比如解釋正弦、余弦函數(shù),Python 本身是不能通過(guò)一句簡(jiǎn)單的函數(shù)來(lái)計(jì)算某個(gè)角度的正弦的,需要外部庫(kù)來(lái)支持。

在這里,as 的意思是定義一個(gè)別名。在之后的程序中,當(dāng)我們需要召喚 matplotlib.pyplot 這個(gè)程序的時(shí)候,我們只需要打出 plt 即可,而無(wú)需再打出原來(lái)這么一長(zhǎng)串。同理,numpy 在這里也被取了 np 的別名。

開始編寫

在以上我們做完程序的鋪墊之后,我們就可以正式開始編寫畫圖的代碼了。首先,我們要定義 X 的域,添加以下代碼表示:

x = np.linspace(-1, 1, 256)

在這行代碼中,我們定義了 X 軸的最小值和最大值,括號(hào)中第一個(gè)數(shù)字 -1 是 X 軸的最小值,括號(hào)中的第二個(gè)數(shù)字 1 則是 X 的最大值。256 則是取樣密度,這個(gè)參數(shù)不用改變。

目前這部分很簡(jiǎn)單,但是 matplotlib 強(qiáng)大的地方在于可以利用其他的常量來(lái)定義邊界,請(qǐng)看下面的例子:

x = np.linspace(-np.pi, np.pi, 256)

在這個(gè)例子中,這行代碼會(huì)替換上面那行代碼,我們利用了 numpy 模組,使 X 軸的最小值變?yōu)?nbsp;,而最大值變成了 π,從而允許我們更直觀地畫出三角函數(shù)的圖像。

接下來(lái)我們開始定義 Y 軸,假如我們想畫出 sin(x) 的圖像,我們只需要接著輸入:

y = np.sin(x)

在這里,sin 的前面被加了 np.,是因?yàn)?Python 本身不支持正弦函數(shù)運(yùn)算,所以需要注明使用 np 模組才能使用。

又或者,我們想畫出平方的圖像,我們可以替換上面的代碼為:

y = x**2

Python 的四則運(yùn)算符分別為  、-、*、/。平方的運(yùn)算符則為 **,這些運(yùn)算符是 Python 本身支持的,不需要像前面一樣注明使用 np 模組。關(guān)于其他需要使用到 numpy 的運(yùn)算,比如 log、余弦、e 等等,敬請(qǐng)參考 numpy 官方文檔。

X 和 Y 的定義完成了,接下來(lái),我們開始指令 matplotlib 來(lái)畫出圖像。

畫出圖像

這步非常簡(jiǎn)單,只需要在代碼的最后添加一行代碼:

plt.plot(x, y)

最后,點(diǎn)擊工具欄上的綠色箭頭,就可以運(yùn)行這段代碼。運(yùn)行完畢之后,你就可以在右下角的窗口上看到你畫出的圖像。右鍵點(diǎn)擊圖像,即可保存。

進(jìn)階使用:了解 matplotlib 的強(qiáng)大

自定義坐標(biāo)軸

現(xiàn)在我們來(lái)開始介紹 matplotlib 最強(qiáng)大的地方:自定義。為什么我們要使用 matplotlib 來(lái)畫圖?就是為了能夠自定義圖表中的一些元素。在上邊的例子中,我們使用了 np.sin() 函數(shù)來(lái)畫出正弦圖像。但是,matplotlib 默認(rèn)為我們使用了數(shù)字作為 X 軸的坐標(biāo)軸,這顯然不是最理想的標(biāo)記方法,那么我們接下來(lái)學(xué)習(xí)怎樣自定義 X 軸坐標(biāo)軸。在 plt.plot(x, y) 前加入以下代碼。

plt.xticks([-np.pi, 0, np.pi], ['-π', '0', 'π'])

對(duì)于這行代碼,可能有一些人會(huì)看不明白,別著急,我們一一解釋。

首先我們看第一個(gè)方括號(hào)內(nèi)的數(shù)字 [-np.pi, 0, np.pi],這三個(gè)數(shù)字表示你想在坐標(biāo)軸內(nèi)顯示的三個(gè)數(shù)字的真實(shí)數(shù)值,你可以改變這些數(shù)字,但是每個(gè)數(shù)字必須要以逗號(hào)分開,依順序填寫,在這里我們使用了 -π、0 和 π。第二個(gè)方括號(hào)中,['-π', '0', 'π'],這些值表示了真實(shí)顯示在圖片上的坐標(biāo)軸文字,這些文字也必須要和第一個(gè)方括號(hào)內(nèi)的數(shù)字相對(duì)應(yīng),并且每個(gè)值都要在引號(hào)內(nèi)填寫(單雙引號(hào)均可)。

如果你不需要用文字表達(dá)而僅僅需要使用簡(jiǎn)單的數(shù)字,則不需要填寫第二個(gè)方括號(hào)。這里我們用 Y 軸舉例:

plt.yticks([-1, -0.5, 0, 0.5, 1])

這樣,Y 軸就只會(huì)顯示方括號(hào)內(nèi)的五個(gè)數(shù)字。

添加標(biāo)題

添加標(biāo)題非常簡(jiǎn)單,只需要加入一行代碼,確保代碼在 import 語(yǔ)句以下,plt.plot(x, y) 以上:

plt.title('在這里添加你的標(biāo)題')

添加坐標(biāo)軸文本

添加坐標(biāo)軸文本同樣也非常簡(jiǎn)單,加入以下代碼,確保代碼在 import 語(yǔ)句以下,plt.plot(x, y) 以上:

plt.xlabel('X 坐標(biāo)軸文本') plt.ylabel('Y 坐標(biāo)軸文本')

畫出多個(gè)函數(shù)

如果需要畫出多個(gè)函數(shù),只需要再定義一個(gè)方程,并添加一行 plt.plot 命令即可。復(fù)制以下代碼到你的編輯器:

import matplotlib.pyplot as plt import numpy as np x = np.linspace(-np.pi, np.pi, 256) y1 = np.sin(x) y2 = x**2 plt.plot(x, y1) plt.plot(x, y2)

設(shè)置圖像風(fēng)格

matplotlib 還有一個(gè)最強(qiáng)大的功能是自定義圖像風(fēng)格:想畫出虛線、虛點(diǎn)線、點(diǎn)線,都沒問題。我們可以將上面的 plt.plot(x, y1) 和 plt.plot(x, y2) 替換為如下代碼:

plt.plot(x, y1, 'b--') plt.plot(x, y2, 'r-.')

在這兩行代碼中,我們可以看到 plt.plot 多了第三個(gè)參數(shù),第三個(gè)參數(shù)定義了圖像的風(fēng)格和顏色,如下圖所示。

上圖中我們可以看到,正弦函數(shù)是藍(lán)色,X 平方函數(shù)則是紅色,這些顏色的配置歸功于第三個(gè)參數(shù)中的第一個(gè)字符:b 和 r,分別表示 blue 和 red。接下來(lái)的字符則表示線條的風(fēng)格,-- 和 -. 分別表示虛線和虛點(diǎn)線。需要注意的是,這里沒有嚴(yán)格的順序,所以即使你寫成 --b,也是沒有問題的。

matplotlib 中還有更多的線條風(fēng)格和顏色,你可以在這個(gè) 官方文檔 中查看。

設(shè)置圖像格式以及大小

可能大家已經(jīng)注意到了:上面我們輸出的函數(shù)圖像,其實(shí)是非常不清晰的。那么現(xiàn)在我們來(lái)調(diào)整圖像。確保以下代碼位置在 import 語(yǔ)句下第一行。

plt.figure(figsize=(3, 5), dpi=300)

大家應(yīng)該已經(jīng)注意到了,plt.figure() 內(nèi)多了兩個(gè)參數(shù)。其中,figsize 的值定義了圖像的大小,第一個(gè)數(shù)字代表寬度為三英尺,第二個(gè)數(shù)字代表寬度為五英尺。dpi 的值則很明顯,代表了圖像的 DPI。這些值您可以根據(jù)自己的實(shí)際需求進(jìn)行修改。

后記:為什么要用 matplotlib?

看完這篇文章,可能會(huì)有讀者問:「為什么我要費(fèi)勁去寫代碼然后畫出這些不起眼的圖呢?」。其實(shí)說(shuō)到底,這是「學(xué)習(xí)成本」的問題。對(duì)我個(gè)人來(lái)說(shuō),花這些時(shí)間學(xué)習(xí) matplotlib,對(duì)我的未來(lái)來(lái)說(shuō)是很有幫助的:對(duì)于即將上大學(xué)的我,必然會(huì)在未來(lái)方便我論文的撰寫以及圖表的繪制。

可能也有一些讀者會(huì)問:為什么不用其他的軟件?一方面是 matplotlib 自定義功能強(qiáng)。另一方面,雖然其他的軟件擁有圖形化的界面來(lái)簡(jiǎn)化畫圖的過(guò)程,但是我更喜歡用代碼來(lái)解決問題,算是我個(gè)人的小癖好之一。

請(qǐng)?jiān)?nbsp;這里 查看第一張圖的源代碼。

更多 matplotlib 的例子


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多