python基於Matplotlib模塊的繪圖2

上一篇博客簡單介紹了一些如何進行繪圖,和如何設置各種圖形格式,這篇博客主要講解一下一些細節部分以及具體的實例操作。

實例1

有時我們需要繪製一個圖形,需要指定它的大小並且將其輸出保存下來,這個時候我們需要用到plt.figure函數和plt.savefig()函數,這兩個函數前一個是生成一個指定大小的figure,單位是英寸,如果我們不生成,後面也會自動創建。plt.savefig()函數則是保存生成的圖像,但在notebook環境中要保存的時候注意不要用show(),否則會阻滯程序運行。下面我們看一個例子。

%matplotlib inline
from matplotlib import pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']# 支持中文顯示
plt.rcParams['axes.unicode_minus'] = False #用來正常正負符號
x =np.linspace(0,10,1000)
y =np.sin(x)
z =np.cos(x**2)
plt.figure(figsize =(8,4))#設置圖片大小。8*4大小
plt.plot(x,y,label='$sin(x)$',color="red",linewidth =2)
plt.plot(x,z,"b--",label="$cos(x^2)")
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.title("Pyplot Example")
plt.ylim(-1.2,1.2)
plt.legend()
plt.savefig("test.png",dpi =120)#dpi指定圖片的分辨率爲120,因此輸出的圖片像素大小爲8*120

最後繪製的圖形如下:
在這裏插入圖片描述

繪製多子圖

在一般情況下,我們繪圖大多隻需要繪製一個圖就行啦,但有的時候希望一個figure可以包含多個子圖,這些子圖也稱作Axes對象(一個繪圖區域),可以用subplot()快速繪製包括多個子圖的圖表。
函數形式是這樣:

subplot(nrows, ncols, index, **kwargs)
subplot(pos, **kwargs)
subplot(ax)

一個3位整數或三個獨立的整數,用於描述子圖的位置。如果三個整數按順序爲nrows,ncols和index,則子圖將採用nrows 行和ncols列的網格上的索引位置。index從左上角的1​​開始,向右增加。

pos是一個三位整數,其中第一個數字是行數,第二個是列數,第三個是子圖的索引。即fig.add_subplot(235)與fig.add_subplot(2,3,5)相同。請注意,所有整數必須小於10才能使此表單生效。
下面看個例子

for idx,color in enumerate("rgbyck"):
    plt.subplot(321+idx, facecolor =color)#321指的是生成一個3行兩列,就是六個子圖,最左上角是1

在這裏插入圖片描述
如果希望子圖佔據整行或者整列,我們可以這樣調用subplot()
在這裏插入圖片描述
通過這個簡單的圖,我們也大致瞭解了一下如何利用subplot()繪製多個子圖,下面我們還是看一個多個子圖的實例。

plt.figure(1)#創建圖表1
plt.figure(2)#創建圖表2
ax1 = plt.subplot(121)#在圖表2中創建子圖1
ax2 = plt.subplot(122)#在圖表2中創建子圖2
x=np.linspace(0,3,100)
for i in range(5):
    plt.figure(1)#選擇圖表1
    plt.plot(x,np.exp(i*x/3))
    plt.sca(ax1)#選擇圖表2中的子圖1
    plt.plot(x,np.sin(i*x))
    plt.sca(ax2)#選擇圖表2中的子圖2
    plt.plot(x,np.cos(i*x))

在這裏插入圖片描述
通過這個實例我們基本能夠在同時生成多個子圖,並且對其進行繪製。做到這裏,我們基本實現了簡單圖形的繪製,以及在圖上顯示各種操作,那麼我們平常還有一種操作也就是繪製分段函數,那麼該怎麼做,我們下面具體操作一下。

分段函數繪製

假設有一個函數是這樣的:
在這裏插入圖片描述
我們要繪製0-100中100個點的圖像,那麼該怎麼做?
我們可以將這個分段函數轉化爲一個總函數(但結果還是一樣),再將點帶入,繪製:

x=np.linspace(0,100,100)
a = [1 if (i<30) else 0 for i in x]
b = [1 if (i>=30 and i<50) else 0 for i in x]
c = [1 if (i>=50) else 0 for i in x]
y = np.cos(x)* a + x * b + np.sin(x)*c
plt.plot(x,y)
plt.show()

在這裏插入圖片描述
到這裏我們基礎圖像基本可以告一個段落了,下面是我隨便繪製的一個案列,大家可以學習參考一下。下次博客着重講各種圖像的繪製。

x = np.linspace(-10,10,50)
y = np.cos(x)
plt.plot(x,y,linestyle=':',marker='o',markerfacecolor = 'red',color ='b',markersize = 10)
plt.title('My Matplotlib pictures')
plt.xlabel('x-axis')
plt.ylabel('y-axis')
plt.annotate("(-5,0)",xy=(-5,0),xytext=(-2.5,0.25),arrowprops=dict(facecolor='green',headwidth = 20, headlength = 20))
plt.annotate("(0,0)",xy=(0,0))
plt.grid()
plt.show()

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章