Python第三方庫matplotlib(2D繪圖庫)入門與進階

1、簡介:

Matplotlib是一個Python 2D繪圖庫,它能夠在各類平臺上以各類硬拷貝格式和交互式環境生成出具備出版品質的圖形。 Matplotlib可用於Python腳本,Python和IPython shell,Jupyter筆記本,Web應用程序服務器和四個圖形用戶界面工具包html

Matplotlib試圖讓簡單的事情變得更簡單,讓沒法實現的事情變得可能實現。 只需幾行代碼便可生成繪圖,直方圖,功率譜,條形圖,錯誤圖,散點圖等。 有關示例,請參閱示例圖和縮略圖庫。shell

爲了簡單繪圖,pyplot模塊提供了相似於MATLAB的界面,特別是與IPython結合使用時。 對於高級用戶,您能夠經過面向對象的界面或MATLAB用戶熟悉的一組函數徹底控制線條樣式,字體屬性,軸屬性等。數組

2、相關文檔:

官網教程文檔:https://matplotlib.org/users/index.html
各個平臺的安裝教程:https://matplotlib.org/users/installing.html服務器

3、入門與進階案例

安裝matplotlib數據圖形化工具:dom

pip install matplotlib

一、繪製直線

  先經過numpy生成在直線 y = 5 * x + 5 上的一組數據,而後將其繪製在圖表上函數

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(1, 10, 10)
y = 5 * x + 5
plt.plot(x, y)
plt.show()

  運行上面的代碼,結果以下:工具

二、繪製折線圖

  繪製折線圖調用的matplotlib的方法同樣,只是使用numpy生成的數據不同。字體

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(1,10,10)
y = np.random.normal(1,5,10)
plt.figure()
plt.plot(x,y)
plt.show()

  因爲涉及到隨機數,每次運行的結果會不同。某次運行結果以下:spa

三、同時繪製多條樣式不一的曲線

  plot方法能夠同時繪製多條圖線,並支持不一樣的曲線採用不一樣的樣式和顏色來顯示。在下面的代碼中,plot方法的參數,3個爲一組,共3組,每一組的參數分別爲 x軸座標、y軸座標和樣式。.net

  樣式用法:

格式:

fmt = '[color][marker][line]'

樣式的第一個字母表示顏色,支持的顏色有:r(red)、g(green)、b(blue)、c(cyan)、m(megenta)、y(yellow)、w(white)、k(black)。

樣式的第二部分表示圖線的填充符號,能夠寫:--(虛線)、+(加號)、^(向上的正三角形)、s(正方形)、o(圓形)等。還能夠同時採用兩種填充方式,如‘ro--’表示用紅色的虛線及實心圓來同時進行填充。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-10, 10, 100)
plt.plot(x, 100 * x, 'r--', x, 10 * x ** 2, 'g^', x, x ** 3, 'c+')
plt.show()

運行結果以下:

四、繪製散點圖

  調用 scatter 方法能夠繪製散點圖。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(1, 10, 10)
y = np.linspace(1, 10, 10)
plt.scatter(x, y)
plt.ylabel('y value')
plt.xlabel('x scale')
plt.title('Scatter Figure')
plt.show()

運行結果以下:

能夠經過設置不一樣參數的形式得到不一樣的散點圖:

import numpy as np
import matplotlib.pyplot as plt

# 固定隨機數的seed,使其每次運行產生的結果都同樣
np.random.seed(1)
num = 100
edgeRadius = 0.5
x = np.random.rand(num)
y = np.random.rand(num)
area = (200 * np.random.rand(num))
color = np.sqrt(area)
# 建立區域,用不一樣的樣式來顯示不一樣分區的點
triangleArea = np.ma.masked_where(x <= edgeRadius, area)
diamondArea = np.ma.masked_where(x > edgeRadius, area)
plt.scatter(x, y, s=triangleArea, marker='o', c=color)
plt.scatter(x, y, s=diamondArea, marker='d', c=color)
plt.title('Random Scatter')
plt.show()

  運行結果以下:

五、繪製柱狀圖與多個圖形

  在如下示例中, figure函數指定了圖表的編號和大小比例,suptitle設置標題,subplot指定當前繪圖的位置(參數221表示2x2共四個圖形區域,最後的1表示第一個圖形區域)。後面的bar、scatter、plot和pie函數分別繪製了柱狀圖、散點圖、折(直)線圖和餅圖。

import matplotlib.pyplot as plt

labels = ['A', 'B', 'C']
values = [1, 2, 3]

plt.figure(1, figsize=(9, 6))
plt.suptitle('Multiple Plots')

plt.subplot(221)
plt.bar(labels, values)
plt.subplot(222)
plt.scatter(labels, values)
plt.subplot(223)
plt.plot(labels, values)
plt.subplot(224)
plt.pie(values, labels=labels)
plt.show()

  運行結果以下:

1- 簡單圖形繪製

根據座標點繪製:

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([3, 5, 7, 6, 2, 6, 10, 15])
plt.plot(x, y, 'r')  # 折線 1 x 2 y 3 color
plt.plot(x, y, 'g', lw=10)  # 4 line w
# 折線 餅狀 柱狀
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([13, 25, 17, 36, 21, 16, 10, 15])
plt.bar(x, y, 0.2, alpha=1, color='b')  # 5 color 4 透明度 3 0.0
plt.show()

傳入參數是numpy數組時的效果:

import numpy as np
import matplotlib.pyplot as plt

for i in range(0, 15):
    # 1 柱狀圖
    dateOne = np.zeros([2])
    dateOne[0] = i
    dateOne[1] = i
    y = np.zeros([2])
    y[0] = 10
    y[1] = 20
    plt.plot(dateOne, y, 'r', lw=8)
plt.show()

根據函數圖像繪製:

"""簡單圖形繪製"""
import numpy as np
import matplotlib.pyplot as plt

# 從-1-----1之間等間隔採66個數,也就是說所畫出來的圖形是66個點鏈接得來的
# 注意:若是點數太小的話會致使畫出來的二次函數圖像不平滑
x = np.linspace(-1, 1, 66)
# 繪製y=2x+1函數的圖像
y = 2 * x + 1
plt.plot(x, y)
plt.show()
# 繪製x^2函數的圖像
y = x ** 2
plt.plot(x, y)
plt.show()

2- figure的簡單使用

"""figure的使用"""
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 50)
# figure 1
y1 = 2 * x + 1
plt.figure()
plt.plot(x, y1)
# figure 2
y2 = x ** 2
plt.figure()
plt.plot(x, y2)
# figure 3,指定figure的編號並指定figure的大小,指定線的顏色,寬度和類型
# 一個座標軸上畫了兩個圖形
y2 = x ** 2
plt.figure(num=5, figsize=(4, 4))
plt.plot(x, y1)
plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--')
plt.show()

一共會畫出三張圖,前兩張和上面的簡單案例畫出來的兩張同樣。第三張:

3- 設置座標軸

"""設置座標軸"""
import numpy as np
import matplotlib.pyplot as plt

# 繪製普通圖像
x = np.linspace(-1, 1, 50)
y1 = 2 * x + 1
y2 = x ** 2
plt.figure()
plt.plot(x, y1)
plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--')
# 設置座標軸的取值範圍
plt.xlim((-1, 1))
plt.ylim((0, 3))
# 設置座標軸的lable
# 標籤裏面必須添加字體變量:fontproperties='SimHei',fontsize=14。否則可能會亂碼
plt.xlabel(u'這是x軸', fontproperties='SimHei', fontsize=14)
plt.ylabel(u'這是y軸', fontproperties='SimHei', fontsize=14)
# 設置x座標軸刻度,以前爲0.25,修改後爲0.5
# 也就是在座標軸上取5個點,x軸的範圍爲-1到1因此取5個點以後刻度就變爲0.5了
plt.xticks(np.linspace(-1, 1, 5))
plt.show()

上面代碼的基礎上加上下面代碼(直接加在最後一句代碼前面便可):

# 獲取當前的座標軸,gca = get current axis
ax = plt.gca()
# 設置右邊框和上邊框
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
# 設置x座標軸爲下邊框
ax.xaxis.set_ticks_position('bottom')
# 設置y座標軸爲左邊框
ax.yaxis.set_ticks_position('left')
# 設置x軸,y軸在(0,0)的位置
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))


若是在上面代碼的最後一句以前加上下面的代碼:

# 設置座標軸label的大小,背景色等信息
for label in ax.get_xticklabels() + ax.get_yticklabels():
    label.set_fontsize(12)
    label.set_bbox(dict(facecolor='green', edgecolor='None', alpha=0.7))

4- 設置legend圖例

"""設置座標軸"""
import numpy as np
import matplotlib.pyplot as plt

# 繪製普通圖像
x = np.linspace(-1, 1, 50)
y1 = 2 * x + 1
y2 = x**2

plt.figure()
plt.plot(x, y1)
plt.plot(x, y2, color = 'red', linewidth = 1.0, linestyle = '--')

# 設置座標軸的取值範圍
plt.xlim((-1, 1))
plt.ylim((0, 3))

# 設置座標軸的lable
#標籤裏面必須添加字體變量:fontproperties='SimHei',fontsize=14。否則可能會亂碼
plt.xlabel(u'這是x軸',fontproperties='SimHei',fontsize=14)
plt.ylabel(u'這是y軸',fontproperties='SimHei',fontsize=14)

# 設置x座標軸刻度, 以前爲0.25, 修改後爲0.5
#也就是在座標軸上取5個點,x軸的範圍爲-1到1因此取5個點以後刻度就變爲0.5了
plt.xticks(np.linspace(-1, 1, 5))
# 獲取當前的座標軸, gca = get current axis
ax = plt.gca()
# 設置右邊框和上邊框
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
# 設置x座標軸爲下邊框
ax.xaxis.set_ticks_position('bottom')
# 設置y座標軸爲左邊框
ax.yaxis.set_ticks_position('left')
# 設置x軸, y周在(0, 0)的位置
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))

plt.show()

5- 添加註解和繪製點以及在圖形上繪製線或點

import numpy as np
import matplotlib.pyplot as plt

# 繪製普通圖像
x = np.linspace(-3, 3, 50)
y = 2 * x + 1

plt.figure()
plt.plot(x, y)

# 將上、右邊框去掉
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# 設置x軸的位置及數據在座標軸上的位置
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
# 設置y軸的位置及數據在座標軸上的位置
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))

# 定義(x0,y0)點
x0 = 1
y0 = 2 * x0 + 1

# 繪製(x0,y0)點
plt.scatter(x0, y0, s=50, color='blue')
# 繪製虛線
plt.plot([x0, x0], [y0, 0], 'k--', lw=2.5)
# 繪製註解一
plt.annotate(r'$2 * x + 1 = %s$' % y0, xy=(x0, y0), xycoords='data', xytext=(+30, -30), textcoords='offset points',
             fontsize=16, arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad = .2'))

# 繪製註解二
plt.text(-3, 3, r'$Test\ text. \mu \sigma_i, \alpha_i$', fontdict={'size': 16, 'color': 'red'})
plt.show()

6- 繪製散點圖

 

 

 

 

 

 

 

https://blog.csdn.net/qq_34337272/article/details/79555544

未完待續

相關文章
相關標籤/搜索