欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用numpy+matplotlib繪圖的基本操作教程

 更新時(shí)間:2017年05月03日 11:39:27   作者:Myths  
這篇文章主要給大家介紹了利用numpy+matplotlib繪圖的基本操作,文中介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)matplotlib繪圖具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

簡(jiǎn)述

Matplotlib是一個(gè)基于python的2D畫(huà)圖庫(kù),能夠用python腳本方便的畫(huà)出折線圖,直方圖,功率譜圖,散點(diǎn)圖等常用圖表,而且語(yǔ)法簡(jiǎn)單。具體介紹見(jiàn)matplot官網(wǎng)。

Numpy(Numeric Python)是一個(gè)模仿matlab的對(duì)python數(shù)值運(yùn)算進(jìn)行的擴(kuò)展,提供了許多高級(jí)的數(shù)值編程工具,如:矩陣數(shù)據(jù)類(lèi)型、矢量處理,以及精密的運(yùn)算庫(kù)。專(zhuān)為進(jìn)行嚴(yán)格的數(shù)字處理而產(chǎn)生,而且據(jù)說(shuō)自從他出現(xiàn)了以后,NASA就把很多原來(lái)用fortran和matlab做的工作交給了numpy來(lái)做了,可見(jiàn)其強(qiáng)大。。。他的官網(wǎng)在這里,具體的資料都在里面。

安裝

$sudo apt-get install python-matplotlib
$sudo apt-get install python-numpy

使用

matplotlib可以在腳本中使用,不過(guò)如果在ipython中使用則會(huì)更加炫(直接添加–pylab參數(shù)可以免去導(dǎo)包的過(guò)程),而且能得到類(lèi)似Matlab/Mathematica一樣的功能,即時(shí)輸入,即時(shí)輸出。個(gè)人覺(jué)得說(shuō)白了他就是模仿Matlab/Mathematica的,但是的確比前者更加方便編程。

很多情況下matplot需要配合numpy包一起用,關(guān)于numpy包我不打算分開(kāi)來(lái)說(shuō),用到的時(shí)候提一下就行。有一點(diǎn)需要注意的是,numpy包通常是這樣導(dǎo)入的:

import numpy as np

會(huì)給他起一個(gè)叫np的別名,而且這幾乎已經(jīng)是約定俗成了。

在python或者ipython中輸入help(*需要查找的函數(shù)*) 就行(當(dāng)然需要先導(dǎo)入下包)。

第一個(gè)圖像

需要導(dǎo)入的包:

import numpy as np
from pylab import *

第一個(gè)函數(shù)圖像

X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)
plot(X,C)
plot(X,S)
show()

有matlab基礎(chǔ)的同學(xué)肯定不陌生。。。是的,這兩個(gè)模塊的組合幾乎就跟matlab的用法無(wú)二。。

      1、首先用np.linspace方法生成一個(gè)數(shù)組X,這個(gè)數(shù)組是從$-\pi$開(kāi)始到$\pi$的總共包含256個(gè)元素的數(shù)組,endpoint參數(shù)表示是否包含首尾端點(diǎn)(他的值是True或False,首字母要大寫(xiě)。。。。)。當(dāng)然,這個(gè)數(shù)組就是一個(gè)普通的數(shù)組了,跟其他數(shù)組沒(méi)有區(qū)別。

      2、然后用np.cos()np.sin()方法作用在X數(shù)組上,對(duì)于X中的每一個(gè)元素進(jìn)行計(jì)算,生成結(jié)果數(shù)組。(免去了迭代的過(guò)程)。

      3、接著調(diào)用pylab的plot方法,第一個(gè)參數(shù)是橫坐標(biāo)數(shù)組,第二個(gè)參數(shù)是縱坐標(biāo)數(shù)組,其他參數(shù)暫且不談。這樣他會(huì)生成一個(gè)默認(rèn)的圖表了。(不會(huì)立刻顯示)

      4、當(dāng)然,最后還要調(diào)用show方法來(lái)顯示圖表。

      5、結(jié)果:

圖表的名字叫figure1,左下面有幾個(gè)按鈕,都是很實(shí)用的東西,右下角會(huì)顯示當(dāng)前鼠標(biāo)左邊,也很方便。

圖表布局和坐標(biāo)分布

每一個(gè)圖表都是在一個(gè)figure里面,我們可以通過(guò)如下命令生成一個(gè)空的figure:

figure(figsize=(8,6), dpi=80)

這里參數(shù)的順序沒(méi)有要求,但是一定要加上參數(shù)名,因?yàn)樗歉鶕?jù)參數(shù)名來(lái)區(qū)別每個(gè)參數(shù)的,是一種跟C語(yǔ)言類(lèi)型不同的函數(shù)。figsize參數(shù)表示figure的寬高比,然后dpi表示每一份占的長(zhǎng)度,比如這里就表示圖像是640x480的。

輸出命令之后會(huì)立刻出現(xiàn)一個(gè)窗口,接下來(lái)所有的plot命令都會(huì)立刻顯示在這個(gè)窗口上而不用再輸入show命令了。

一個(gè)figure里也能顯示多個(gè)圖表,我們可以用如下函數(shù)來(lái)分割一個(gè)figure:

subplot(3,4,6)

這樣就會(huì)把當(dāng)前的figure分割成3行4列的表,而激活其中的第6張,即第2行第3張。以后的plot都是在這一個(gè)子表上生成的,如果需要更換則可以重新輸入subplot命令來(lái)確定其新的位置。

除此之外,如果我們對(duì)圖表顯示的范圍不滿意,我們還可以直接調(diào)整圖表的坐標(biāo)范圍:

xlim(-4.0,4.0)
ylim(-1.0,1.0)

這就表示x軸的范圍設(shè)置在-4到4,y軸的范圍設(shè)置在-1到1。當(dāng)然,如果是想相對(duì)的進(jìn)行修改我們可以利用下numpy數(shù)組的min和max方法。比如X.min() 這樣的東西。

如果對(duì)坐標(biāo)顯示的密度啊什么的不滿意,我們也可以調(diào)節(jié)他的標(biāo)注點(diǎn):

xticks(np.linspace(-4,4,9,endpoint=True))
yticks(np.linspace(-1,1,5,endpoint=True))

對(duì)于xticks和yticks,我們實(shí)際上可以傳入任意的數(shù)組,這里不過(guò)是為了方便而用numpy快速生成的等差數(shù)列。

當(dāng)然,我們也可以給標(biāo)注點(diǎn)進(jìn)行任意的命名,像下面這樣:

xticks([1,2,3,4,5],['one','two','three','four','five'])

效果也很好想象,就不貼圖了。需要注意的是這里也可以支持LaTex語(yǔ)法,將LaTex引用在兩個(gè)$之間就可以了。(關(guān)于LaTex)

這里也有個(gè)小竅門(mén),就是如果想不顯示標(biāo)注的話,我們就可以直接給xticks賦一個(gè)空的數(shù)組。

更改色彩和線寬

我們可以在畫(huà)plot的時(shí)候用如下方法指定他的顏色和線寬:

plot(X, C, color='#cadae3', linestyle='-',linewidth=1.3, marker='o', markerfacecolor='blue', markersize=12,)

同樣,這里參數(shù)的順序不重要,名字才重要。

color參數(shù)可以指定RGB的色相,也可以用一些默認(rèn)的名字,比如red blue之類(lèi)的。

linestyle參數(shù)則指定了線的樣式,具體參照以下樣式:

參數(shù)樣式
‘-‘實(shí)線
‘–’虛線
‘-.’線-點(diǎn)
‘:’點(diǎn)虛線

linewidth參數(shù)指定折線的寬度,是個(gè)浮點(diǎn)數(shù)。

marker參數(shù)指定散點(diǎn)的樣式,具體參照以下樣式:

參數(shù)樣式
‘.’實(shí)心點(diǎn)
‘o’圓圈
‘,’一個(gè)像素點(diǎn)
‘x’叉號(hào)
‘+’十字
‘*’星號(hào)
‘^’ ‘v’ ‘<’ ‘>’三角形(上下左右)
‘1’ ‘2’ ‘3’ ‘4’三叉號(hào)(上下左右)

markerfacecolor參數(shù)指定marker的顏色

markersize參數(shù)指定marker的大小

這樣就基本上能夠自定義任何的折線圖、散點(diǎn)圖的樣式了。

移動(dòng)軸線

這段有點(diǎn)小復(fù)雜,暫時(shí)不想具體了解奇奇怪怪的函數(shù)調(diào)用,姑且先記錄下用法和原理:

ax = gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

我們知道一張圖有上下左右四個(gè)軸線,這里我們把右邊和上邊的軸線顏色調(diào)為透明,然后把下邊設(shè)置到y(tǒng)軸數(shù)據(jù)為0的地方,把左邊設(shè)置到x軸數(shù)據(jù)為0的地方。這樣我們就能根據(jù)自己想要位置來(lái)調(diào)節(jié)軸線了。

比如下面這段官方的代碼:

# -----------------------------------------------------------------------------
# Copyright (c) 2015, Nicolas P. Rougier. All Rights Reserved.
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
# -----------------------------------------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(8,5), dpi=80)
ax = plt.subplot(111)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-")
plt.xlim(X.min()*1.1, X.max()*1.1)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
 [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
plt.ylim(C.min()*1.1,C.max()*1.1)
plt.yticks([-1, 0, +1],
 [r'$-1$', r'$0$', r'$+1$'])
plt.show()

顯示的結(jié)果就是:

圖例和注解

圖例十分簡(jiǎn)單,下述代碼就可以解決:

plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
legend(loc='upper left')

在plot里指定label屬性就好了,最后調(diào)用下legend函數(shù)來(lái)確定圖例的位置,一般就是’upper left’就好了。

注解就有點(diǎn)麻煩了,要用到annotate命令,挺復(fù)雜的,暫時(shí)是在不想看,姑且貼一段完整的代碼和效果圖吧:

# -----------------------------------------------------------------------------
# Copyright (c) 2015, Nicolas P. Rougier. All Rights Reserved.
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
# -----------------------------------------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(8,5), dpi=80)
ax = plt.subplot(111)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
plt.xlim(X.min()*1.1, X.max()*1.1)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
  [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
plt.ylim(C.min()*1.1,C.max()*1.1)
plt.yticks([-1, +1],
  [r'$-1$', r'$+1$'])
t = 2*np.pi/3
plt.plot([t,t],[0,np.cos(t)],
  color ='blue', linewidth=1.5, linestyle="--")
plt.scatter([t,],[np.cos(t),], 50, color ='blue')
plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
  xy=(t, np.sin(t)), xycoords='data',
  xytext=(+10, +30), textcoords='offset points', fontsize=16,
  arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
plt.plot([t,t],[0,np.sin(t)],
  color ='red', linewidth=1.5, linestyle="--")
plt.scatter([t,],[np.sin(t),], 50, color ='red')
plt.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
  xy=(t, np.cos(t)), xycoords='data',
  xytext=(-90, -50), textcoords='offset points', fontsize=16,
  arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
plt.legend(loc='upper left', frameon=False)
plt.savefig("../figures/exercice_9.png",dpi=72)
plt.show()

效果圖:

還是十分高能的。。。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用python能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Python 一鍵獲取百度網(wǎng)盤(pán)提取碼的方法

    Python 一鍵獲取百度網(wǎng)盤(pán)提取碼的方法

    這篇文章主要介紹了Python 一鍵獲取百度網(wǎng)盤(pán)提取碼的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 淺談Python3中print函數(shù)的換行

    淺談Python3中print函數(shù)的換行

    這篇文章主要介紹了淺談Python3中print函數(shù)的換行,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • python套接字流重定向?qū)嵗齾R總

    python套接字流重定向?qū)嵗齾R總

    套接字是一種具有之前所說(shuō)的“通信端點(diǎn)”概念的計(jì)算網(wǎng)絡(luò)數(shù)據(jù)結(jié)構(gòu)。相當(dāng)于電話插口,沒(méi)它無(wú)法通信,這個(gè)比喻非常形象。今天我們就來(lái)匯總一下套接字流重定向的實(shí)例
    2016-03-03
  • python爬蟲(chóng)通過(guò)增加多線程獲取數(shù)據(jù)

    python爬蟲(chóng)通過(guò)增加多線程獲取數(shù)據(jù)

    這篇文章主要為大家介紹了python爬蟲(chóng)通過(guò)增加多線程獲取數(shù)據(jù)實(shí)現(xiàn)過(guò)程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • python 實(shí)現(xiàn)二維列表轉(zhuǎn)置

    python 實(shí)現(xiàn)二維列表轉(zhuǎn)置

    今天小編就為大家分享一篇python 實(shí)現(xiàn)二維列表轉(zhuǎn)置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python3 如何讀取python2的npy文件

    python3 如何讀取python2的npy文件

    這篇文章主要介紹了python3 讀取python2的npy文件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Python爬取國(guó)外天氣預(yù)報(bào)網(wǎng)站的方法

    Python爬取國(guó)外天氣預(yù)報(bào)網(wǎng)站的方法

    這篇文章主要介紹了Python爬取國(guó)外天氣預(yù)報(bào)網(wǎng)站的方法,可實(shí)現(xiàn)抓取國(guó)外天氣預(yù)報(bào)信息的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • django如何設(shè)置csrf_token

    django如何設(shè)置csrf_token

    這篇文章主要介紹了django如何設(shè)置csrf_token問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python實(shí)現(xiàn)單詞翻譯功能

    Python實(shí)現(xiàn)單詞翻譯功能

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)單詞翻譯功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Python學(xué)習(xí)開(kāi)發(fā)之圖形用戶界面詳解

    Python學(xué)習(xí)開(kāi)發(fā)之圖形用戶界面詳解

    當(dāng)前流行的計(jì)算機(jī)桌面應(yīng)用程序大多數(shù)為圖形化用戶界面(Graphic User Interface,GUI),python也提供了多個(gè)圖形開(kāi)發(fā)界面的庫(kù),這篇文章主要給大家介紹了關(guān)于Python學(xué)習(xí)開(kāi)發(fā)之圖形用戶界面的相關(guān)資料,需要的朋友可以參考下
    2021-08-08

最新評(píng)論