Python的matplotlib包

我們前面講到 Python 的兩個(gè)科學(xué)計(jì)算庫(kù),numpy 和 pandas,相信小伙伴們已經(jīng)可以熟練使用這兩個(gè)庫(kù)中的常見(jiàn)方法。華羅庚老先生曾經(jīng)說(shuō)過(guò)這樣一句話,“數(shù)形結(jié)合百般好,數(shù)形分離萬(wàn)事難”,圖形是我們科學(xué)計(jì)算的重要工具。在本篇我們將結(jié)合 numpy 和 pandas 包來(lái)給小伙伴們介紹一個(gè)非常好用的畫(huà)圖庫(kù) matplotlib,matplotlib 非常適合進(jìn)行交互式制圖,承接上兩篇,本篇繼續(xù)采用 jupyter notebook 進(jìn)行演示。

首先,導(dǎo)入 pandas、numpy 和 matplotlib 包,結(jié)合 pandas 的 Series 函數(shù)生成一個(gè)角標(biāo)從 0 到 999 的一維數(shù)組:

In [1]:  import pandas as pd
         import numpy as np
         import matplotlib.pyplot as plt
         data = pd.Series(np.random.randn(1000),index=np.arange(1000))
         data.plot()
         plt.show() 

Out [1]:  

同樣,我們也可以結(jié)合 pandas 中的 DataFrame 函數(shù)生成一個(gè)矩陣,并按照矩陣的列畫(huà)出 4 條線:

In [2]:  data = pd.DataFrame(np.random.randn(1000,4),index=np.arange(1000),columns=list('ABCD'))
         data = data.cumsum() # 累加
         data.plot()
         plt.show()

Out [2]:

接下來(lái),我們將 A 作為 x 軸,將 B 作為 y 軸,畫(huà)出散點(diǎn)圖,觀察 A 與 B 是否有關(guān)系:

In [3]:  data.plot.scatter(x='A',y='B',color='Red',label='Class 1')
         plt.show()

Out [3]:

我們也可以用最簡(jiǎn)單的方式,畫(huà)出一條折線,并修改一下線條的風(fēng)格、顏色和標(biāo)記:

In [4]:  x = [1, 2, 3, 4]
y = [1, 2, 5, 7]
plt.plot(x, y, color="blue", linestyle="--", marker="*", linewidth=1.0)
plt.show()

Out [4]:

關(guān)于上文提到的線條的風(fēng)格、顏色和標(biāo)記的參照表,我們摘抄如下:

線條風(fēng)格 實(shí)線 虛線 長(zhǎng)虛線(上方代碼中使用的) 點(diǎn)劃線 無(wú)線條(點(diǎn))
代碼 - : -- -. None(默認(rèn))
線條顏色 紅色 黃色 綠色 藍(lán)色(上方代碼中使用的) 黑色 白色 青色
代碼 r y g b k w c
線條標(biāo)記 代碼 線條標(biāo)記 代碼 線條標(biāo)記 代碼 線條標(biāo)記 代碼
圓圈 o(小寫(xiě)字母o) 點(diǎn) . 星號(hào) * 加號(hào) +
朝下三角 v(小寫(xiě)字母v) 朝上三角 ^ 朝左三角 < 朝右三角 >
大菱形 D 小菱形 d 正方形 s 五邊形 p

為了讓圖更清晰易懂,我們可以再額外加上標(biāo)題和標(biāo)簽:

In [5]:  x = np.arange(4)
         y1 = np.exp(x)
         y2 = np.exp(x*2)
         plt.plot(x, y1, color="r", linestyle="-", marker="^", linewidth=1, label="y1")
         plt.plot(x, y2, color="b", linestyle="-", marker="s", linewidth=1, label="y2")
         plt.title("Figure 1")    # 聲明標(biāo)題為 Figure 1
         plt.legend(loc='upper left', bbox_to_anchor=(0.1, 0.9))  # 在左上角 upper left 聲明標(biāo)簽
         plt.show()

Out [5]:

在某些情況下,我們也可以給圖添加網(wǎng)格和背景色,更有助于參照和對(duì)比數(shù)據(jù):

In [6]:  x = np.arange(4)
         y1 = np.exp(x)
         y2 = np.exp(x*2)
         plt.subplot(facecolor="w")  # 要先定義
         plt.plot(x, y1, color="r", linestyle="-", marker="^", linewidth=1, label="y1")
         plt.plot(x, y2, color="b", linestyle="-", marker="s", linewidth=1, label="y2")
         plt.title("Figure 1")
         plt.legend(loc='upper left', bbox_to_anchor=(0.1, 0.9))
         plt.grid(color="k",linestyle=":")
         plt.show()

Out [6]:

我們還可以更為詳細(xì)地用箭頭指向某條線,做詳細(xì)的注釋?zhuān)?/p>

In [7]:  x = np.arange(4)
         y1 = np.exp(x)
         y2 = np.exp(x*2)
         plt.subplot(facecolor="w")  # 要先定義
         plt.plot(x, y1, color="r", linestyle="-", marker="^", linewidth=1, label="y1")
         plt.plot(x, y2, color="b", linestyle="-", marker="s", linewidth=1, label="y2")
         plt.title("Figure 1")
         plt.legend(loc='upper left', bbox_to_anchor=(0.1, 0.9))
         plt.grid(color="k",linestyle=":")
         plt.annotate('y2 = np.exp(x*2)', xy=(2, 50), xytext=(1.5, 210), arrowprops=dict(facecolor='k',         headwidth=5, width=1))
         plt.show()

Out [7]:

annotate 的第一個(gè)參數(shù) 'y2 = np.exp(x*2)' 是注釋的文本信息,xy 表示要注釋的點(diǎn)的坐標(biāo),xytext 表示注釋文本的起始坐標(biāo),arrowprops 表示箭頭,facecolor 表示箭頭顏色,headwidth 表示箭頭寬度,width 表示箭身寬度。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容