python3(三)Matplotlib
數據展示Matplotlib
目錄
- 1 Matplotlib庫
- 1.1 Matplotlib的介紹
- 1.2 pyplot的plot()函數
- 1.3 pyplot的中文顯示
- 1.4 pyplot的文本顯示
- 1.5 繪制子繪圖區域
- 2 基礎繪圖函數
- 2.1 基礎圖標函數概述
- 2.2 餅圖的繪制
- 2.3 直方圖的繪制
- 2.4 極坐標的繪制
- 2.5 散點圖的繪制
- 3 引力波的繪制
- 3.1 介紹
- 3.2 編寫
?
正文
主要內容是Matplotlib庫的基本使用和方法
回到頂部1 Matplotlib庫
1.1 Matplotlib的介紹
Python優秀的數據可視化第三方庫
數據可視化就是將數據以特定的圖形圖像的方式展示出來, 使數據更加的直觀明了
范例網站
Matplotlib庫是由各種可視化類構成, 內部結構復雜
為了簡潔使用, 可以使用matplotlib.pyplot這個繪制各類可視化圖形的命令子庫, 類似于快捷方式的庫來簡化操作
導入
import matplotlib.pyplot as plt同樣plt也是約定俗成的別名
基本使用
使用plt.plot(數組)傳入數組, 如果只有一個一維數組, 那么數組的值會指定給Y軸, X軸為他們的索引值
使用plt.ylabel(名字)設置Y軸的名字
使用plt.savefig(文件名, dpi=dpi的大小)保存圖像為圖像文件, dpi一般設置為600, 默認是PNG格式保存
使用plt.show()在IPython中展示生成的圖形
使用plt.axis([x1, x2, y1, y2])可以設置X軸的起點和終點, Y軸的起點和終點
相關代碼如下
?| 1234567 | import matplotlib.pyplot as pltplt.plot([0, 2, 4, 6, 8], [3, 1, 4, 5, 2])plt.ylabel("Y")plt.axis([-1, 10, 0, 6])plt.savefig("test", dpi=600)plt.show() |
相關結果如下
pyplot的繪圖區域
使用plt.subplot(nrows, ncols, plot_number)在全局繪圖區域中創建一個分區體系, 然后指定在哪個子區域里繪圖
其中nrows表示橫向劃分多少的區域, ncols表示縱向劃分多少的區域, 子區域的標號是從1開始的, 從上到下從左到右依次排序
另外在數量小的時候, 這三個參數之間的逗號可以去掉
具體代碼如下
?| 1234567891011121314 | import numpy as npimport matplotlib.pyplot as pltdef f(t):????return np.exp(-t) * np.cos(2*np.pi*t)a = np.arange(0.0, 5.0, 0.02)plt.subplot(211)plt.plot(a, f(a))plt.subplot(2,1,2)plt.plot(a, np.cos(2*np.pi*a), 'r--')plt.show() |
具體效果如下
1.2 pyplot的plot()函數
plot()的具體形式如下:
plt.plot(x, y, format_string, **kwargs)x: X軸的數據, 可以是列表或者數組, 可選項, 但是當繪制多條曲線的時候, 各條曲線的x不能省略
y:?Y軸的數據, 列表或數組, 必填項
format_string: 控制曲線的格式的字符串, 可選項
**kwargs: 第二組或更多的 (x, y, format_string)
繪制多條圖像
?| 123456 | import numpy as npimport matplotlib.pyplot as plta = np.arange(10)plt.plot(a, 1.5*a, a, 2.5*a, a, 3.6*a, a, 4.5*a)plt.show() |
結果為

曲線的格式控制
format_string由制顏色字符, 風格字符和標記字符組成
具體有
更改之前的風格代碼
?| 123456 | import numpy as npimport matplotlib.pyplot as plta = np.arange(10)plt.plot(a, 1.5*a, 'go-', a, 2.5*a, 'rx', a, 3.6*a, '*', a, 4.5*a, 'b-.')plt.show() |
效果為
關于**kwargs
可以添加更多更詳細的參數
color: 控制顏色, color=”green”
linestyle: 線條風格, linestyle=”dashed”
marker: 標記風格, marker=”o”, 這三個和前面的format是對應的, 此外還有
markerfacecolor: 標記的顏色,?markerfacecolor=”blue”
markersize: 標記的尺寸, markersize=20
…
1.3 pyplot的中文顯示
默認情況下, pyplot并不支持中文字符, 在最開始的折線圖中, 如果設置ylabel()為中文, 則在圖像中不能正常顯示
要顯示中文有種辦法
1) 使用rcParams
設置其font.family為中文字符
具體代碼如下
?| 123456789 | import matplotlib.pyplot as pltimport matplotlibmatplotlib.rcParams['font.family'] = 'SimHei'plt.plot([0, 2, 4, 6, 8], [3, 1, 4, 5, 2])plt.ylabel("Y軸坐標")plt.axis([-1, 10, 0, 6])plt.savefig("test", dpi=600)plt.show() |
具體效果
其中SimHei是黑體
具體更多參數
相應的中文字體種類
參考實例
?| 123456789101112131415 | import numpy as npimport matplotlib.pyplot as pltimport matplotlibmatplotlib.rcParams['font.family'] = 'FangSong'matplotlib.rcParams['font.size'] = 20???????????????????a = np.arange(0.0, 5.0, 0.02)plt.xlabel("X軸: 時間")plt.ylabel("Y軸: 振幅")plt.plot(a, np.cos(2*np.pi*a)+1, 'r--')plt.savefig('test2', dpi=600)plt.show() |
效果為
2) 增加 fontproperties屬性
在上述的例子中, 可以在xlabel中增加參數fontproperties來限定顯示的字體, 用此來解決中文顯示
具體代碼如下
?| 12345678910 | import numpy as npimport matplotlib.pyplot as plt???????????????????a = np.arange(0.0, 5.0, 0.02)plt.xlabel("X軸: 時間", fontproperties="FangSong", fontsize=20)plt.ylabel("Y軸: 振幅", fontproperties="FangSong", fontsize=20)plt.plot(a, np.cos(2*np.pi*a)+1, 'r--')plt.show() |
兩種方法的區別就是第一種是全局修改, 第二種是指定修改
建議使用第二種方法, 但是為了統一可以使用方法一
1.4 pyplot的文本顯示
常見的文本顯示函數是
其中title會在整個圖形的正中上放寫上文字
具體實例如下
?| 12345678910111213141516 | import numpy as npimport matplotlib.pyplot as plta = np.arange(0.0, 5.0, 0.02)plt.plot(a, np.cos(2*np.pi*a)+2, 'r--')plt.xlabel("X軸: 時間", fontproperties="FangSong", fontsize=15, color='green')plt.ylabel("Y軸: 振幅", fontproperties="FangSong", fontsize=15)plt.title(r'正玄波實例$y=cos(2\pi x)$', fontproperties="SimHei", fontsize=25)plt.text(2, 3, r'$\mu=100$', fontsize=15)plt.axis([-1, 6, 0, 4])plt.grid(True)plt.savefig('test3', dpi=600)plt.show() |
效果為
其中$$這種是LeTeX的語法
title()第一個參數表示橫坐標的位置, 第二個參數是縱坐標的位置
grid(True)增加網格顯示
關于annotate函數
plt.annotate(s, xy=arrow_crd, xytext=text_crd, arrowprops=dict)s: 要注解的字符串
xy: 箭頭所在的位置, 元組類型
xytext: 文本顯示的位置, 元組類型
arrowprops: 定義了整個箭頭顯示的屬性, dict()
facecolor=”顏色” 箭頭的顏色
shrink 起始會按照指定的比例縮進, 這樣箭頭與兩邊的內容會留有一下空白
width 箭頭的寬度
具體代碼如下
?| 123456789101112131415161718 | import numpy as npimport matplotlib.pyplot as plta = np.arange(0.0, 5.0, 0.02)plt.plot(a, np.cos(2*np.pi*a)+2, 'r--')plt.xlabel("X軸: 時間", fontproperties="FangSong", fontsize=15, color='green')plt.ylabel("Y軸: 振幅", fontproperties="FangSong", fontsize=15)plt.title(r'正玄波實例$y=cos(2\pi x)$', fontproperties="SimHei", fontsize=25)plt.annotate(r"$\mu=100$", xy=(2, 3), xytext=(3, 3.5), arrowprops=dict(????????facecolor="black", shrink=0.1, width=2????????))plt.axis([-1, 6, 0, 4])plt.grid(True)plt.savefig('test3', dpi=600)plt.show() |
效果為
1.5 繪制子繪圖區域
使用subplot可以進行簡單的分區, 具體實現復雜的分區需要另一個函數
plt.subplot2grid()?
plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)基本使用方法是: 先將整個布局進行均分, 然后指定一塊小區域作為起始點, 然后使用colspan和rowspan來在橫向和縱向上增加小塊的個數
GridSpec: 整體劃分, 元組類型
CurSpec: 指定起始小塊位置, 元組類型
colspan: 橫向小塊數量
rawspan: 縱向小塊數量
選擇實例:
使用GridSpec類可以簡化操作
導入
import matplotlib.gridspec as gridspec生成gridspec對象
gs = gridspec.GridSpec(3, 3)使用切片的方式來獲取
具體如下
回到頂部
2 基礎繪圖函數
2.1 基礎圖標函數概述
使用繪制函數的基本思想:
圖像的種類是繁多的, 我們應該專注于選擇與更合適的圖表來結合數據, 而不是學習使用所有的函數
2.2 餅圖的繪制
常用于百分比的內容, 尤其是需要對比組成部分, 占有比例的時候, 更是直觀
生成餅圖的函數pie
plt.pie(sizes, explode=(), labels=(), autopct="", shadow=False, startangle=90)sizes: 元組類型, 各個成分的占比
explode: 元組類型, 優先級, 優先級高的會突出來, 為0是正常組成部分
labels: 各個部分對應的標簽名字, 要和sizes對應上
autopct: 顯示比例的格式
shadow: 是否有陰影
startangle: 起始繪圖時候的角度, 和極坐標角度類似
具體實例
?| 12345678910 | import matplotlib.pyplot as pltlabels = "Python", "Java", "C/C++", "C#", "Javascript", "Other"sizes = [31.2, 19.6, 15.9, 7.4, 3.6, 22.3]explode = [0.1, 0, 0 ,0 , 0, 0]plt.pie(sizes, explode=explode, labels=labels, autopct="%.2f%%", shadow=True, startangle=90)plt.title(r'2015最受歡迎的編程語言', fontproperties="SimHei", fontsize=15)plt.show() |
具體效果
如果希望圖形不是側著的, 可以使用
plt.axis('equal')2.3 直方圖的繪制
使用hist畫直方圖
hist(x, bins, normed, histtype, facecolor, alpha)x: 處理的數據
bins: 生成的圖形中, 直方(在X軸上直立的長條矩形)的個數
具體情況是: 找到x中的最小值和最大值, 然后在這個值域中均分bins份, 每一份都是一個小的值域, x中的元素就會對應的落在相應的值域中, Y軸的值就是在這個值域的數量(normed=False時)
normed: 為True會歸一化成概率, 為False時Y軸顯示的是數量, 默認為False
?具體代碼如下
?| 12345678910111213 | import numpy as npimport matplotlib.pylab as pltnp.random.seed(0)mu, sigma = 100, 20a = np.random.normal(mu, sigma, size=100)plt.hist(a, 30, normed=False, histtype='stepfilled', facecolor='b',?????????alpha=0.75)plt.title("Histogram")plt.show() |
效果如下
2.4 極坐標的繪制
繪制極坐標用
ax = plt.subplot(111, projection='polar') 通過生成一個對象ax, 來繪制極坐標的圖像
通過ax.bar()來設置圖像
bar(left, height, width=0.8, bottom=None, **kwargs) left: 繪制極坐標時的開始位置, 圖中的某個位置
height: 中心點向邊界延伸的長度
width: 旋轉的寬度
具體代碼如下
?| 12345678910111213141516 | import matplotlib.pylab as pltimport numpy as npN = 20theta = np.linspace(0.0, 2*np.pi, N, endpoint=False)radii = 10*np.random.rand(N)width = np.pi/4*np.random.rand(N)ax = plt.subplot(111, projection='polar')bars = ax.bar(theta, radii, width=width, bottom=0.0)for r, bar in zip(radii, bars):????bar.set_facecolor(plt.cm.viridis(r/10.))????bar.set_alpha(0.5)plt.show() |
具體效果為
2.5 散點圖的繪制
具體代碼
?| 12345678 | import matplotlib.pylab as pltimport numpy as npfig, ax = plt.subplots()ax.plot(10*np.random.random(100), 10*np.random.randn(100), 'o')ax.set_title("simple Scatter")plt.show() |
具體效果
回到頂部
3 引力波的繪制
3.1 介紹
引力波是因為時空彎曲對外以輻射形式傳播的能量
愛因斯坦的廣義相對論預言了引力波的存在
3.2 編寫
產生時間序列
讀取應變數據
繪制H1 Strain
顯示并保存圖像
分類: 數據分析總結
以上是生活随笔為你收集整理的python3(三)Matplotlib的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NASA 成功测试超音速旋转爆震火箭发动
- 下一篇: 前长城汽车总经理王凤英加盟小鹏汽车 何小