<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文主要介紹python 資料視覺化模組 Matplotlib,並試圖對其進行一個詳盡的介紹。
通過閱讀本文,你可以:
為了將資料變成所有人都喜歡的圖形,就需要使用本文要介紹的資料視覺化庫Matplotlib。當然,還有很多類似的程式庫。但 Matplotlib 的功能更強大,而且可以很容易與Numpy、Pandas 等程式庫結合在一起使用。
Matplotlib 是一個 Python 的 2D 繪相簿。通過 Matplotlib,開發者可以僅需要幾行程式碼,便可以生成繪圖,直方圖,功率譜,條形圖,錯誤圖,散點圖等。學習 Matplotlib,可讓資料視覺化,更直觀的真實給使用者。使資料更加客觀、更具有說服力。 Matplotlib 是 Python的庫,又是開發中常用的庫。
如果使用的是 Anaconda Python 開 發 環 境 , 那 麼Matplotlib 已 經 被 集 成 進Anaconda,並不需要單獨安裝。
如果使用的是標準的Python 開發環境,可以使用下面的命令安裝 Matplotlib,語法格式如下:
pip install matplotlib
如果要了解 Matplotlib 更詳細的情況,請存取官方網站。網址如下:https://matplotlib.org。
安裝完 Matplotlib 後,可以測試一下 Matplotlib 是否安裝成功。進入 Python 的環境使用下面的語句匯入 matplotlib.pyplot 模組。如果不出錯,就說明 Matplotlib 已經安裝成功了。
import matplotlib.pyplot as plt
在使用 Matplotlib 繪製圖形時,其中有兩個最為常用的場景。一個是畫點,一個是畫線。
pyplot 基本方法的使用如下。
在使用 Matplotlib 繪製線性圖時,其中最簡單的是繪製線圖。在下面的範例程式碼中,使用 Matplotlib 繪製了一個簡單的直線。具體實現過程如下:
【範例 1】使用 matplotlib 根據兩點繪製一條線
import matplotlib.pyplot as plt #將(0,1)點和(2,4)連起來 plt.plot([0,2],[1,4]) plt.show()
在上述的範例程式碼中,使用兩個座標繪製一條直線,接下來使用平方數序列 1、4、9、16 和 25 來繪製一個折線圖。
【範例 2】使用 matplotlib 繪製折線圖
import matplotlib.pyplot as plt x=[1,2,3,4,5] squares=[1,4,9,16,25] plt.plot(x,squares) plt.show()
在上面的範例直線結果不夠完美,開發者可以繪製的線條樣式進行靈活設定。例如:可以設定線條的粗細、設定文字等。
【範例 3】使用 matplotlib 繪製折線圖並設定樣
import matplotlib.pyplot as plt datas=[1,2,3,4,5] squares=[1,4,9,16,25] plt.plot(datas,squares,linewidth=5) #設定線條寬度#設定圖示標題,並在座標軸上新增標籤plt.title('Numbers',fontsize=24) plt.xlabel('datas',fontsize=14) plt.ylabel('squares',fontsize=14) plt.show()
Matplotlib 預設情況不支援中文,可以使用以下簡單的方法來解決:
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標籤
【範例 4】解決標籤、標題中的中文問題
import matplotlib.pyplot as plt datas=[1,2,3,4,5] squares=[1,4,9,16,25] plt.plot(datas,squares,linewidth=5) #設定線條寬度#設定中文亂碼問題 plt.rcParams['font.sans-serif'] = ['SimHei'] #設定圖示標題,並在座標軸上新增標籤 plt.title('標題設定',fontsize=24) plt.xlabel('x 軸',fontsize=14) plt.ylabel('y 軸',fontsize=14) plt.show()
Matplotlib 有很多函數用於繪製各種圖形,其中 plot 函數用於曲線,需要將 200 個點的x 座標和 Y 座標分別以序列的形式傳入 plot 函數,然後呼叫 show 函數顯示繪製的圖形。一元二次方程的曲線。
【範例 5】使用 matplotlib 繪製一元二次方程曲線
import matplotlib.pyplot as plt #200 個點的 x 座標 x=range(-100,100) #生成 y 點的座標 y=[i**2 for i in x ] #繪製一元二次曲線 plt.plot(x,y) #呼叫 savefig 將一元二次曲線儲存為 result.jpg #plt.savefig('result.jpg') #如果直接寫成 plt.savefig('cos') 會生成 cos.png plt.show()
使用 plt 函數繪製任何曲線的第一步都是生成若干個座標點(x,y),理論上座標點是越多越好。本例取 0 到 10 之間 100 個等差數作為 x 的座標,然後將這 100 個 x 座標值一起傳入 Numpy 的 sin 和 cos 函數,就會得到 100 個 y 座標值,最後就可以使用 plot 函數繪製正弦曲線和餘弦曲線。
【範例 6】使用 matplotlib 繪製正弦曲線和餘弦曲線
import matplotlib.pyplot as plt import numpy as np #生成 x 的座標(0-10 的 100 個等差數列) x=np.linspace(0,10,100) sin_y=np.sin(x) #繪製正弦曲線 plt.plot(x,sin_y) #繪製餘弦曲線 cos_y=np.cos(x) plt.plot(x,cos_y) plt.show()
上面的範例可以看到,呼叫兩次 plot 函數,會將 sin 和 cos 曲線繪製到同一個二維座標系中,如果想繪製到兩張畫布中,可以呼叫 subplot()函數將畫布分割區。
import matplotlib.pyplot as plt import numpy as np #將畫布分為區域,將圖畫到畫布的指定區域 x=np.linspace(1,10,100) #將畫布分為 2 行 2 列,將圖畫到畫布的 1 區域 plt.subplot(2,2,1) plt.plot(x,np.sin(x)) plt.subplot(2,2,3) plt.plot(x,np.cos(x)) plt.show()
使用 scatter 函數可以繪製隨機點,該函數需要接收 x座標和 y 座標的序列。
【範例 8】使用 matplotlib 繪製 sin()函數的散點圖
import matplotlib.pyplot as plt import numpy as np #畫散點圖 x=np.linspace(0,10,100) #生成 0 到 10 中 100 個等差數 plt.scatter(x,np.sin(x)) plt.show()
【範例 9】繪製 10 種大小 100 種顏色的散點圖
import matplotlib.pyplot as plt import numpy as np # 畫 10 種大小, 100 種顏色的散點圖 np.random.seed(0) x=np.random.rand(100) y=np.random.rand(100) colors=np.random.rand(100) size=np.random.rand(100)*1000 plt.scatter(x,y,c=colors,s=size,alpha=0.7) plt.show()
作為線性圖的替代,可以通過向 plot() 函數新增格式字串來顯示離散值。 可以使用如表 2-2 格式化字元。
顏色的縮寫如下:
【範例 10】繪製不同種類不同顏色的線
import matplotlib.pyplot as plt import numpy as np #不同種類不同顏色的線 x=np.linspace(0,10,100) plt.plot(x,x+0,'-g') #實線 綠色 plt.plot(x,x+1,'--c') #虛線 淺藍色 plt.plot(x,x+2,'-.k') #點劃線 黑色 plt.plot(x,x+3,'-r') #實線 紅色 plt.plot(x,x+4,'o') #點 預設是藍色 plt.plot(x,x+5,'x') #叉叉 預設是藍色 plt.plot(x,x+6,'d') #磚石 紅色 plt.show()
【範例 11】新增圖例
#不同種類不同顏色的線並新增圖例 x=np.linspace(0,10,100) plt.plot(x,x+0,'-g',label='-g') #實線 綠色 plt.plot(x,x+1,'--c',label='--c') #虛線 淺藍色 plt.plot(x,x+2,'-.k',label='-.k') #點劃線 黑色 plt.plot(x,x+3,'-r',label='-r') #實線 紅色 plt.plot(x,x+4,'o',label='o') #點 預設是藍色 plt.plot(x,x+5,'x',label='x') #叉叉 預設是藍色 plt.plot(x,x+6,'dr',label='dr') #磚石 紅色 #新增圖例右下角 lower right 左上角 upper left 邊框 透明度 陰影 邊框寬度 plt.legend(loc='lower right',fancybox=True,framealpha=1,shadow=True,borderpad=1) plt.show()
使用 bar 函數可以繪製柱狀圖。柱狀圖需要水平的x 座標值,以及每一個 x 座標值對應的 y 座標值,從而形成柱狀的圖。柱狀圖主要用來縱向對比和橫向對比的。例如,根據年份對銷售收據進行縱向對比,x 座標值就表示年份,y 座標值表示銷售資料。
【範例 12】使用 bar()繪製柱狀圖,並設定柱的寬度
import matplotlib.pyplot as plt import numpy as np x=[1980,1985,1990,1995] x_labels=['1980 年','1985 年','1990 年','1995 年'] y=[1000,3000,4000,5000] plt.bar(x,y,width=3) plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標籤 plt.xticks(x,x_labels) plt.xlabel('年份') plt.ylabel('銷量') plt.title('根據年份銷量對比圖') plt.show()
需要注意的是 bar 函數的寬度並不是畫素寬度。bar 函數會根據二維座標系的尺寸,以及 x 座標值的多少,自動確定每一個柱的寬度,而 width 指定的寬度就是這個標準柱寬度的倍數。該引數值可以是浮點數,如 0.5,表示柱的寬度是標準寬度的 0.5 倍。
【範例 13】使用 bar()和 barh()函數繪製柱狀圖
import matplotlib.pyplot as plt import numpy as np np.random.seed(0) x=np.arange(5) y=np.random.randint(-5,5,5) print(x,y) # 將畫布分隔成一行兩列 plt.subplot(1,2,1) #在第一列中畫圖 v_bar=plt.bar(x,y) #在第一列的畫布中 0 位置畫一條藍線 plt.axhline(0,color='blue',linewidth=2) plt.subplot(1,2,2) #barh 將 y 和 x 軸對換 豎著方向為 x 軸 h_bar=plt.barh(x,y,color='red') #在第二列的畫布中 0 位置處畫藍色的線 plt.axvline(0,color='red',linewidth=2) plt.show()
【範例 14】對柱狀圖的部分柱狀設定顏色
import matplotlib.pyplot as plt import numpy as np np.random.seed(0) x=np.arange(5) y=np.random.randint(-5,5,5) v_bar=plt.bar(x,y,color='lightblue') for bar,height in zip(v_bar,y): if height<0: bar.set(edgecolor='darkred',color='lightgreen',linewidth=3) plt.show()
【範例 15】使用 bar()繪製三天中三部電影的票房變化
import matplotlib.pyplot as plt import numpy as np #三天中三部電影的票房變化 real_names=['千與千尋','玩具總動員 4','黑衣人:全球追緝'] real_num1=[5453,7548,6543] real_num2=[1840,4013,3421] real_num3=[1080,1673,2342] #生成 x 第 1 天 第 2 天 第 3 天 x=np.arange(len(real_names)) x_label=['第{}天'.format(i+1) for i in range(len(real_names))] #繪製柱狀圖#設定柱的寬度 width=0.3 plt.bar(x,real_num1,color='g',width=width,label=real_names[0]) plt.bar([i+width for i in x],real_num2,color='b',width=width,label=real_names[1]) plt.bar([i+2*width for i in x],real_num3,color='r',width=width,label=real_names[2]) plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標籤 #修改 x 座標 plt.xticks([i+width for i in x],x_label) #新增圖例plt.legend() #新增標題 plt.title('3 天的票房數') plt.show()
pie 函數可以繪製餅狀圖,餅圖主要是用來呈現比例的。只要傳入比例資料即可。
【範例 16】繪製餅狀圖
#匯入模組 import matplotlib.pyplot as plt import numpy as np #準備男、女的人數及比例 man=71351 woman=68187 man_perc=man/(woman+man) woman_perc=woman/(woman+man) #新增名稱 labels=['男','女'] #新增顏色 colors=['blue','red'] #繪製餅狀圖 pie plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標籤 # labels 名稱 colors:顏色,explode=分裂 autopct 顯示百分比 paches,texts,autotexts=plt.pie([man_perc,woman_perc],labels=labels,colors=colors,explode=(0,0.05),autopct='%0.1f%%') #設定餅狀圖中的字型顏色 for text in autotexts: text.set_color('white') #設定字型大小 for text in texts+autotexts: text.set_fontsize(20) plt.show()
直方圖與柱狀圖的分格類似,都是由若干個柱組成,但直方圖和柱狀圖的含義卻有很大的差異。直方圖
是用來觀察分佈狀態的,而柱狀圖是用來看每一個 X 座標對應的 Y 的值的。也就是說,直方圖關注的是分佈,並不關心具體的某個值,而柱狀圖關心的是具體的某個值。使用 hist函數繪製直方圖。
【範例 17】繪製直方圖
import numpy as np import matplotlib.pyplot as plt #頻次直方圖,均勻分佈 #正太分佈 x=np.random.randn(1000) #畫正太分佈圖 # plt.hist(x) plt.hist(x,bins=100) #裝箱的操作,將 10 個柱裝到一起及修改柱的寬度 plt.show()
【範例 18】同一畫布繪製三個直方圖
import numpy as np import matplotlib.pyplot as plt #幾個直方圖畫到一個畫布中,第一個引數期望 第二個均值 x1=np.random.normal(0,0.8,1000) x2=np.random.normal(-2,1,1000) x3=np.random.normal(3,2,1000) #引數分別是 bins:裝箱,alpha:透明度 kwargs=dict(bins=100,alpha=0.4) plt.hist(x1,**kwargs) plt.hist(x2,**kwargs) plt.hist(x3,**kwargs) plt.show()
【 範例 19 】使用matplotlib 繪製等高線圖
#匯入模組 import matplotlib.pyplot as plt import numpy as np x=np.linspace(-10,10,100) y=np.linspace(-10,10,100) #計算 x 和 y 的相交點 a X,Y=np.meshgrid(x,y) # 計算 Z 的座標 Z=np.sqrt(X**2+Y**2) plt.contourf(X,Y,Z) plt.contour(X,Y,Z) # 顏色越深表示值越小,中間的黑色表示 z=0. plt.show()
使用 pyplot 包和 Matplotlib 繪製三維圖。
【範例 20】使用 Matplotlib 繪製三維圖
import matplotlib.pyplot as plt #匯入 3D 包 from mpl_toolkits.mplot3d import Axes3D #建立 X、Y、Z 座標 X=[1,1,2,2] Y=[3,4,4,3] Z=[1,100,1,1] fig = plt.figure() # 建立了一個 Axes3D 的子圖放到 figure 畫布裡面 ax = Axes3D(fig) ax.plot_trisurf(X, Y, Z) plt.show()
以上就是我對資料視覺化模組 Matplotlib知識點的詳細介紹。
到此這篇關於Python Matplotlib資料視覺化模組使用詳解的文章就介紹到這了,更多相關Python Matplotlib內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45