python 筆記,Matplotlib隨記2

 2023-10-18 阅读 28 评论 0

摘要:之前寫了很多關于Matplotlib的基礎知識,這次主要講一下Matplotlib所生成的幾個圖:散點圖,柱狀圖,等高線圖,圖片和3D數據 Scatter散點圖 在制作Scatter散點圖的過程中,我們首先要引入matplotlib.pyplot簡寫為plt,再引入模塊

之前寫了很多關于Matplotlib的基礎知識,這次主要講一下Matplotlib所生成的幾個圖:散點圖,柱狀圖,等高線圖,圖片和3D數據

Scatter散點圖

在制作Scatter散點圖的過程中,我們首先要引入matplotlib.pyplot簡寫為plt,再引入模塊numpy用來產生一些隨機的數據。生成1024個呈正態分布的二維數組(平均數是0,方差是1)作為一個數據集,并圖像化這個數據集。其中,每一個點的顏色用T來表示:

import matplotlib.pyplot as plt
import numpy as npn=1024   #數據大小
X=np.random.normal(0,1,n)   #每一個點的X值
Y=np.random.normal(0,1,n)   #
T=np.arctan2(Y,X)

數據生成完畢之后,我們需要采用scatter來繪制這些點。在這里,我們輸入X和Y作為輸入點,顏色為T,color map用作默認值,透明度alpha為50%。X軸顯示范圍定位為(-1.5,1.5),并用xtick()函數來隱藏x坐標軸,ytick()函數來隱藏y坐標軸

plt.scatter(X,Y,s=75,c=T,alpha=.5)plt.xlim(-1.5,1.5)
plt.xticks(())
plt.ylim(-1.5,1.5)
plt.yticks(())plt.show()

python 筆記?綜上,該代碼最終產生的結果為:

柱狀圖

在我們平時的機器學習領域中,柱狀圖通常有很大的作用,它可以很形象的看到趨勢的變化。下面就介紹一下如何利用matplotlib來生成一個柱狀圖。

首先第一步便是生成數據。我們向上向下分別生成12個數據,X為0到11的整數,Y是相應的均勻分布的隨機數據。使用的函數是plt.bar,參數是X和Y:

import matplotlib.pyplot as plt
import numpy as npn=12
X=np.arange(n)
Y1=(1 - X / float(n)) * np.random.uniform(0.5,1.0,n)
Y2=(1 - X / float(n)) * np.random.uniform(0.5,1.0,n)plt.bar(X,+Y1)
plt.bar(X,-Y2)
plt.xlim(-1,n)
plt.xticks(())
plt.ylim(-1.25,1.25)
plt.yticks(())plt.show()

python筆記全。?

這樣我們便可以生成柱狀圖的基本框架。下一步我們需要對該圖就顏色和數值進行優化。用facecolor設置主題顏色,edgecolor設置邊框顏色。

plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white')
plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white')

?

接下來我們用函數plt.text分別在柱體上方(下方)加上數值,用%.2f 保留兩位小數,橫向居中對齊ha='center',縱向底部(頂部)對齊va='bottom'

for x,y in zip(X,Y1):plt.text(x+0.4,y+0.05,'%.2f' % y,ha='center',va='bottom')for x,y in zip(X,Y2):plt.text(x+0.4,-y-0.05,'%.2f' % y,ha='center',va='bottom')

?

matplotlib的方法。綜上,本部分的所有代碼為:

import matplotlib.pyplot as plt
import numpy as npn=12
X=np.arange(n)
Y1=(1 - X / float(n)) * np.random.uniform(0.5,1.0,n)
Y2=(1 - X / float(n)) * np.random.uniform(0.5,1.0,n)plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white')
plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white')for x,y in zip(X,Y1):plt.text(x+0.4,y+0.05,'%.2f' % y,ha='center',va='bottom')for x,y in zip(X,Y2):plt.text(x+0.4,-y-0.05,'%.2f' % y,ha='center',va='bottom')plt.xlim(-1,n)
plt.xticks(())
plt.ylim(-1.25,1.25)
plt.yticks(())plt.show()

?

所產生的結果為:

?

等高線圖

matplotlib中文手冊?在本部分,我們主要介紹如何利用matplotlib生成等高線。在生成等高線中,我們需要三維的數據點:(x,y)和對應的高度。在本程序中,高度我們用一個函數f()來生成。x,y分別是在區間[-3,3]中均勻分布的256個值,并用meshgrid在二維平面中將每一個x和每一個y分別對應起來,編織成柵格:

import matplotlib.pyplot as plt
import numpy as npdef f(x,y):return (1 - x/2 + x**5 + y**3) * np.exp(-x**2,-y**2)n=256
x=np.linspace(-3,3,n)
y=np.linspace(-3,3,n)
X,Y=np.meshgrid(x,y)

?

接下來我們進行顏色填充。使用函數plt.contourf把顏色加進去,位置參數分別為:X,Y,f(X,Y)。透明度0.75,并將f(X,Y)的值對應到color map的暖色組中尋找對應顏色。

plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)

?

接下來進行等高線繪制。使用plt.contour函數劃線。位置參數為?X,Y,f(X,Y)。在我們這里,我們將顏色選為黑色,線條寬度為0.5.現在的結果如下圖所示:只有顏色和線條,沒有數值Label

C=plt.contour(X,Y,f(X,Y),8,colors='black',linewidth=0.5)

Matplotlib、?

在上面的代碼中,我們可以看到,其中的8代表等高線的密集程度,這里被分為10個部分。如果是0,則圖像被一分為二。

再下一步,我們需要添加高度數字。我們加入Label,inline控制是否在Label畫在線里面,字體大小為10.并將坐標軸隱藏:

plt.clabel(C,inline=True,fontsize=10)
plt.xticks(())
plt.yticks(())

?

所以,在畫等高線的所有代碼為:

import matplotlib.pyplot as plt
import numpy as npdef f(x,y):return (1 - x/2 + x**5 + y**3) * np.exp(-x**2,-y**2)n=256
x=np.linspace(-3,3,n)
y=np.linspace(-3,3,n)
X,Y=np.meshgrid(x,y)plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)
C=plt.contour(X,Y,f(X,Y),8,colors='black',linewidth=0.5)plt.clabel(C,inline=True,fontsize=10)
plt.xticks(())
plt.yticks(())
plt.show()

如何打開matplotlib、?

所產生的結果為:

3D數據

在做機器學習的時候,有時候需要繪3D圖片來看數據整體的下降趨勢。首先在進行3D時除了導入matplotlib,還需要添加一個模塊,即3D坐標軸顯示,這個包不需要單獨安裝,python本身就自帶的

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

matplotlib入門??

之后要定義一個圖像窗口,在窗口上添加3D坐標軸。

fig=plt.figure()
ax=Axes3D(fig)

?

接下來再給出X值和Y值,并將X值和Y值編織成柵格。每一個(X,Y)點對應的高度值,我們用下面這個函數進行計算:

X=np.arange(-4,4,0.25)
Y=np.arange(-4,4,0.25)
X,Y=np.meshgrid(X,Y)
R=np.sqrt(X ** 2 + Y ** 2)
Z=np.sin(R)

?

用pip安裝matplotlib?下一步我們需要做出一個三維曲面,并將一個colormap rainbow填充顏色,之后將三維圖像投影到XY平面做一個等高線圖。plot 3D 圖像:

ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))

?

其中,rstride 和 cstride分別代表row 和 column的跨度

之后,我們添加XY平面的等高線:

ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap=plt.get_cmap('rainbow'))

?

matplotlib功能,如果zdir選擇了x,那么效果將會是對于XZ平面的投影。

因此,整個項目的代碼為:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3Dfig=plt.figure()
ax=Axes3D(fig)X=np.arange(-4,4,0.25)
Y=np.arange(-4,4,0.25)
X,Y=np.meshgrid(X,Y)
R=np.sqrt(X ** 2 + Y ** 2)
Z=np.sin(R)ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap=plt.get_cmap('rainbow'))plt.show()

?

最終的效果圖為:

matplotlib坐標軸、?

本知識學自于:莫煩python

?

轉載于:https://www.cnblogs.com/huanggen/p/7533088.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/146400.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息