Python數據分析與挖掘 課件 第 5 章 Python數據可視化_第1頁
Python數據分析與挖掘 課件 第 5 章 Python數據可視化_第2頁
Python數據分析與挖掘 課件 第 5 章 Python數據可視化_第3頁
Python數據分析與挖掘 課件 第 5 章 Python數據可視化_第4頁
Python數據分析與挖掘 課件 第 5 章 Python數據可視化_第5頁
已閱讀5頁,還剩114頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Python數據分析與挖掘第5章Python數據可視化本章主要內容Matplotlib數據可視化Seaborn數據可視化pyecharts數據可視化數據可視化對數據的分析離不開數據的可視化。傳統的數據可視化起源于統計圖形學,與信息圖形、視覺設計等現代技術密切相關,其表現形式通常在二維空間。與之相比,大數據可視化往往更關注抽象高維的數據,空間屬性較弱,與所針對的數據類型密切相關。數據可視化(1)時空數據可視化時空數據是指帶有地理位置與時間標簽的數據,因此,時變數據和地理信息數據的可視化非常重要。(2)層次與網絡結構數據可視化網絡關聯關系在大數據中是一種常見的關系。網絡之間的連接、層次結構、拓撲結構等都屬于這種類型。(3)文本和跨媒體數據可視化文本信息是大數據時代非結構化數據類型的典型代表,是互聯網中最主要的信息類型。這類數據的可視化方法主要有標簽云、引入時間軸的河流圖等方法。(4)多變量數據可視化多變量的高維數據用來描述現實世界中的復雜問題和對象。5.1Matplotlib數據可視化基礎Matplotlib是一個在python下實現的類matlab的純python的第三方庫,旨在用python實現matlab的功能,是python下最出色的繪圖庫。其風格跟matlab相似,同時也繼承了python的簡單明了。要使用matplotlib得先安裝numpy庫(一個python下數組處理的第三方庫,可以很方便的處理矩陣,數組)。matplotlib對于圖像美化方面比較完善,可以自定義線條的顏色和樣式,可以在一張繪圖紙上繪制多張小圖,也可以在一張圖上繪制多條線,可以很方便地將數據可視化并對比分析。5.1Matplotlib數據可視化基礎Matplotlib模塊依賴于NumPy和tkinter模塊,可以繪制多種形式的圖形,包括線圖、直方圖、餅圖、散點圖等,圖形質量滿足出版要求,是數據可視化的重要工具。Matplotlib中應用最廣的是matplotlib.pyplot模塊。Pyplot提供了一套和Matlab類似的繪圖API,使得Matplotlib的機制更像Matlab。我們只需要調用Pyplot模塊所提供的函數就可以實現快速繪圖并設置圖表的各個細節。在Jupyternotebook中進行交互式繪圖,需要執行一下語句:%matplotlibnotebook使用matplotlib時,使用的導入慣例為:importmatplotlib.pyplotasplt圖5-1Matplotlib中的常用繪圖及分組5.1Matplotlib數據可視化基礎相關函數簡介

figure():創建一個新的繪圖窗口。figtext():為figure添加文字axes():為當前figure添加一個坐標軸plot():繪圖函數polar():繪制極坐標圖axis():獲取或設置軸屬性的邊界方法(坐標的取值范圍)clf:清除當前figure窗口cla:清除當前axes窗口close:關閉當前figure窗口subplot:一個圖中包含多個axestext():在軸上添加文字title():設置當前axes標題xlabel/ylabel:設置當前X軸或Y軸的標簽相關函數簡介hist():繪制直方圖hist2d():繪制二維在直方圖hold:設置當前圖窗狀態;off或者onimread():讀取一個圖像,從圖形文件中提取數組legend():為當前axes放置標簽pie():繪制餅狀圖scatter():做一個X和Y的散點圖,其中X和Y是相同長度的序列對象stackplot():繪制一個堆疊面積圖acorr():繪制X的自相關函數annotate():用箭頭在指定的數據點創建一個注釋或一段文本bar():繪制垂直條形圖 barh():繪制橫向條形圖barbs():繪制一個倒鉤的二維場1.創建畫布與創建子圖第一部分主要作用是構建出一張空白的畫布,并可以選擇是否將整個畫布劃分為多個部分,方便在同一幅圖上繪制多個圖形的情況。最簡單的繪圖可以省略第一部分,而后直接在默認的畫布上進行圖形繪制。函數名稱函數作用plt.figure創建一個空白畫布,可以指定畫布大小,像素。figure.add_subplot創建并選中子圖,可以指定子圖的行數,列數,與選中圖片編號。5.1Matplotlib數據可視化基礎importmatplotlib.pyplotaspltimportnumpyasnpdata=np.arange(10)plt.plot(data)繪制的圖位于圖片(figure)對象中。5.1Matplotlib數據可視化基礎【例5-1】創建子圖importmatplotlib.pyplotaspltfig=plt.figure()#不能使用空白的figure繪圖,需要創建子圖ax1=fig.add_subplot(2,2,1)ax2=fig.add_subplot(2,2,2)ax3=fig.add_subplot(2,2,3)5.1Matplotlib數據可視化基礎5.1Matplotlib可視化子圖繪制fig=plt.figure()ax1=fig.add_subplot(2,2,1)ax2=fig.add_subplot(2,2,2)ax3=fig.add_subplot(2,2,3)ax1.plot([1.5,2,3.5,-1,1.6])5.1Matplotlib可視化可以用語句Fig,axes=plt.subplots(2,3)創建一個新的圖片,然后返回包含了已生成子圖對象的NumPy數組。數組axes可以像二維數組那樣方便地進行索引,如axes[0,1]。也可以通過sharex和sharey表明子圖分別擁有相同的x軸和y軸。fig,axes=plt.subplots(2,3)5.1Matplotlib可視化調整子圖周圍的間距。In[4]:fig,axes=plt.subplots(2,2,sharex=True,sharey=True)foriinrange(2):forjinrange(2):

axes[i,j].hist(np.random.randn(500),bins=50,color='k',alpha=0.5)plt.subplots_adjust(wspace=0,hspace=0)Out[4]:2.添加畫布內容第二部分是繪圖的主體部分。其中添加標題,坐標軸名稱,繪制圖形等步驟是并列的,沒有先后順序,可以先繪制圖形,也可以先添加各類標簽。但是添加圖例一定要在繪制圖形之后。函數名稱函數作用plt.title在當前圖形中添加標題,可以指定標題的名稱、位置、顏色、字體大小等參數。plt.xlabel在當前圖形中添加x軸名稱,可以指定位置、顏色、字體大小等參數。plt.ylabel在當前圖形中添加y軸名稱,可以指定位置、顏色、字體大小等參數。plt.xlim指定當前圖形x軸的范圍,只能確定一個數值區間,而無法使用字符串標識。plt.ylim指定當前圖形y軸的范圍,只能確定一個數值區間,而無法使用字符串標識。plt.xticks指定x軸刻度的數目與取值。plt.yticks指定y軸刻度的數目與取值。plt.legend指定當前圖形的圖例,可以指定圖例的大小、位置、標簽。5.1Matplotlib可視化importnumpyasnpimportmatplotlib.pyplotasplt%matplotlibinlinedata=np.arange(0,1,0.01)plt.title('mylinesexample')plt.xlabel('X')plt.ylabel('Y')plt.xlim(0,1)plt.ylim(0,1)plt.xticks([0,0.2,0.4,0.6,0.8,1])plt.yticks([0,0.2,0.4,0.6,0.8,1])plt.plot(data,data**2)plt.plot(data,data**3)plt.legend(['y=x^2','y=x^3'])plt.show()5.1Matplotlib可視化data=np.arange(0,np.pi*2,0.01)fig1=plt.figure(figsize=(9,7),dpi=90)#確定畫布大小#繪制第一幅子圖ax1=fig1.add_subplot(1,2,1)plt.title('linesexample')plt.xlabel('X')plt.ylabel('Y')plt.xlim(0,1)plt.ylim(0,1)plt.xticks([0,0.2,0.4,0.6,0.8,1])plt.yticks([0,0.2,0.4,0.6,0.8,1])plt.plot(data,data**2)plt.plot(data,data**3)plt.legend(['y=x^2','y=x^3'])#繪制第二幅子圖ax1=fig1.add_subplot(1,2,2)plt.title('sin-cos')plt.xlabel('X')plt.ylabel('Y')plt.xlim(0,np.pi*2)plt.ylim(-1,1)plt.xticks([0,np.pi/2,np.pi,np.pi*3/2,np.pi*2])plt.yticks([-1,-0.5,0,0.5,1])plt.plot(data,np.sin(data))plt.plot(data,np.cos(data))plt.legend(['sin','cos'])plt.show()5.1Matplotlib可視化Matplotlib的Legend圖例就是為了幫助我們展示每個數據對應的圖像名稱,更好的讓讀者認識到你的數據結構。關于plt.legend()的說明如下:常用設置示例:plt.legend(loc='best',frameon=False)#去掉圖例邊框,推薦使用plt.legend(loc='best',edgecolor='blue')#設置圖例邊框顏色plt.legend(loc='best',facecolor='blue')#設置圖例背景顏色,若無邊框,參數無效0:’best’1:‘upperright’2:‘upperleft’3:‘lowerleft’4:‘lowerright’5:‘right’6:‘centerleft’7:‘centerright’8:‘lowercenter’9:‘uppercenter’10:‘center’5.1Matplotlib可視化3.繪圖的保存與顯示第三部分主要用于保存和顯示圖形。例:fig.savefig(save_path,format='png',transparent=True,dpi=300,pad_inches=0)函數名稱函數作用plt.savafig保存繪制的圖片,可以指定圖片的分辨率、邊緣的顏色等參數。plt.show在本機顯示圖形。5.1Matplotlib可視化figure.savefig選項參數描述fname包含文件路徑或Python文件型對象的字符串。圖片格式是從文件擴展名中推斷出來的(例如pdf格式的.pdf)dpi設置每英寸點數的分辨率,默認為100facecolor,edgecolor子圖之外的圖形背景顏色,默認是’w’(白色)format文件格式(’png’,’pdf’,’svg’,’ps’等)bbox_inches要保存的圖片范圍,如果設置為‘tight‘則去除圖片周圍的空白5.1Matplotlib可視化pyplot使用rc配置文件來自定義圖形的各種默認屬性,被稱為rc配置或rc參數。在pyplot中幾乎所有的默認屬性都是可以控制的,例如視圖窗口大小以及每英寸點數、線條寬度、顏色和樣式、坐標軸、坐標和網格屬性、文本、字體等。兩種方式可以設置參數,即全局參數定制和rc設置方法。查看matplotlib的rc參數:importmatplotlibaspltprint(plt.rc_params())3.設置pyplot的動態rc參數5.1Matplotlib可視化1.使用參數字典importmatplotlibaspltprint(plt.rc_params())參數眾多常用參數:Axes:設置坐標軸邊界、顏色、坐標刻度值大小和網格的顯示;Figure:設置邊界顏色、圖形大小和子區;Font:設置字號、字體和樣式;Grid:設置網格顏色和線型;Legend:設置圖例和其中的文本顯示;Lines:設置線條顏色、寬度、線型等;Savefig:對保存圖像進行單獨設置;Xtick和ytick:X、Y軸的主刻度和次刻度設置顏色、大小、方向和標簽大小。5.1Matplotlib可視化3.設置pyplot的動態rc參數1.全局參數定制In[]:importmatplotlibaspltprint(plt.matplotlib_fname())#顯示當前用戶的配置文件目錄

查找到當前用戶的配置文件目錄,然后用編輯器打

開,修改matplotlibrc文件,即可修改配置參數。5.1Matplotlib可視化6.3設置pyplot的動態rc參數2.線條的常用rc參數名稱、解釋與取值rc參數名稱解釋取值lines.linewidth線條寬度取0-10之間的數值,默認為1.5。lines.linestyle線條樣式可取“-”“--”“-.”“:”四種。默認為“-”。lines.marker線條上點的形狀可取“o”

“D”

“h”

“.”

“,”“S”等20種,默認為None。lines.markersize點的大小取0-10之間的數值,默認為1。6.3設置pyplot的動態rc參數常用線條類型解釋linestyle取值意義linestyle取值意義-實線-.點線--長虛線:短虛線marker取值意義marker取值意義‘o’圓圈‘.’點‘D’菱形‘s’正方形‘h’六邊形1‘*’星號‘H’六邊形2‘d’小菱形‘-’水平線‘v’一角朝下的三角形‘8’八邊形‘<’一角朝左的三角形‘p’五邊形‘>’一角朝右的三角形‘,’像素‘^’一角朝上的三角形‘+’加號‘\’豎線‘None’無‘x’X5.1Matplotlib可視化需要注意的是,由于默認的Pyplot字體并不支持中文字符的顯示,因此需要通過設置font.sans-serif參數改變繪圖時的字體,使得圖形可以正常顯示中文。同時,由于更改字體后,會導致坐標軸中的部分字符無法顯示,因此需要同時更改axes.unicode_minus參數。plt.rcParams['font.family']=['SimHei']#用來顯示中文標簽plt.rcParams['axes.unicode_minus']=False#用來正常顯示負號除了設置線條和字體的rc參數外,還有設置文本、箱線圖、坐標軸、刻度、圖例、標記、圖片、圖像保存等rc參數。5.1Matplotlib可視化【例5-8】rc參數設置示例fig,ax=plt.subplots()#配置中文顯示plt.rcParams['font.family']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsedeff(t):returnnp.cos(2*np.pi*t)x1=np.arange(0.0,4.0,0.5)x2=np.arange(0.0,4.0,0.01)plt.figure(1)plt.subplot(2,2,1)plt.plot(x1,f(x1),'bo',x2,f(x2),'k')plt.title('子圖1')plt.subplot(2,2,2)plt.plot(np.cos(2*np.pi*x2),'r--')plt.title('子圖2')plt.show()5.1Matplotlib可視化plt.plot(np.random.randn(30).cumsum(),color='k',linestyle='dashed',marker='o')改變刻度:ax.set_xticks([0,25,50,75,100])改變刻度:ax.set_xticklabels(['x1','x2','x3','x4','x5'],rotation=30,fontsize='small')5.1Matplotlib可視化添加圖例:添加每個圖表時傳遞label參數。5.1Matplotlib可視化fig=plt.figure()np.random.seed(2030)ax=fig.add_subplot(1,1,1)ax.plot(np.random.randn(20),color='k',linestyle='-',marker='o',label='one')ax.plot(np.random.randn(20),color='r',linestyle='--',marker='+',label='two')ax.plot(np.random.randn(20),color='y',linestyle='-.',marker='v',label='three')ax.set_xticks([0,5,10,15,20])#set_xticks設置刻度ax.set_xticklabels(['x1','x2','x3','x4','x5'],rotation=30,fontsize='large')#set_xticklabels改變刻度,設置刻度的旋轉角度及字體等ax.legend(loc='best')importnumpyasnpimportmatplotlib.pyplotaspltfig,ax=plt.subplots()plt.rcParams['font.family']=['SimHei']#用來顯示中文標簽plt.rcParams['axes.unicode_minus']=False#用來正常顯示負號x1=np.arange(0.0,3.0,0.01)x2=np.arange(0.0,4.0,0.01)y1=np.cos(2*np.pi*x1)*np.exp(-x1)y2=np.cos(2*np.pi*x2)plt.subplot(2,1,1)plt.plot(x1,y1)plt.title('子圖1')plt.xlabel('X軸')plt.ylabel('Y軸')plt.subplot(2,1,2)plt.plot(x1,y1)plt.title('子圖2')plt.xlabel('數量')plt.ylabel('Y值')plt.show()5.1Matplotlib可視化rc參數設置fig,ax=plt.subplots()#配置中文顯示plt.rcParams['font.family']=['SimHei']#用來顯示中文標簽plt.rcParams['axes.unicode_minus']=False#用來正常顯示負號deff(t):returnnp.cos(2*np.pi*t)x1=np.arange(0.0,5.0,0.5)x2=np.arange(0.0,5.0,0.01)plt.figure(1)plt.subplot(2,2,1)plt.plot(x1,f(x1),'bo',x2,f(x2),'k')plt.subplot(2,2,2)plt.plot(np.cos(2*np.pi*x2),'r--')plt.show()rc參數設置fig,ax=plt.subplots()plt.rcParams['font.family']=['SimHei']#用來顯示中文標簽plt.rcParams['axes.unicode_minus']=False#用來正常顯示負號x1=np.arange(0.0,3.0,0.01)y1=np.cos(2*np.pi*x1)*np.exp(-x1)plt.subplot(2,1,1)plt.plot(x1,y1)plt.title('子圖1')plt.xlabel('X軸')plt.ylabel('Y軸')plt.xlim(-5,3)plt.ylim(-10,50)plt.show()5.1.3繪圖的填充(1)調用函數fill_between()實現曲線下面部分的填充:importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(0,1,500)y=np.sin(3*np.pi*x)*np.exp(-4*x)fig,ax=plt.subplots()plt.plot(x,y)plt.fill_between(x,0,y,facecolor='green',alpha=0.3)x:第一個參數表示覆蓋的區域,x,表示整個x都覆蓋

0:表示覆蓋的下限

y:表示覆蓋的上限是y這個曲線

facecolor:覆蓋區域的顏色

alpha:覆蓋區域的透明度[0,1],其值越大,表示越不透明(2)部分區域的填充:plt.fill_between(x[15:300],0,0.4,facecolor='green',alpha=0.3)5.1.3繪圖的填充(3)兩條曲線之間的區域填充:importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(0,1,500)y1=np.sin(3*np.pi*x)*np.exp(-4*x)y2=y1+0.2plt.plot(x,y1,'b')plt.plot(x,y2,'r')plt.fill_between(x,y1,y2,facecolor='green',alpha=0.3)plt.show()

5.1.3繪圖的填充(4)利用fill進行繪圖的填充:In[]:importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(0,1,500)y=np.sin(3*np.pi*x)*np.exp(-4*x)fig,ax=plt.subplots()ax.fill(x,y)plt.show()Out[]:5.1.3繪圖的填充5.1.4繪圖注釋繪圖時有時需要在圖表中加文本注解這時可以通過text函數在指定的位置(x,y)加入文本注解;通過annotate()在指定位置實現指向型注釋。1指向型注釋annotate()2.無指向型注釋text()5.1.4繪圖注釋importnumpyasnpimportmatplotlib.pyplotasplt%matplotlibinline#配置中文顯示plt.rcParams['font.family']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsex=np.arange(-10,11,1)y=x*xplt.plot(x,y)plt.title('這是一個標題示例')plt.text(-2.5,30,'funcitony=x*x')plt.show()plt.annotate('這是一個示例',xy=(0,1),xytext=(-2,22),arrowprops={'headwidth':10,'facecolor':'r'})5.1.4繪圖注釋如在柱狀圖上加入文本數字,可以清楚地顯示每個類別的數量。如6個城市8月份的日均最高氣溫。plt.rcParams['font.family']=['SimHei']data=[25,30,32,34,34,23]label=['青海','蘭州','北京','上海','廣州','拉薩']plt.xticks(range(len(data)),label)plt.xlabel('城市')plt.ylabel('溫度')plt.title('六城市8月份日均最高氣溫')plt.bar(range(len(data)),data)forx,yinzip(range(len(data)),data):plt.text(x,y,y,ha='center',va='bottom')plt.show()5.1.4繪圖注釋fig=plt.figure()ax1=fig.add_subplot(121)t=np.arange(0.0,5,0.01)s=np.cos(2*np.pi*t)line,=ax1.plot(t,s,lw=2)bbox=dict(boxstyle='round',fc='white')ax1.annotate('localmax',xy=(2,1),xytext=(3,1.5),arrowprops=dict(facecolor='black',edgecolor='red',headwidth=7,width=2),bbox=bbox)#arrowstyle箭頭類型,arrowstyle="->",connectionstyle="arc3"指的是#xy與xytext之間的連接類型bbox_prop=dict(fc='white')ax1.set_xlabel('asix-X',bbox=bbox_prop)ax1.set_ylim(-2,2)ax1.text(1,1,'max')5.1.5繪圖中的公式Matlplotlib對Latex有一定的支持。在matplotlib里面,可以使用LaTex的命令來編輯公式,只需要在字符串前面加一個‘r’即可。importnumpyasnpimportmatplotlib.pyplotasplt%matplotlibinlineplt.xlim([1,8])plt.ylim([1,3])plt.text(2,2,r'$\alpha\beta\pi\lambda\omega$',size=15)plt.text(4,2,r'$\sin(0)=\cos(\frac{\pi}{2})$',size=20)plt.text(2,1.5,r'$\lim_{x\rightarrowy}\frac{1}{x^3}$',size=25,color='b')plt.text(5,1.5,r'$\sqrt[4]{x}=\sqrt{y}$',size=25)plt.title(r'Title$\sum_{n=1}^\infty'r'\frac{-e^{i\pi}}{2^n}$!',fontsize=20)plt.show()5.1.6pyplot中的常用繪圖折線圖折線圖(linechart)是一種將數據點按照順序連接起來的圖形。可以看作是將散點圖,按照x軸坐標順序連接起來的圖形。折線圖的主要功能是查看因變量y隨著自變量x改變的趨勢,最適合用于顯示隨時間(根據常用比例設置)而變化的連續數據。同時還可以看出數量的差異,增長趨勢的變化。plot函數matplotlib.pyplot.plot(*args,**kwargs)

plot函數在官方文檔的語法中只要求填入不定長參數,實際可以填入的主要參數主要如下。參數名稱說明x,y接收array。表示x軸和y軸對應的數據。無默認。color接收特定string。指定線條的顏色。默認為None。linestyle接收特定string。指定線條類型。默認為“-”。marker接收特定string。表示繪制的點的類型。默認為None。alpha接收0-1的小數。表示點的透明度。默認為None。5.1.6pyplot中的常用繪圖plot函數color參數的8種常用顏色的縮寫。顏色縮寫代表的顏色顏色縮寫代表的顏色b藍色m品紅g綠色y黃色r紅色k黑色c青色w白色5.1.6pyplot中的常用繪圖簡單折線圖importnumpyasnpx1=np.arange(0,30)plt.plot(x1,x1*2,'b')plt.show()帶點的折線圖plt.plot(x,y,marker='*',linewidth=1,linestyle='--',color='orange')plt.plot(x,z)5.1.6pyplot中的常用繪圖繪制折線圖Series和DataFrame都有一個plot屬性,用于繪制基本的圖形。默認情況下,plot()繪制的都是折線。importpandasaspds=pd.Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))s.plot()Series的索引傳入作為繪圖的X軸,x軸的刻度和范圍可以通過xticks和xlim調整。繪制折線圖Series和DataFrame都有一個plot屬性,用于繪制基本的圖形。默認情況下,plot()繪制的都是折線。s=pd.DataFrame(np.random.randn(10,4).cumsum(0),columns=['A','B','C','D'],index=np.arange(0,100,10))s.plot()5.1.6pyplot中的常用繪圖-繪制散點圖散點圖散點圖(scatterdiagram)又稱為散點分布圖,是以一個特征為橫坐標,另一個特征為縱坐標,利用坐標點(散點)的分布形態反映特征間的統計關系的一種圖形。值是由點在圖表中的位置表示,類別是由圖表中的不同標記表示,通常用于比較跨類別的數據。5.1.6pyplot中的常用繪圖--繪制散點圖scatter函數matplotlib.pyplot.scatter(x,y,s=None,c=None,marker=None,alpha=None,**kwargs)參數名稱說明x,y接收array。表示x軸和y軸對應的數據。無默認。s接收數值或者一維的array。指定點的大小,若傳入一維array則表示每個點的大小。默認為None。c接收顏色或者一維的array。指定點的顏色,若傳入一維array則表示每個點的顏色。默認為Nonemarker接收特定string。表示繪制的點的類型。默認為None。alpha接收0-1的小數。表示點的透明度。默認為None。散點圖1fig,ax=plt.subplots()plt.rcParams['font.family']=['SimHei']#用來顯示中文標簽plt.rcParams['axes.unicode_minus']=False#用來正常顯示負號x1=np.arange(1,30)y1=np.sin(x1)ax1=plt.subplot(1,1,1)plt.title('散點圖')plt.xlabel('X')plt.ylabel('Y')lvalue=x1ax1.scatter(x1,y1,c='r',s=100,linewidths=lvalue,marker='o')plt.legend('x1')plt.show()散點圖2importnumpyasnpimportmatplotlib.pyplotaspltfig,ax=plt.subplots()plt.rcParams['font.family']=['SimHei']#用來顯示中文標簽plt.rcParams['axes.unicode_minus']=False#用來正常顯示負號forcolorin['red','green','blue']:n=500x,y=np.random.randn(2,n)ax.scatter(x,y,c=color,label=color,alpha=0.3,edgecolors='none')ax.legend()ax.grid(True)plt.show()5.1.6pyplot中的常用繪圖--繪制柱狀圖直方圖柱形圖又稱長條圖、柱狀統計圖、條圖、條狀圖和棒形圖,是一種以長方形的長度為變量的統計圖表。繪制直方圖函數bar格式:matplotlib.pyplot.bar(left,height,width=0.8,bottom=None,hold=None,data=None,**kwargs)5.1.6pyplot中的常用繪圖--繪制直方圖bar函數matplotlib.pyplot.bar(left,height,width=0.8,bottom=None,hold=None,data=None,**kwargs)常用參數及說明如下表所示。參數名稱說明left接收array。表示x軸數據。無默認。height接收array。表示x軸所代表數據的數量。無默認。width接收0-1之間的float。指定直方圖寬度。默認為0.8。color接收特定string或者包含顏色字符串的array。表示直方圖顏色。默認為None。5.1.6pyplot中的常用繪圖--繪制直方圖fig,axes=plt.subplots(2,1)data=pd.Series(np.random.randn(16),index=list('abcdefghijklmnop'))data.plot.bar(ax=axes[0],color=‘k’,alpha=0.7)#垂直柱狀圖data.plot.barh(ax=axes[1],color=‘k’,alpha=0.7)#alpha設置透明度5.1.6pyplot中的常用繪圖--繪制直方圖在dataframe中,柱狀圖將每一行中的值分組到并排的柱子中的一組。df=pd.DataFrame(np.random.rand(6,4),index=['one','two','three','four','five','six'],columns=pd.Index(['A','B','C','D'],name='Genus'))df.plot.bar()5.1.6pyplot中的常用繪圖--柱狀圖示例fig,ax=plt.subplots()plt.rcParams['font.family']=['SimHei']#用來顯示中文標簽plt.rcParams['axes.unicode_minus']=False#用來正常顯示負號plt.figure(figsize=(7,5))x=np.arange(1,6)Y1=np.random.uniform(1.5,1.0,5)Y2=np.random.uniform(1.5,1.0,5)plt.bar(x,Y1,width=0.35,facecolor='lightskyblue',edgecolor='white')plt.bar(x+0.35,Y2,width=0.35,facecolor='yellowgreen',edgecolor='white')plt.show()5.1.6pyplot中的常用繪圖--繪制餅圖餅圖餅圖(PieGraph)是將各項的大小與各項總和的比例顯示在一張“餅”中,以“餅”的大小來確定每一項的占比。餅圖可以比較清楚地反映出部分與部分、部分與整體之間的比例關系,易于顯示每組數據相對于總數的大小,而且顯現方式直觀。5.1.6pyplot中的常用繪圖--繪制餅圖pie函數matplotlib.pyplot.pie(x,explode=None,labels=None,colors=None,autopct=None,pctdistance=0.6,shadow=False,labeldistance=1.1,startangle=None,radius=None,…)參數名稱說明參數名稱說明x接收array。表示用于繪制撇的數據。無默認。autopct接收特定string。指定數值的顯示方式。默認為None。explode接收array。表示指定項離餅圖圓心為n個半徑。默認為None。pctdistance接收float。指定每一項的比例和距離餅圖圓心n個半徑。默認為0.6。labels接收array。指定每一項的名稱。默認為None。labeldistance接收float。指定每一項的名稱和距離餅圖圓心多少個半徑。默認為1.1。color接收特定string或者包含顏色字符串的array。表示餅圖顏色。默認為None。radius接收float。表示餅圖的半徑。默認為1。5.1.6pyplot中的常用繪圖--繪制餅圖plt.figure(figsize=(6,6))ax=plt.axes([0.1,0.1,0.8,0.8])#建立軸的大小labels='Springs','Summer','Autumn','Winter'x=[15,30,45,10]explode=(0.05,0.05,0.05,0.05)#這個是控制分離的距離的,默認的餅圖不分離。plt.pie(x,labels=labels,explode=explode,startangle=60,autopct='%1.1f%%')#qutopct在圖中顯示比例值,注意值的格式。plt.title('Ranydaysbyseason')plt.show()5.1.6pyplot中的常用繪圖--繪制箱線圖箱線圖箱線圖(boxplot)也稱箱須圖,其繪制需使用常用的統計量,能提供有關數據位置和分散情況的關鍵信息,尤其在比較不同特征時,更可表現其分散程度差異。箱線圖利用數據中的五個統計量(最小值、下四分位數、中位數、上四分位數和最大值)來描述數據,它也可以粗略地看出數據是否具有對稱性、分布的分散程度等信息,特別可以用于對幾個樣本的比較。5.1.6pyplot中的常用繪圖--繪制箱線圖boxplot函數matplotlib.pyplot.boxplot(x,notch=None,sym=None,vert=None,whis=None,positions=None,widths=None,patch_artist=None,meanline=None,labels=None,…)參數名稱說明參數名稱說明x接收array。表示用于繪制箱線圖的數據。無默認。positions接收array。表示圖形位置。默認為None。notch接收boolean。表示中間箱體是否有缺口。默認為None。widths接收scalar或者array。表示每個箱體的寬度。默認為None。sym接收特定sting。指定異常點形狀。默認為None。labels接收array。指定每一個箱線圖的標簽。默認為None。vert接收boolean。表示圖形是橫向縱向或者橫向。默認為None。meanline接收boolean。表示是否顯示均值線。默認為False。5.1.6pyplot中的常用繪圖--繪制箱線圖importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspdnp.random.seed(2)#設置隨機種子df=pd.DataFrame(np.random.rand(5,4),columns=['A','B','C','D'])#先生成0-1之間的5*4維度數據,再裝入4列DataFrame中df.boxplot()#也可用plot.box()plt.show()5.1.6pyplot中的常用繪圖--繪制概率圖概率圖模型是圖靈獎獲得者Pearl提出的用來表示變量間概率依賴關系的理論。正態分布又名高斯分布。正態概率密度函數normpdf(X,mu,sigma)其中,x為向量,mu為均值,sigma為標準差。5.1.6pyplot中的常用繪圖--繪制概率圖示例fig,ax=plt.subplots()plt.rcParams['font.family']=['SimHei']#用來顯示中文標簽plt.rcParams['axes.unicode_minus']=False#用來正常顯示負號np.random.seed(1587554)mu=100sigma=15x=mu+sigma*np.random.randn(437)num_bins=50n,bins,patches=ax.hist(x,num_bins,normed=1)y=plt.mlab.normpdf(bins,mu,sigma)ax.plot(bins,y,'--')fig.tight_layout()plt.show()5.1.6pyplot中的常用繪圖—雷達圖雷達圖也稱為網絡圖,星圖,蜘蛛網圖,不規則多邊形,極坐標圖等。雷達圖是以從同一點開始的軸上表示的三個或更多個定量變量的二維圖表的形式顯示多變量數據的圖形方法。軸的相對位置和角度通常是無信息的。雷達圖相當于平行坐標圖,軸徑向排列。5.1.6pyplot中的常用繪圖—雷達圖plt.figure(figsize=(6,6))ax=plt.axes([0.1,0.1,0.8,0.8])#建立軸的大小labels='Springs','Summer','Autumn','Winter'x=[15,30,45,10]explode=(0.05,0.05,0.05,0.05)#這個是控制分離的距離的,默認餅圖不分離plt.pie(x,labels=labels,explode=explode,startangle=60,autopct='%1.1f%%')#qutopct在圖中顯示比例值,注意值的格式plt.title('Ranydaysbyseason')plt.tick_params(labelsize=12)plt.show()5.1.6pyplot中的常用繪圖—帶表格的繪圖在繪圖中,有時候需要同時顯示數據表格。Matplotlib在繪圖中提供了table方法可以同時顯示數據表格。代碼見課本5.1.6利用Matplotlib繪制詞云一、安裝需要的包(1)WordCloud

(2)jiebacondainstall-cconda-forgejieba二、詞云生成過程一般生成詞云的過程為:(1)首先使用pandas讀取數據并將需要分析的數據轉化為列表;(2)對獲得的列表數據利用分詞工具jieba進行遍歷分詞;(3)使用WordCloud設置詞云圖片的屬性、掩碼和停用詞,并

生成詞云圖像。詞云生成示例5.1.6利用Matplotlib繪制詞云importjiebafromwordcloudimportWordCloud,STOPWORDSimportPIL.Imageasimageimportnumpyasnpdefget_wordClound():

file=open("data//背影.txt")

mylist=file.read()

word_list=jieba.cut(mylist)

new_text=''.join(word_list)

#加入背景形狀

pic_path='data//myimg.jpg'

img_mask=np.array(image.open(pic_path))

#停用詞庫,英文文本的停用詞直接用stopwords=STOPWORDS詞云生成示例5.1.6利用Matplotlib繪制詞云#中文停用需要導入替換

stopwords=set()

content=[line.strip()forlineinopen('data//hit_stopwords.txt','r',encoding='UTF-8').readlines()]

stopwords.update(content)

#生成詞云

wordcloud=WordCloud(background_color="white",font_path='C:\Windows\Fonts\msyh.ttc',

mask=img_mask,stopwords=stopwords).generate(new_text)

plt.imshow(wordcloud)

plt.axis("off")

plt.show()wordList=get_wordClound()5.2Seaborn數據可視化Seaborn屬于Matplotlib的一個高級接口,使得繪圖更加容易,而且繪圖效果更符合現代人的審美。Seaborn中共有5個大類21種繪圖:風格設置風格設置用以設置繪圖的背景色、風格、字型、字體等。1.Seaborn繪圖設置-Seaborn通過set函數實現風格設置。seaborn.set(context='notebook',style='darkgrid',palette='deep',font='sans-serif',font_scale=1,color_codes=True,rc=None)5.2Seaborn數據可視化importseabornassnsimportnumpyasnpimportmatplotlib.pyplotaspltdefsinplot(flip=2):

x=np.linspace(0,20,50)

foriinrange(1,5):

plt.plot(x,np.cos(x+i*0.8)*(9-2*i)*flip)sinplot()運行結果為matplotlib默認參數下的繪制風格,可以利用seaborn.set進行風格設置。5.2Seaborn數據可視化sns.set(style='darkgrid',font_scale=1.5)sinplot()如果需要轉換為seaborn默認的繪圖設置,只需調用sns.set()方法即可。【例5-30】Seaborn默認風格。5.2Seaborn數據可視化sns.set()sinplot()2.Seaborn主題設置Seaborn將matplotlib的參數劃分為兩個獨立的組合。第一組是設置繪圖的外觀風格的,第二組主要將繪圖的各種元素按比例縮放的,以至可以嵌入到不同的背景環境中。控制這些參數的接口主要有兩對方法:控制風格:axes_style(),

set_style()縮放繪圖:plotting_context(),

set_context()每對方法中的第一個方法(axes_style(),

plotting_context())會返回一組字典參數,而第二個方法(set_style(),

set_context())會設置matplotlib的默認參數。5.2Seaborn數據可視化5.2Seaborn數據可視化【例5-31】主題設置。sns.set_style("whitegrid")

sinplot()利用set_style()設置主題,Seaborn有五個預設的主題:darkgrid、whitegrid、dark、white和ticks,默認為darkgrid。【例5-32】Seaborn軸線設置。5.2Seaborn數據可視化sinplot()sns.despine()despine()方法中可以設置offset參數可以偏移坐標軸,另外,當刻度沒有完全覆蓋整個坐標軸的的范圍時,利用trim參數修剪刻度。【例5-33】利用trim參數修剪刻度。sinplot()sns.despine(offset=20,trim=True)也可以通過despine()控制哪個脊柱將被移除。【例5-34】移除軸線。sinplot()sns.set(style='whitegrid',palette='muted',color_codes=True)sns.despine(left=True,bottom=True)5.2Seaborn數據可視化除了選用預設的風格外,可以利用with語句使用axes_style()方法設置臨時繪圖參數。【例5-35】設置臨時繪圖參數。withsns.axes_style("darkgrid"):

plt.subplot(2,1,1)

sinplot()plt.subplot(2,1,2)sinplot(-1)在seaborn中可以通過將一個字典參數傳遞給axes_style()和set_style()的參數rc進行參數設置。【例5-36】利用字典傳遞參數。5.2Seaborn數據可視化sns.set_style("darkgrid",{"axes.facecolor":".9"})sinplot()3.設置繪圖元素比例seaborn中通過set_context()設置縮放參數,預設的參數有paper、

notebook、

talk和

poster,默認為notebook。【例5-37】設置繪圖元素比例paper。5.2Seaborn數據可視化sns.set_context("paper")sinplot()【例5-38】設置繪圖元素比例poster。sns.set_context("poster")sinplot()【例5-39】設置繪圖元素比例。sns.set_context("notebook",font_scale=1.8,rc={"lines.linewidth":1.5})sinplot()5.2Seaborn數據可視化5.2Seaborn數據可視化1.直方圖Seaborn中利用histplot()或displot()繪制直方圖。【例5-40】繪制iris數據集中Petal.Width的分布圖。5.2.2Seaborn中的常用繪圖importmatplotlib.pyplotaspltdf_iris=pd.read_csv('data//iris.csv')sns.set(color_codes=True)sns.histplot(df_iris['Petal.Width']

,bins=20)2.散點圖在Seaborn中,使用scatterplot繪制散點圖,利用stripplot繪制各變量在每個類別的值。【例5-41】在iris數據集中,顯示Petal.Width與Petal.Length的散點圖。5.2.2Seaborn中的常用繪圖【例5-42】在iris數據集中,顯示Petal.Width在Species上值的分布。5.2.2Seaborn中的常用繪圖sns.set(style='white',color_codes=True)

#設置樣式

sns.stripplot(x=df_iris['Species'],y=df_iris['Petal.Width'],data=df_iris)sns.despine()

#去坐標軸3.箱線圖有時候,散點圖表達的值的分布信息有限,因此需要一些其它的繪圖。箱線圖可以觀察四分位數、中位數和極值。Seaborn中利用boxplot()繪制箱線圖。【例5-43】用boxplot繪制箱線圖。5.2.2Seaborn中的常用繪圖sns.boxplot(x=df_iris['Species'],y

=

df_iris['Petal.Width'])

plt.show()4.pairplot()在seaborn中利用pairplot方法實現數據特征的兩兩對比。默認是所有特征,可以通過vars參數指定部分特征。【例5-44】利用pairplot繪圖。5.2.2Seaborn中的常用繪圖sns.set(style="ticks")

g=sns.pairplot(df_iris,vars=['Sepal.Length','Petal.Length'])5.violinplot小提琴圖小提琴圖其實是箱線圖與核密度圖的結合,箱線圖展示了分位數的位置,小提琴圖則展示了任意位置的密度,通過小提琴圖可以知道哪些位置的密度較高。在圖中,白點是中位數,黑色盒型的范圍是下四分位點到上四分位點,細黑線表示須。外部形狀即為核密度估計(在概率論中用來估計未知的密度函數,屬于非參數檢驗方法之一)。【例5-45】琴圖繪制。5.2.2Seaborn中的常用繪圖sns.set_style("whitegrid")ax=sns.violinplot(x=df_iris['Petal.Length'])6.柱狀圖在Seaborn中使用barplot函數繪制柱狀圖,默認情況下,繪制的y軸是平均值。【例5-46】利用barplot繪制柱狀圖。5.2.2Seaborn中的常用繪圖sns.barplot(x=df_iris['Species'],y=df_iris['Petal.Length'],data=df_iris)在柱狀圖中,經常會繪制類別的計數柱狀圖,在matplotlib中需要對DataFrame進行計算,而在Seaborn中則使用countplot函數即可。【例5-47】利用countplot繪制計數柱狀圖。5.2.2Seaborn中的常用繪圖importseabornassnsimportmatplotlib.pyplotaspltsns.set(style="darkgrid",font_scale=1.2)titanic=sns.load_dataset("titanic")plt.subplot(1,2,1)sns.countplot(x="class",hue="who",data=titanic)plt.subplot(1,2,2)sns.countplot(x="who",data=titanic,facecolor=(0,0,0,0),linewidth=5,edgecolor=sns.color_palette("dark",3))plt.show()7.多變量圖在Matplotlib中,為了繪制兩個變量的分布關系,常使用散點圖的方法。在Seaborn中,使用jointplot函數繪制一個多面板圖,不僅可以顯示兩個變量的關系,還可以顯示每個單變量的分布情況。【例5-48】利用jointplot函數繪制多面板圖。5.2.2Seaborn中的常用繪圖sns.jointplot(x='Petal.Length',y='Petal.Width',data=df_iris)在jointplot函數中,改變kind參數為kde,但變量的分布就用密度圖來代替,而散點圖則會被等高線圖代替。【例5-49】利用jointplot方法繪制等高線圖。5.2.2Seaborn中的常用繪圖sns.jointplot(x='Petal.Length',y='Petal.Width',data=df_iris,kind='kde')8.回歸圖繪制回歸圖可以揭示兩個變量間的線性關系。Seaborn中,使用regplot函數繪制回歸圖。【例5-50】使用regplot函數繪制回歸圖。5.2.2Seaborn中的常用繪圖sns.regplot(x='Petal.Length',y='Petal.Width',data=df_iris)9.關系類圖Seaborn中的relplot方法關注的是統計量之間的關系,利用kind參數設置,可以繪制出曲線圖和散點圖。Relplot方法的必選參數有以下幾個:x,y為數據中變量的名稱,一般為數值型數據;data是DataFrame類型的數據表;kind指定繪圖類型,取值為“scatter”相當于scatterplot(),用來繪制散點圖,取值“line”相當于lineplot(),用來繪制曲線。Kind缺省取值為"scatter"。【例5-51】繪制tips數據集中小費總額和小費的關系圖。5.2.2Seaborn中的常用繪圖importseabornassnstips=sns.load_dataset('tips')sns.set(style="ticks",font_scale=1.5)sns.relplot(x="total_bill",y="tip",data=tips)#g=sns.relplot(x="total_bill",y="tip",hue="day",data=tips)g=sns.relplot(x="total_bill",y="tip",hue="day",col="time",data=tips)5.2.2Seaborn中的常用繪圖10熱力圖熱力圖是數據可視化項目中比較常用的數據顯示方式。熱力圖通過顏色變化程度直觀反應出熱點分布,區域聚集等數據信息。熱力圖實現過程就是通過簡單的數學變化,將離散的點信息映射為圖像。【例5-52】繪制flights數據集中年份、月份和乘客數據的熱力圖。5.2.2Seaborn中的常用繪圖importseabornassnsflights=sns.load_dataset("flights")flights=flights.pivot("month","year","passengers")display(flights)sns.heatmap(flights,alpha=0.7)pyecharts是基于Echart圖表的一個類庫,而Echart是百度開源的一個可視化JavaScript庫。pyecharts主要基于web瀏覽器進行顯示,繪制的圖形比較多,包括折線圖、柱狀圖、餅圖、漏斗圖、地圖、極坐標圖等,代碼量很少,而且很靈活,繪制出來的圖形很美觀。使用pyecharts時,需要安裝相應的庫,安裝命令為:pipinstallpyecharts5.3pyecharts數據可視化5.3pyecharts數據可視化5.3.1pyecharts的使用方法圖形繪制過程,基本上所有的圖表類型都是這樣繪制的:chart_name=Type()

#初始化具體類型圖表chart_name.add()

#添加數據及配置項chart_name.render()

#生成本地文件(html/svg/jpeg/png/pdf/gif)chart_name.render_notebook

#在jupyternotebook中顯示1.柱狀圖利用Bar方法可以繪制柱狀圖。方法及說明

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論