乾貨|教你一文掌握:Matplotlib+Seaborn可視化

導語

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常用圖形有充分的了解了,下面通過一些案例去實踐可視化操作吧!我也會在後續實戰中帶來更多的應用。