乾貨|教你一文掌握:Matplotlib+Seaborn可視化
- 2020 年 3 月 9 日
- 筆記
導語
Seaborn和Matplotlib是Python最強大的兩個可視化庫。Seaborn其默認主題讓人驚訝,而Matplotlib可以通過其多個分類為用戶打造專屬功能。
0
1
導入包
import matplotlib.pyplot as plt #導入繪圖包 import numpy as np #導入numpy import pandas as pd #導入pandas
0
2
參數介紹
Figure:面板(圖),matplotlib中的所有圖像都是位於figure對象中,一個圖像只能有一個figure對象。
0
3
點圖、線圖為例
#使用numpy產生數據 x=np.arange(-5,,0.1) y=x* #創建窗口、子圖 #方法1:先創建窗口,再創建子圖。(一定繪製) fig = plt.figure(num=, figsize=(, ),dpi=) #開啟一個窗口,同時設置大小,分辨率 ax1 = fig.add_subplot(,,) #通過fig添加子圖,參數:行數,列數,第幾個。 ax2 = fig.add_subplot(,,) #通過fig添加子圖,參數:行數,列數,第幾個。 print(fig,ax1,ax2) #方法2:一次性創建窗口和多個子圖。(空白不繪製) fig,axarr = plt.subplots(,) #開一個新窗口,並添加4個子圖,返回子圖數組 ax1 = axarr[] #通過子圖數組獲取一個子圖 print(fig,ax1) #方法3:一次性創建窗口和一個子圖。(空白不繪製) ax1 = plt.subplot(,,,facecolor='white') #開一個新窗口,創建1個子圖。facecolor設置背景顏色 print(ax1) #獲取對窗口的引用,適用於上面三種方法 # fig = plt.gcf() #獲得當前figure # fig=ax1.figure #獲得指定子圖所屬窗口 # fig.subplots_adjust(left=0) #設置窗口左內邊距為0,即左邊留白為0。 #設置子圖的基本元素 ax1.set_title('python-drawing') #設置圖體,plt.title ax1.set_xlabel('x-name') #設置x軸名稱,plt.xlabel ax1.set_ylabel('y-name') #設置y軸名稱,plt.ylabel plt.axis([-6,,-10,]) #設置橫縱坐標軸範圍,這個在子圖中被分解為下面兩個函數 ax1.set_xlim(-5,) #設置橫軸範圍,會覆蓋上面的橫坐標,plt.xlim ax1.set_ylim(-10,) #設置縱軸範圍,會覆蓋上面的縱坐標,plt.ylim xmajorLocator = MultipleLocator() #定義橫向主刻度標籤的刻度差為2的倍數。就是隔幾個刻度才顯示一個標籤文本 ymajorLocator = MultipleLocator() #定義縱向主刻度標籤的刻度差為3的倍數。就是隔幾個刻度才顯示一個標籤文本 ax1.xaxis.set_major_locator(xmajorLocator) #x軸 應用定義的橫向主刻度格式。如果不應用將採用默認刻度格式 ax1.yaxis.set_major_locator(ymajorLocator) #y軸 應用定義的縱向主刻度格式。如果不應用將採用默認刻度格式 ax1.xaxis.grid(True, which='major') #x坐標軸的網格使用定義的主刻度格式 ax1.yaxis.grid(True, which='major') #x坐標軸的網格使用定義的主刻度格式 ax1.set_xticks([]) #去除坐標軸刻度 ax1.set_xticks((-5,-3,-1,,,)) #設置坐標軸刻度 ax1.set_xticklabels(labels=['x1','x2','x3','x4','x5'],rotation=-30,fontsize='small') #設置刻度的顯示文本,rotation旋轉角度,fontsize字體大小 plot1=ax1.plot(x,y,marker='o',color='g',label='legend1') #點圖:marker圖標 plot2=ax1.plot(x,y,linestyle='--',alpha=0.5,color='r',label='legend2') #線圖:linestyle線性,alpha透明度,color顏色,label圖例文本 ax1.legend(loc='upper left') #顯示圖例,plt.legend() ax1.text(2.8, , r'y=3*x') #指定位置顯示文字,plt.text() ax1.annotate('important point', xy=(, ), xytext=(, 1.5), #添加標註,參數:注釋文本、指向點、文字位置、箭頭屬性 arrowprops=dict(facecolor='black', shrink=0.05), ) #顯示網格。which參數的值為major(只繪製大刻度)、minor(只繪製小刻度)、both,默認值為major。axis為'x','y','both' ax1.grid(b=True,which='major',axis='both',alpha= 0.5,color='skyblue',linestyle='--',linewidth=) axes1 = plt.axes([.2, .3, .1, .1], facecolor='y') #在當前窗口添加一個子圖,rect=[左, 下, 寬, 高],是使用的絕對布局,不和以存在窗口擠占空間 axes1.plot(x,y) #在子圖上畫圖 plt.savefig('aa.jpg',dpi=,bbox_inches='tight') #savefig保存圖片,dpi分辨率,bbox_inches子圖周邊白色空間的大小 plt.show() #打開窗口,對於方法1創建在窗口一定繪製,對於方法2方法3創建的窗口,若坐標系全部空白,則不繪製
0
4
一個窗口多個圖
#一個窗口,多個圖,多條數據 sub1=plt.subplot(,facecolor=(0.1843,0.3098,0.3098)) #將窗口分成2行1列,在第1個作圖,並設置背景色 sub2=plt.subplot() #將窗口分成2行1列,在第2個作圖 sub1.plot(x,y) #繪製子圖 sub2.plot(x,y) #繪製子圖 axes1 = plt.axes([.2, .3, .1, .1], facecolor='y') #添加一個子坐標系,rect=[左, 下, 寬, 高] plt.plot(x,y) #繪製子坐標系, axes2 = plt.axes([0.7, .2, .1, .1], facecolor='y') #添加一個子坐標系,rect=[左, 下, 寬, 高] plt.plot(x,y) plt.show()
0
5
柱形圖
plt.figure() x_index = np.arange() #柱的索引 x_data = ('A', 'B', 'C', 'D', 'E') y1_data = (, , , , ) y2_data = (, , , , ) bar_width = 0.35 #定義一個數字代表每個獨立柱的寬度 rects1 = plt.bar(x_index, y1_data, width=bar_width,alpha=0.4, color='b',label='legend1') #參數:左偏移、高度、柱寬、透明度、顏色、圖例 rects2 = plt.bar(x_index + bar_width, y2_data, width=bar_width,alpha=0.5,color='r',label='legend2') #參數:左偏移、高度、柱寬、透明度、顏色、圖例 #關於左偏移,不用關心每根柱的中心不中心,因為只要把刻度線設置在柱的中間就可以了 plt.xticks(x_index + bar_width/, x_data) #x軸刻度線 plt.legend() #顯示圖例 plt.tight_layout() #自動控制圖像外部邊緣,此方法不能夠很好的控制圖像間的間隔 plt.show()

0
6
直方圖
fig,(ax0,ax1) = plt.subplots(nrows=,figsize=(,)) #在窗口上添加2個子圖 sigma = #標準差 mean = #均值 x=mean+sigma*np.random.randn() #正態分佈隨機數 ax0.hist(x,bins=,normed=False,histtype='bar',facecolor='yellowgreen',alpha=0.75) #normed是否歸一化,histtype直方圖類型,facecolor顏色,alpha透明度 ax1.hist(x,bins=,normed=,histtype='bar',facecolor='pink',alpha=0.75,cumulative=True,rwidth=0.8) #bins柱子的個數,cumulative是否計算累加分佈,rwidth柱子寬度 plt.show() #所有窗口運行

0
7
散點圖
fig = plt.figure() #添加一個窗口 ax =fig.add_subplot(,,) #在窗口上添加一個子圖 x=np.random.random() #產生隨機數組 y=np.random.random() #產生隨機數組 ax.scatter(x,y,s=x*,c='y',marker=(,),alpha=0.5,lw=,facecolors='none') #x橫坐標,y縱坐標,s圖像大小,c顏色,marker圖片,lw圖像邊框寬度 plt.show() #所有窗口運行

0
8
導入Seaborn
import seaborn as sns
0
9
直方圖barplot
x = np.arange() y = np.array([,,,,,,,]) df = pd.DataFrame({"x-axis": x,"y-axis": y}) sns.barplot("x-axis","y-axis",palette="RdBu_r",data=df) plt.xticks(rotation=) plt.show()

0
10
相關熱力圖
以tips數據為例:
# 相關性熱力圖 sns.heatmap(tips.corr())

#看圖說話:熱力圖可用來顯示兩變量之間的相關性,在這裡兩變量間對應的矩形框的顏色越淺,代表兩者之間越具有相關性
0
11
核密度估計圖
#kde plot圖 sns.kdeplot(tips['total_bill'], shade=True)

0
12
總結
相信介紹到這裡,大家對Matplotlib和Seaborn常用圖形有充分的了解了,下面通過一些案例去實踐可視化操作吧!我也會在後續實戰中帶來更多的應用。