首頁 > 軟體

Python資料分析之matplotlib繪圖詳解

2022-09-28 14:00:45

多子圖

figure是繪製物件(可以理解為一個空白的畫布),一個figure物件可以包含多個Axes子圖,一個Axes是一個繪圖區域,不加設定時,Axes為1,且每次繪圖其實都是在figure上的Axes上繪圖。

我們是在圖形物件上面的Axes區域進行作畫

1.add_axes():新增區域

2.Matplotlib定義一個axes類,該類的物件稱為axes物件(即軸域物件),它指定一個有數值範圍限制的繪圖區域。再給定一個畫布中,可以包含多個axes物件,但是同一個axes物件只能在一個畫布中使用。

2D 繪製區域(axes)包含兩個軸(axis)物件

語法:

add_axes(rect)

該方法用來生成一個axes軸域物件,物件的位置引數由引數rect決定。

rect是位置引數,接受一個由4個元素組成的浮點數列表,形如[left,bottom,width,height],它表示新增到畫布中的矩形區域左下標(x,y),以及寬度和高度

fig=plt.figure(figsize=(4,2),facecolor='g')
#ax1從畫布起始位置繪製,寬高和畫布一致
ax1=fig.add_axes([0,0,1,1])
#ax2從畫布20%的位置開始繪製,寬高是畫布的50%
ax2=fig.add_axes([0.2,0.2,0.5,0.5])
ax3=fig.add_axes([0.0,0.5,0.5,0.5])
ax3.plot([1,2,3,4,6],[2,3,5,8,9])
ax1.plot([1,2,3,4,6],[2,3,5,8,9])
ax2.plot([1,2,3,4,6],[2,3,5,8,9])

注意:每個元素的值是畫布寬度和高度的分數。即將畫布的寬、高作為一個單位。比如,[0.2,0.2,0.5,0.5],它代表從畫布20%的位置開始繪製,寬度是畫布的50%

fig=plt.figure()
#建立區域1
ax1=fig.add_axes([0,0,1,1])
#區域1作畫
plt.plot([1,2,3,4,6],[2,3,5,8,9])
#建立區域2
ax2=fig.add_axes([0.2,0.2,0.5,0.5])
#區域2作畫
plt.plot([1,2,3,4,6],[2,3,5,8,9])

subplot():均等地劃分畫布,只是建立一個包含子圖區域的畫布(返回區域物件)
subplots():既建立一個包含子圖區域的畫布,又建立了一個figure的圖形物件(返回圖形物件和區域物件)

散點圖

matplotlib.pyplot.scatter(s,y,s=None,marker=None,camp=None,norm=None,vmin=None,vmax=None,aipha=None,linewidths=None,edgecolors=None,plotnonfinite=False,data=None,*kwargs)

  • x,y散點座標
  • s散點面積
  • c散點顏色(預設為藍色,‘b’,其餘顏色同plt.plot())
  • marker散點樣式(預設為實心圓)
  • alpha散點透明度([0,1]之間的數,0表示完全透明,1表示完全不透明)
  • linewidths散點的邊緣線寬
  • edgecolors散點的邊緣顏色
  • camp(Colormap,預設None,標量是一個colormap的名字,只有c是一個浮點陣列時才使用)
#x軸資料
x=np.array([1,2,3,4,5,6,7,8])
#y軸資料
y=np.array([]1,4,9,16,7,11,23,18)
#生成一個[0,1)之間的隨機浮點數或N維浮點陣列
print((20*np.random.rand(8)**2)

a=(20*np.random.rand(8))**2
plt.scatter(x,y,s)
plt.show()

自定義點的顏色和透明度

x=np.random.rand(50) #rand()生成一個[0,1)之間的隨機浮點數或 N維浮點陣列
#y軸資料
y=np.random.rand(50)
#生成一個浮點陣列,取值範圍,正態分佈的隨機樣本數
s=(10*np.random.randn(50))**2
#顏色可以使用一組數位序列
#如只需要3中顏色
#color=np.resize(np.array([1,2,3]),100)
#顏色隨機
color=np.random.rand(50)
plt.scatter(x,y,s,c=color.alpha=0.5![請新增圖片描述](https://img-blog.csdnimg.cn/485575db5ab44419a8c885c2ed2fc7e6.jpeg)
)

水平柱狀圖

#引入Matplotlib
from matplotlib import pyplot as plt
import numpy as np
#設定中文字型
plt.rcParams['font.sans-serif']=['SimHei']
#中文負號
plt.rcParams['axes.unicode_minus']=False
#設定解析度100
plt.rcParams['figure.dpi']=100
#設定大小
plt.rcParams['figure.figsize']=(5,3)

呼叫Matplptlib的barh()函數可以生成水平柱狀圖

barh()函數的用法與bar()函數的用法基本一樣,只是在呼叫barh()函數使用y引數傳入Y軸資料,使用width引數傳入代表條柱 寬度的資料。

plt.barh(y,width,height=0.8,left=None,*,align=‘center’,**kwargs)

countries=['挪威','德國','中國','美國','瑞典']
#金牌個數
gold_medal=np.array([16,12,9,8,8])
#y軸為國家,寬度為獎牌個數
plt.barh(countries,width=gold_medal)

同位置柱狀圖

#國家
countries=['挪威','德國','中國','美國','瑞典']
#金牌個數
gold_metal=[16,12,9,8,8]
#銀牌個數
silver_medal=[8,10,4,10,5]
#銅牌個數
bronze_metal=[13,5,2,7,5]

#1.將x軸轉換為數值x=np.arange(len(countries))
print(x)
#2.設定影象寬度
width=0.2
#=======確定x起始位置=====
#金牌起始位置
gold_x=x
#銀牌起始位置
sliver_x=x+width
#銅牌起始位置
bronze_x=x+2*width

#==============分別繪製圖形
#金牌圖形
plt.bar(gold_x,gold_medal,width=width,color='gold')
#銀牌圖形
plt.bar(silver_x,silver_medal,width=width,color='silver')
#銅牌圖形
plt.bar(bronze_x,bronze_medal,width=width,color='saddlebrown')

#=====將x軸的座標變回來
#注意x標籤的位置居中
plt.xticks(x+width,labels=countries)
#------顯示高度文字-------
for i in range(len(countries)):
	#金牌文字設定
	plt.text(gold_x[i],gold_medal[i],va="bottom",ha="center")
	plt.text(silver_x[i],silver_medal[i],va="bottom",ha="center")
	plt.text(bronze_x[i],bronze_medal[i],va="bottom",ha="center")

到此這篇關於Python資料分析之matplotlib繪圖詳解的文章就介紹到這了,更多相關Python matplotlib繪圖內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com