python可視化分析的實現(matplotlib、seaborn、ggplot2)
一、matplotlib庫
1、基本繪圖命令
import matplotlib.pyplot as plt plt.figure(figsize=(5,4)) #設置圖形大小 plt.rcParams['axes.unicode_minus']=False #正常顯示負號 plt.rcParams['font.sans-self']=['Kai Ti'] #設置字體,這裡是楷體,SimHei表示黑體 #基本統計圖 plt.bar(x,y);plt.pie(y,labels=x);plt.plot(x,y); plt.hist(df.身高) #若參數density=True則是頻率直方圖
3、圖形參數設置
顏色: plt.plot(x,y,c=‘red’) #參數c控制顏色
橫縱坐標軸范圍: plt.xlim(0,100),plt.ylim(0,8)
橫縱坐標軸名稱: plt.xlabel(),plt.ylabel()
橫縱坐標軸刻度: plt.xticks(range(len(x)),x)
線形和符號: plt.plot(x,y,linestyle=’–’,marker=‘o’) #實線:’-‘ ;虛線:’–’; ‘.’指點線
附加參考線: plt.axvline(x=1);plt.axhline(y=4)
文字標註: plt.text(3,5,‘peak point’) #參數表示:坐標+文字
圖例: plt.plot(x,y,label=‘折線’);plt.legend()
分面繪圖:
#一行兩圖 plt.subplot(121) plt.bar(x,y) plt.subplot(122) plt.plot(x,y) #一頁多圖 fig,ax=plt.subplots(2,2,figsize=(15,12)) # 2行2列放4個圖,figsize控制大小 ax[0,0].bar(x,y);ax[0,1].plot(x,y); ax[1,0].pie(x,y);ax[1,1].plot(y,'.',linewidth=3)
具體的參數color、linestyle、圖例位置設置
顏色字符(color)
字符 | 代表顏色 |
---|---|
r | 紅色 |
b | 藍色 |
g | 綠色 |
w | 白色 |
c | 青色 |
m | 洋紅 |
y | 黃色 |
k | 黑色 |
風格字符(linestyle)
字符 | 代表風格 |
---|---|
– (一個連字符) | 實線 |
– (兩個連字符) | 虛線 |
-. | 點劃線 |
: | 點虛線 |
‘ ‘ | 留空,空格 |
loc 參數(以matplotlib添加圖例為例說明位置)
loc string | loc code | 位置 |
---|---|---|
“best” | 0 | 右上角(默認) |
“upper right” | 1 | 右上角 |
“upper left” | 2 | 左上角 |
“lower left” | 3 | 左下角 |
“lower right” | 4 | 右下角 |
“right” | 5 | 中右側 |
“center left” | 6 | 中左側 |
“center right” | 7 | 中右側 |
“low center” | 8 | 中下方 |
“upper center” | 9 | 中上方 |
“center” | 10 | 中間 |
4、特殊統計圖的繪制
4.1 數學函數圖
import matplotlib.pyplot as plt #加載基本繪圖包 plt.rcParams['font.sans-serif']=['SimHei']; #SimHei黑體 plt.rcParams['axes.unicode_minus']=False; #正常顯示圖中負號 import numpy as np #加載軟件包numpy import math #加載軟件包math x=np.linspace(0,2*math.pi);x #生成[0,2*pi]序列 ,作為橫坐標取值 plt.plot(x,np.sin(x)) #y=sinx 正弦函數 plt.plot(x,np.cos(x)) #y=cosx 餘弦函數 plt.plot(x,np.log(x)) #y=lnx #對數函數 plt.plot(x,np.exp(x)) #y=e^x 指數函數
數學函數也可以用pandas庫繪制,可詳見我的另一篇博客:文章鏈接
#極坐標圖 t=np.linspace(0,2*math.pi) x=3*np.sin(t); y=5*np.cos(t) plt.plot(x,y); plt.text(0,0,r'$\frac{x^2}{3^2}+\frac{y^2}{5^2}=1$',fontsize=20) #python借鑒的LATEX的格式,可以直接在圖中添加公式
4.2 氣泡圖
import pandas as pd df=pd.read_excel('data.xlsx') plt.scatter(df['身高'], df['體重'], s=df['支出']) #在散點圖的基礎上加上點的大小,例子中s=df['支出']就是將指各樣本點支出越多,點面積就越大
4.3 三維曲面圖
from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = Axes3D(fig) X = np.arange(-4, 4, 0.5) Y = np.arange(-4, 4, 0.5) X, Y = np.meshgrid(X, Y) Z = (X**2+ Y**2) ax.plot_surface(X, Y, Z) #該圖像就是表示函數z=x^2+y^2
二、seaborn庫
1、常用統計圖
1.1 箱線圖
import seaborn as sns #加載軟件包seaborn #箱線圖 sns.boxplot(x=df['身高']) #豎著放的箱線圖,也就是將 x 換成 y sns.boxplot(y=df['身高']) #分組繪制箱線圖 sns.boxplot(x='性別', y='身高',data=df) #將身高按性別分組後繪制
1.2 小提琴圖
sns.violinplot(x='性別', y='支出', data=df) #箱線圖的變種,可以加第三個類別參數hue
1.3 點圖
sns.stripplot(x='性別', y='身高', data=df, jitter=True) #分組的數據(定性+定量)畫的點圖,jitter參數為True表示將點分散開來,默認為false
1.4 條圖與計數圖
#條圖,即柱形圖 sns.barplot(x='性別', y='身高', data=df, ci=0, palette="Blues_d") #palette用於設置顏色 #計數圖 sns.countplot(x='性別', hue="開設", data=df) #都是分類變量
1.5 分組圖
#按性別、開設依次分組後計數,aspect指比例大小 sns.factorplot(x='性別', col="開設", col_wrap=3, data=df, kind="count", size=2.5, aspect=.8)
1.6 概率分佈圖
#displot:直方圖+密度函數,bins表示分的組數,kde=False表示不畫出密度曲線,rug表示有數據的地方就標註出來 sns.distplot(df['身高'], kde=True, bins=20, rug=True) #自定義漸進正態函數圖像 def norm_sim2(N=1000,n=10): xbar=np.zeros(N) for i in range(N): xbar[i]=np.random.uniform(0,1,n).mean()#[0,1]上均勻隨機數均值 sns.distplot(xbar,bins=50) print(pd.DataFrame(xbar).describe().T) norm_sim2(N=100000,n=50)
2、聯合圖
sns.jointplot(x='身高', y='體重', data=df)#畫的散點圖+單個變量的直方圖
3、配對圖
#針對多個變量,兩兩配對,畫在一起 sns.pairplot(df[['身高','體重','支出']]) #將各變量間關系共放一張圖上,在多元統計分析中很有用
三、ggplot庫
ggplot庫是采用的繪畫中圖層的思想,即一層一層往上疊加,先畫好坐標,再添線,再增加其他操作,最後用 + 號連接起來,操作起來更有邏輯章法,語句簡潔。ggplot新包是plotnine,與R語言的ggplot2對應,使用起來更方便,故直接import plotnine即可,裡面的函數使用與ggplot是基本一樣的
1、圖層畫法+常用圖形
繪制直角坐標系和字體
GP=ggplot(aes(x='身高',y='體重'),data=df)
在此基礎上增加線圖
GP + geom_line()+ theme_grey(base_family = 'SimHei')#還可以再往上疊加,+geom_point()就是在折線圖基礎上加上散點圖
改為有三個變量的點圖,不同類型畫不同記號(shape)/顏色(color)
ggplot(df,aes(x='身高',y='體重',color='性別'))+geom_point()+ theme_grey(base_family = 'SimHei')
改為分面圖:
用pandas繪制分組統計圖還需要先groupby,ggplot一步到位更加簡便
ggplot(df,aes(x='身高',y='體重'))+geom_point()+facet_wrap('性別') + theme_grey(base_family = 'SimHei') #facet_wrap('性別')表示按性別分成兩組畫分面圖
此外,+theme_bw()等可以設置圖片背景、主題
2、快速繪圖
ggplot也可以像pandas一樣,在qplot函數中設置參數geom的取值而直接改變圖像類型
#快速繪制直方圖 qplot(x='身高',data=df, geom='histogram')+ theme_grey(base_family = 'SimHei') #快速繪制柱形圖 qplot('開設',data=df, geom='bar')+ theme_grey(base_family = 'SimHei') #默認散點圖 qplot('身高', '體重', data=df, color='性別') + theme_grey(base_family = 'SimHei')
以上是基於《python數據分析基礎教程 王斌會》整理的學習筆記,還有許多參數設置沒有寫明,以及pyecharts 動態圖神器,日後學習瞭再一點點補充吧~
到此這篇關於python可視化分析的實現(matplotlib、seaborn、ggplot2)的文章就介紹到這瞭,更多相關python 可視化內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- R語言數據可視化ggplot繪制置信區間與分組繪圖技巧
- python中用ggplot繪制畫圖實例講解
- python設置 matplotlib 正確顯示中文的四種方式
- R語言使用ggplot繪制畫中畫細節放大的方法
- R語言學習ggplot2繪制統計圖形包全面詳解