Python之Matlibplot畫圖功能演示過程
更新時間:2023年09月13日 09:04:05 作者:大魚-瓶邪
這篇文章主要介紹了Python之Matlibplot畫圖功能演示過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
Python Matlibplot畫圖功能演示
Matplotlib 是 Python 的一個繪圖庫。
它包含了大量的工具,你可以使用這些工具創(chuàng)建各種圖形,包括簡單的散點圖,正弦曲線,甚至是三維圖形。
使用之前先導(dǎo)入
#!/usr/bin/env python # encoding: utf-8 """ @Company:華中科技大學(xué)電氣學(xué)院聚變與等離子研究所 @version: V1.0 @author: Victor @contact: 1650996069@qq.com or yexin@hust.edu.cn 2018--2020 @software: PyCharm @file: PlotByMatlibplot.py @time: 2018/9/16 15:18 @Desc:講解一些matlibplot的使用 """ # 導(dǎo)入相關(guān)模塊 import matplotlib.pyplot as plt import numpy as np
##############################畫一個簡單的圖形##################################### # 首先通過 np.linspace 方式生成 x, # 它包含了 50 個元素的數(shù)組,這 50 個元素均勻的分布在 [0, 2*pi] 的區(qū)間上。然后通過 np.sin(x) 生成 y。 x = np.linspace(0,2*np.pi,50) y = np.sin(x) #有了 x 和 y 數(shù)據(jù)之后,我們通過 plt.plot(x, y) 來畫出圖形,并通過 plt.show() 來顯示。 plt.plot(x,y) plt.show()
#################################在一個畫板里繪制多個圖############################ plt.plot(x, y) plt.plot(x, y**3) plt.show() #繪制出圖形之后,我們可以自己調(diào)整更多的樣式,比如顏色、點、線。 plt.plot(x, y, 'y*-') plt.plot(x, y**3, 'm--')#設(shè)置樣式時,就是增加了一個字符串參數(shù),比如 'y*-' ,其中 y 表示黃色,* 表示 星標(biāo)的點,- 表示實線。 plt.show()
###############################設(shè)置 figure和標(biāo)題以及其他圖列,注釋屬性###################################### # 可以認(rèn)為Matplotlib繪制的圖形都在一個默認(rèn)的 figure 中,當(dāng)然了, # 你可以自己創(chuàng)建 figure,好處就是可以控制更多的參數(shù),常見的就是控制圖形的大小,這里創(chuàng)建一個 figure,設(shè)置大小為 (8, 4) plt.figure(figsize=(8, 4)) plt.plot(x, y) plt.plot(x, y*2) plt.title("cos(x) & cos(x)*2") #設(shè)置坐標(biāo)軸的刻度,范圍 plt.xlim((0, 2*np.pi)) plt.ylim((-2, 2)) plt.xlabel('X') plt.ylabel('Y')#通過 xlim 和 ylim 來設(shè)限定軸的范圍,通過 xlabel 和 ylabel 來設(shè)置軸的名稱 #我們也可以通過 xticks 和 yticks 來設(shè)置軸的刻度 #plt.xticks((0, np.pi * 0.5, np.pi, np.pi * 1.5, np.pi * 2)) ###設(shè)置 label 和 legend #設(shè)置 label 和 legend 的目的就是為了區(qū)分出每個數(shù)據(jù)對應(yīng)的圖形名稱。 plt.plot(x, y, label="cos(x)") plt.plot(x, -y*2, label="2cos(x)") # plt.legend() plt.legend(loc='best') #####添加注釋###### # 需要對特定的點進(jìn)行標(biāo)注,我們可以使用 plt.annotate 函數(shù)來實現(xiàn)。 # # 這里我們要標(biāo)注的點是 (x0, y0) = (π, 0)。 # # 我們也可以使用 plt.text 函數(shù)來添加注釋。 x0 = np.pi y0 = 0 # 畫出標(biāo)注點 plt.scatter(x0, y0, s=50) plt.annotate('sin(np.pi)=%s' % y0, xy=(np.pi, 0), xycoords='data', xytext=(+30, -30), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2")) # 對于 annotate 函數(shù)的參數(shù),做一個簡單解釋: # # 'sin(np.pi)=%s' % y0 代表標(biāo)注的內(nèi)容,可以通過字符串 %s 將 y0 的值傳入字符串; # 參數(shù) xycoords='data' 是說基于數(shù)據(jù)的值來選位置; # xytext=(+30, -30) 和 textcoords='offset points' 表示對于標(biāo)注位置的描述 和 xy 偏差值,即標(biāo)注位置是 xy 位置向右移動 30,向下移動30; # arrowprops 是對圖中箭頭類型和箭頭弧度的設(shè)置,需要用 dict 形式傳入。 plt.text(0.5, -0.25, "sin(np.pi) = 0", fontdict={'size': 18, 'color': 'r'}) plt.show()
畫子圖 ##############################畫一個簡單的圖形##################################### # 首先通過 np.linspace 方式生成 x, # 它包含了 50 個元素的數(shù)組,這 100 個元素均勻的分布在 [0, 50] 的區(qū)間上 x = np.linspace(0,50,100) ############################使用子圖############################################## # 將多張子圖展示在一起,可以使用 subplot() 實現(xiàn)。即在調(diào)用 plot() 函數(shù)之前需要先調(diào)用 subplot() 函數(shù)。 # 該函數(shù)的第一個參數(shù)代表子圖的總行數(shù),第二個參數(shù)代表子圖的總列數(shù),第三個參數(shù)代表活躍區(qū)域。 ax1 = plt.subplot(2, 2, 1) # (行,列,活躍區(qū)) plt.plot(x, np.sin(x), 'r') ax2 = plt.subplot(2, 2, 2, sharey=ax1) # 與 ax1 共享y軸 plt.plot(x, 2 * np.cos(x), 'g') ax3 = plt.subplot(2, 2, 3) plt.plot(x, np.tan(x), 'b') ax4 = plt.subplot(2, 2, 4, sharey=ax3) # 與 ax3 共享y軸 plt.plot(x, 2 * np.sin(x), 'y') #subplot(2, 2, x) 表示將圖像窗口分為 2 行 2 列。x 表示當(dāng)前子圖所在的活躍區(qū) plt.show()
############################調(diào)整子圖大小的位置################################## #上面的每個子圖的大小都是一樣的。有時候我們需要不同大小的子圖。比如將上面第一張子圖完全放置在第一行,其他的子圖都放在第二行。 ax1 = plt.subplot(2, 1, 1) # (行,列,活躍區(qū)) plt.plot(x, np.sin(x), 'r') ax2 = plt.subplot(2, 3, 4) plt.plot(x, 2 * np.sin(x), 'g') ax3 = plt.subplot(2, 3, 5, sharey=ax2) plt.plot(x, np.cos(x), 'b') ax4 = plt.subplot(2, 3, 6, sharey=ax2) plt.plot(x, 2 * np.cos(x), 'y') # plt.subplot(2, 1, 1) 將圖像窗口分為了 2 行 1 列, 當(dāng)前活躍區(qū)為 1。 # 使用 plt.subplot(2, 3, 4) 將整個圖像窗口分為 2 行 3 列, 當(dāng)前活躍區(qū)為 4。 # # 解釋下為什么活躍區(qū)為 4,因為上一步中使用 plt.subplot(2, 1, 1) 將整個圖像窗口分為 2 行 1 列, 第1個小圖占用了第1個位置, # 也就是整個第1行. 這一步中使用 plt.subplot(2, 3, 4) 將整個圖像窗口分為 2 行 3 列, # 于是整個圖像窗口的第1行就變成了3列, 也就是成了3個位置, 于是第2行的第1個位置是整個圖像窗口的第4個位置。 plt.show()
###############散點圖################### k = 500 x = np.random.rand(k) y = np.random.rand(k) size = np.random.rand(k) * 50 # 生成每個點的大小,每個數(shù)據(jù)點生成控制大小的數(shù)組 size colour = np.arctan2(x, y) # 生成每個點的顏色大小,每個數(shù)據(jù)點生成控制顏色的數(shù)組 colour plt.scatter(x, y, s=size, c=colour) plt.colorbar() # 添加顏色欄 plt.show()
#####################柱狀圖############# k = 10 x = np.arange(k) y = np.random.rand(k) plt.bar(x, y) # 畫出 x 和 y 的柱狀圖 # 增加數(shù)值 for x, y in zip(x, y): plt.text(x, y , '%.2f' % y, ha='center', va='bottom') # 通過 # plt.text # 標(biāo)注數(shù)值,設(shè)置參數(shù) # ha = 'center' # 橫向居中對齊,設(shè)置 # va = 'bottom' # 縱向底部(頂部)對齊 plt.show()
###################解決Matplotlib 中文會亂碼問題################# x = ['南京', '上海', '成都', '香港'] y = [60600, 53000, 50400, 52000] plt.plot(x, y) plt.title("中文亂碼") plt.show()
#####其實只需要配置下后臺字體即可 plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標(biāo)簽 plt.rcParams['axes.unicode_minus']=False #用來正常顯示負(fù)號 plt.title("中文正常") plt.plot(x, y) plt.show()
后續(xù)其他技巧繼續(xù)更新。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
超詳細(xì)注釋之OpenCV dlib實現(xiàn)人臉采集
這篇文章主要介紹了OpenCV dlib實現(xiàn)人臉采集,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09Python根據(jù)歐拉角求旋轉(zhuǎn)矩陣的實例
今天小編就為大家分享一篇Python根據(jù)歐拉角求旋轉(zhuǎn)矩陣的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01玩轉(zhuǎn)串口通信:利用pyserial庫,Python打開無限可能
想要學(xué)習(xí)如何使用pyserial庫實現(xiàn)串口通信嗎?這篇指南將帶你一步步了解Python中的串口通信,無論是控制硬件設(shè)備還是與外部設(shè)備進(jìn)行數(shù)據(jù)交換,pyserial庫都能為你提供便捷的解決方案,快來跟著我們的指南,輕松掌握串口通信的技巧吧!2023-11-11Python中的異常處理相關(guān)語句基礎(chǔ)學(xué)習(xí)筆記
這里我們簡單整理一下Python中的異常處理相關(guān)語句基礎(chǔ)學(xué)習(xí)筆記,包括try...except與assert等基本語句的用法講解:2016-07-07