日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Matplotlib画各种图

發布時間:2023/12/20 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matplotlib画各种图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

版權聲明:本文為博主原創文章,未經博主允許不得轉載。?https://blog.csdn.net/kun1280437633/article/details/80841364

看本文前,請看matlplotlib使用教程?https://blog.csdn.net/kun1280437633/article/details/80370622,有基礎請忽略

Matplotlib制作動畫https://blog.csdn.net/kun1280437633/article/details/108483384

matplotlib(條形圖)

一、簡單垂直條形圖


?

案例一:直轄市GDP水平

中國的四個直轄市分別為北京市、上海市、天津市和重慶市,其2017年上半年的GDP分別為12406.8億、13908.57億、9386.87億、9143.64億。對于這樣一組數據,我們該如何使用條形圖來展示各自的GDP水平呢?

# 導入繪圖模塊 import matplotlib.pyplot as plt # 構建數據 GDP = [12406.8,13908.57,9386.87,9143.64] # 中文亂碼的處理 plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] plt.rcParams['axes.unicode_minus'] = False # 繪圖 plt.bar(range(4), GDP, align = 'center',color='steelblue', alpha = 0.8) # 添加軸標簽 plt.ylabel('GDP') # 添加標題 plt.title('四個直轄市GDP大比拼') # 添加刻度標簽 plt.xticks(range(4),['北京市','上海市','天津市','重慶市']) # 設置Y軸的刻度范圍 plt.ylim([5000,15000]) # 為每個條形圖添加數值標簽 for x,y in enumerate(GDP):plt.text(x,y+100,'%s' %round(y,1),ha='center') # 顯示圖形 plt.show()

代碼解讀

  • 由于matplotlib對中文的支持并不是很友好,所以需要提前對繪圖進行字體的設置,即通過rcParams來設置字體,這里將字體設置為微軟雅黑,同時為了避免坐標軸不能正常的顯示負號,也需要進行設置;

  • bar函數指定了條形圖的x軸、y軸值,設置x軸刻度標簽為水平居中,條形圖的填充色color為鐵藍色,同時設置透明度alpha為0.8;

  • 添加y軸標簽、標題、x軸刻度標簽值,為了讓條形圖顯示各柱體之間的差異,將y軸范圍設置在5000~15000;

  • 通過循環的方式,添加條形圖的數值標簽;

二、簡單水平條形圖

?

案例二:同一本書不同平臺最低價比較

很多人在買一本書的時候,都比較喜歡貨比三家,例如《python數據分析實戰》在亞馬遜、當當網、中國圖書網、京東和天貓的最低價格分別為39.5、39.9、45.4、38.9、33.34。針對這個數據,我們也可以通過條形圖來完成,這里使用水平條形圖來顯示:

# 導入繪圖模塊 import matplotlib.pyplot as plt # 構建數據 price = [39.5,39.9,45.4,38.9,33.34] # 中文亂碼的處理 plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] plt.rcParams['axes.unicode_minus'] = False # 繪圖 plt.barh(range(5), price, align = 'center',color='steelblue', alpha = 0.8) # 添加軸標簽 plt.xlabel('價格') # 添加標題 plt.title('不同平臺書的最低價比較') # 添加刻度標簽 plt.yticks(range(5),['亞馬遜','當當網','中國圖書網','京東','天貓']) # 設置Y軸的刻度范圍 plt.xlim([32,47]) # 為每個條形圖添加數值標簽 for x,y in enumerate(price):plt.text(y+0.1,x,'%s' %y,va='center') # 顯示圖形 ? ? plt.show()

代碼解讀

  • 水平條形圖的繪制與垂直條形圖的繪制步驟一致,只是調用了barh函數來完成。需要注意的是,條形圖的數值標簽設置有一些不一樣,需要將標簽垂直居中顯示,使用va參數即可。

三、水平交錯條形圖

?

以上講的簡單垂直和水平條形圖是基于一種離散變量的情況,針對兩種離散變量的條形圖我們可以使用水平交錯條形圖和堆疊條形圖,下面我們就來看看這兩種條形圖是如何繪制的。

案例三:胡潤財富榜:億萬資產超高凈值家庭數

利用水平交錯條形圖對比2016年和2017年億萬資產超高凈值家庭數(top5),其數據如下:

# 導入繪圖模塊 import matplotlib.pyplot as pltimport numpy as np # 構建數據Y2016 = [15600,12700,11300,4270,3620] Y2017 = [17400,14800,12000,5200,4020] labels = ['北京','上海','香港','深圳','廣州'] bar_width = 0.45 # 中文亂碼的處理 plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] plt.rcParams['axes.unicode_minus'] = False # 繪圖 plt.bar(np.arange(5), Y2016, label = '2016', color = 'steelblue', alpha = 0.8, width = bar_width) plt.bar(np.arange(5)+bar_width, Y2017, label = '2017', color = 'indianred', alpha = 0.8, width = bar_width) # 添加軸標簽 plt.xlabel('Top5城市') plt.ylabel('家庭數量') # 添加標題 plt.title('億萬財富家庭數Top5城市分布') # 添加刻度標簽 plt.xticks(np.arange(5)+bar_width,labels) # 設置Y軸的刻度范圍 plt.ylim([2500, 19000]) # 為每個條形圖添加數值標簽 for x2016,y2016 in enumerate(Y2016):plt.text(x2016, y2016+100, '%s' %y2016)for x2017,y2017 in enumerate(Y2017):plt.text(x2017+bar_width, y2017+100, '%s' %y2017) # 顯示圖例 plt.legend() # 顯示圖形 plt.show()

代碼解讀

  • 水平交錯條形圖繪制的思想很簡單,就是在第一個條形圖繪制好的基礎上,往左移一定的距離,再去繪制第二個條形圖,所以在代碼中會出現兩個bar函數;

  • 圖例的繪制需要在bar函數中添加label參數;color和alpha參數分別代表條形圖的填充色和透明度;

  • 給條形圖添加數值標簽,同樣需要使用兩次for循環的方式實現;

四、垂直堆疊條形圖


???????

垂直堆疊條形圖的繪制思想與水平交錯條形圖一樣,只不過一個是向上偏移,一個是往左偏移,具體我們以案例說明。

案例四:2017年物流運輸量情況分布

# 導入模塊 import matplotlib.pyplot as plt import numpy as np import pandas as pd# 導入數據 data = pd.read_excel('C:\\Users\\Administrator\\Desktop\\貨運.xls')# 繪圖 plt.bar(np.arange(8), data.loc[0,:][1:], color = 'red', alpha = 0.8, label = '鐵路', align = 'center') plt.bar(np.arange(8), data.loc[1,:][1:], ?bottom = data.loc[0,:][1:], color = 'green', alpha = 0.8, label = '公路', align = 'center') plt.bar(np.arange(8), data.loc[2,:][1:], ?bottom = data.loc[0,:][1:]+data.loc[1,:][1:], color = 'm', alpha = 0.8, label = '水運', align = 'center') plt.bar(np.arange(8), data.loc[3,:][1:], ?bottom = data.loc[0,:][1:]+data.loc[1,:][1:]+data.loc[2,:][1:], color = 'black', alpha = 0.8, label = '民航', align = 'center') # 添加軸標簽 plt.xlabel('月份') plt.ylabel('貨物量(萬噸)') # 添加標題 plt.title('2017年各月份物流運輸量') # 添加刻度標簽 plt.xticks(np.arange(8),data.columns[1:]) # 設置Y軸的刻度范圍 plt.ylim([0,500000])# 為每個條形圖添加數值標簽 for x_t,y_t in enumerate(data.loc[0,:][1:]):plt.text(x_t,y_t/2,'%sW' %(round(y_t/10000,2)),ha='center', color = 'white')for x_g,y_g in enumerate(data.loc[0,:][1:]+data.loc[1,:][1:]):plt.text(x_g,y_g/2,'%sW' %(round(y_g/10000,2)),ha='center', color = 'white') for x_s,y_s in enumerate(data.loc[0,:][1:]+data.loc[1,:][1:]+data.loc[2,:][1:]):plt.text(x_s,y_s-20000,'%sW' %(round(y_s/10000,2)),ha='center', color = 'white') ? ?# 顯示圖例 plt.legend(loc='upper center', ncol=4) # 顯示圖形 ? ? plt.show()

代碼解讀

  • 垂直條形圖的繪制不僅僅需要提供x,y軸的數值,還需要提供bottom參數,其目的就是在某個條形圖頂端的基礎上,繪制其他條形圖,以此類推可以繪制多個堆疊條形圖;

  • 圖例的位置選擇在了正上方,且設置列數為4,表面圖例以一排的形式展現;

  • 堆疊條形圖的數值標簽,任然是按照y軸方向堆疊的思想,貼上數值標簽值;

  • 由于航空運輸的貨物量非常少,導致圖中幾乎無法顯示;

?

matplotlib(餅圖)

我們用條形圖來展示離散變量的分布呈現,在常見的統計圖像中,還有一種圖像可以表示離散變量各水平占比情況,這就是我們要講解的餅圖。餅圖的繪制可以使用matplotlib庫中的pie函數,首先我們來看看這個函數的參數說明。


pie函數參數解讀

plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False)
  • x:指定繪圖的數據;

  • explode:指定餅圖某些部分的突出顯示,即呈現爆炸式;

  • labels:為餅圖添加標簽說明,類似于圖例說明;

  • colors:指定餅圖的填充色;

  • autopct:自動添加百分比顯示,可以采用格式化的方法顯示;

  • pctdistance:設置百分比標簽與圓心的距離;

  • shadow:是否添加餅圖的陰影效果;

  • labeldistance:設置各扇形標簽(圖例)與圓心的距離;

  • startangle:設置餅圖的初始擺放角度;

  • radius:設置餅圖的半徑大小;

  • counterclock:是否讓餅圖按逆時針順序呈現;

  • wedgeprops:設置餅圖內外邊界的屬性,如邊界線的粗細、顏色等;

  • textprops:設置餅圖中文本的屬性,如字體大小、顏色等;

  • center:指定餅圖的中心點位置,默認為原點

  • frame:是否要顯示餅圖背后的圖框,如果設置為True的話,需要同時控制圖框x軸、y軸的范圍和餅圖的中心位置;

    ?


餅圖的繪制

案例:芝麻信用失信用戶分析

關于pie函數的參數我們講了這么多,光講不練假把式,我們接下來通過案例,來繪制一個個性化的餅圖。關于繪圖數據,我們借用芝麻信用近300萬失信人群的樣本統計數據,該數據顯示,從受教育水平上來看,中專占比25.15%,大專占比37.24%,本科占比33.36%,碩士占比3.68%,剩余的其他學歷占比0.57%。對于這樣一組數據,我們該如何使用餅圖來呈現呢?

# 導入第三方模塊 import matplotlib.pyplot as plt# 設置繪圖的主題風格(不妨使用R中的ggplot分隔) plt.style.use('ggplot')# 構造數據 edu = [0.2515,0.3724,0.3336,0.0368,0.0057] labels = ['中專','大專','本科','碩士','其他']explode = [0,0.1,0,0,0] ?# 用于突出顯示大專學歷人群 colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555'] # 自定義顏色# 中文亂碼和坐標軸負號的處理 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] plt.rcParams['axes.unicode_minus'] = False# 將橫、縱坐標軸標準化處理,保證餅圖是一個正圓,否則為橢圓 plt.axes(aspect='equal')# 控制x軸和y軸的范圍 plt.xlim(0,4) plt.ylim(0,4)# 繪制餅圖 plt.pie(x = edu, # 繪圖數據explode=explode, # 突出顯示大專人群labels=labels, # 添加教育水平標簽colors=colors, # 設置餅圖的自定義填充色autopct='%.1f%%', # 設置百分比的格式,這里保留一位小數pctdistance=0.8, ?# 設置百分比標簽與圓心的距離labeldistance = 1.15, # 設置教育水平標簽與圓心的距離startangle = 180, # 設置餅圖的初始角度radius = 1.5, # 設置餅圖的半徑counterclock = False, # 是否逆時針,這里設置為順時針方向wedgeprops = {'linewidth': 1.5, 'edgecolor':'green'},# 設置餅圖內外邊界的屬性值textprops = {'fontsize':12, 'color':'k'}, # 設置文本標簽的屬性值center = (1.8,1.8), # 設置餅圖的原點frame = 1 )# 是否顯示餅圖的圖框,這里設置顯示# 刪除x軸和y軸的刻度 plt.xticks(()) plt.yticks(()) # 添加圖標題 plt.title('芝麻信用失信用戶教育水平分布')# 顯示圖形 plt.show()

?

matplotlib(箱線圖)

針對離散變量我們可以使用常見的條形圖和餅圖完成數據的可視化工作,那么,針對數值型變量,我們也有很多可視化的方法,例如箱線圖、直方圖、折線圖、面積圖、散點圖等等。這一期,我們就先來介紹一下數值型變量的箱線圖繪制。箱線圖一般用來展現數據的分布(如上下四分位值、中位數等),同時,也可以用箱線圖來反映數據的異常情況。

boxplot函數的參數解讀

繪圖之前,我們先來講解一下matplotlib包中boxplot函數的參數含義及使用方法:

plt.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None)
  • x:指定要繪制箱線圖的數據;

  • notch:是否是凹口的形式展現箱線圖,默認非凹口;

  • sym:指定異常點的形狀,默認為+號顯示;

  • vert:是否需要將箱線圖垂直擺放,默認垂直擺放;

  • whis:指定上下須與上下四分位的距離,默認為1.5倍的四分位差;

  • positions:指定箱線圖的位置,默認為[0,1,2…];

  • widths:指定箱線圖的寬度,默認為0.5;

  • patch_artist:是否填充箱體的顏色;

  • meanline:是否用線的形式表示均值,默認用點來表示;

  • showmeans:是否顯示均值,默認不顯示;

  • showcaps:是否顯示箱線圖頂端和末端的兩條線,默認顯示;

  • showbox:是否顯示箱線圖的箱體,默認顯示;

  • showfliers:是否顯示異常值,默認顯示;

  • boxprops:設置箱體的屬性,如邊框色,填充色等;

  • labels:為箱線圖添加標簽,類似于圖例的作用;

  • filerprops:設置異常值的屬性,如異常點的形狀、大小、填充色等;

  • medianprops:設置中位數的屬性,如線的類型、粗細等;

  • meanprops:設置均值的屬性,如點的大小、顏色等;

  • capprops:設置箱線圖頂端和末端線條的屬性,如顏色、粗細等;

  • whiskerprops:設置須的屬性,如顏色、粗細、線的類型等;

餅圖的繪制

案例:titanic:不同等級倉位的年齡箱線圖

?

  • 整體乘客的年齡箱線圖

# 導入第三方模塊 import pandas as pd import matplotlib.pyplot as plt# 讀取Titanic數據集 titanic = pd.read_csv('titanic_train.csv') # 檢查年齡是否有缺失 any(titanic.Age.isnull()) # 不妨刪除含有缺失年齡的觀察 titanic.dropna(subset=['Age'], inplace=True)# 設置圖形的顯示風格 plt.style.use('ggplot')# 設置中文和負號正常顯示 plt.rcParams['font.sans-serif'] = 'Microsoft YaHei' plt.rcParams['axes.unicode_minus'] = False# 繪圖:整體乘客的年齡箱線圖 plt.boxplot(x = titanic.Age, # 指定繪圖數據patch_artist=True, # 要求用自定義顏色填充盒形圖,默認白色填充showmeans=True, # 以點的形式顯示均值boxprops = {'color':'black','facecolor':'#9999ff'}, # 設置箱體屬性,填充色和邊框色flierprops = {'marker':'o','markerfacecolor':'red','color':'black'}, # 設置異常值屬性,點的形狀、填充色和邊框色meanprops = {'marker':'D','markerfacecolor':'indianred'}, # 設置均值點的屬性,點的形狀、填充色medianprops = {'linestyle':'--','color':'orange'}) # 設置中位數線的屬性,線的類型和顏色 # 設置y軸的范圍 plt.ylim(0,85)# 去除箱線圖的上邊框與右邊框的刻度標簽 plt.tick_params(top='off', right='off') # 顯示圖形 plt.show()

對于所有乘客而言,從圖中容易發現,乘客的平均年齡在30歲,有四分之一的人低于20歲,另有四分之一的人超過38歲,換句話說,有一半的人,年齡落在20~38歲之間;從均值(紅色的菱形)略高于中位數(黃色虛線)來看,說明年齡是有偏的,并且是右偏;同時,我們也會發現一些紅色的異常值,這些異常值的年齡均在64歲以上

  • 不同等級倉的年齡箱線圖

# 按艙級排序,為了后面正常顯示分組盒形圖的順序 titanic.sort_values(by = 'Pclass', inplace=True)# 通過for循環將不同倉位的年齡人群分別存儲到列表Age變量中 Age = [] Levels = titanic.Pclass.unique() for Pclass in Levels:Age.append(titanic.loc[titanic.Pclass==Pclass,'Age'])# 繪圖 plt.boxplot(x = Age, patch_artist=True,labels = ['一等艙','二等艙','三等艙'], # 添加具體的標簽名稱showmeans=True, boxprops = {'color':'black','facecolor':'#9999ff'}, flierprops = {'marker':'o','markerfacecolor':'red','color':'black'},meanprops = {'marker':'D','markerfacecolor':'indianred'},medianprops = {'linestyle':'--','color':'orange'})# 顯示圖形 plt.show()

如果對人群的年齡按不同的艙位來看,我們會發現一個明顯的趨勢,就是艙位等級越高的乘客,他們的年齡越高,三種艙位的平均年齡為38、30和25,說明年齡越是偏大一點,他們的經濟能力會越強一些,所買的艙位等級可能就會越高一些。同時,在二等艙和三等艙內,乘客的年齡上存在一些異常用戶。

matplotlib(直方圖)

我們仔細的講解了如何繪制數值型變量的箱線圖,展現數據的分布,我們還可以使用直方圖來說明,同過圖形的長相,就可以快速的判斷數據是否近似服從正態分布。之所以我們很關心數據的分布,是因為在統計學中,很多假設條件都會包括正態分布,故使用直方圖來定性的判定數據的分布情況,尤其顯得重要。這期我們就來介紹Python中如何繪制一個直方圖。

hist函數的參數解讀


????????繪圖之前,我們先來講解一下matplotlib包中hist函數的參數含義及使用方法:

plt.hist(x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False)
  • x:指定要繪制直方圖的數據;

  • bins:指定直方圖條形的個數;

  • range:指定直方圖數據的上下界,默認包含繪圖數據的最大值和最小值;

  • normed:是否將直方圖的頻數轉換成頻率;

  • weights:該參數可為每一個數據點設置權重;

  • cumulative:是否需要計算累計頻數或頻率;

  • bottom:可以為直方圖的每個條形添加基準線,默認為0;

  • histtype:指定直方圖的類型,默認為bar,除此還有’barstacked’, ‘step’, ?‘stepfilled’;

  • align:設置條形邊界值的對其方式,默認為mid,除此還有’left’和’right’;

  • orientation:設置直方圖的擺放方向,默認為垂直方向;

  • rwidth:設置直方圖條形寬度的百分比;

  • log:是否需要對繪圖數據進行log變換;

  • color:設置直方圖的填充色;

  • label:設置直方圖的標簽,可通過legend展示其圖例;

  • stacked:當有多個數據時,是否需要將直方圖呈堆疊擺放,默認水平擺放;

一元直方圖的繪制


案例:titanic數據集

  • 整體乘客的年齡直方圖

# 導入第三方包 import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.mlab as mlab# 中文和負號的正常顯示 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] plt.rcParams['axes.unicode_minus'] = False# 讀取Titanic數據集 titanic = pd.read_csv('titanic_train.csv') # 檢查年齡是否有缺失any(titanic.Age.isnull()) # 不妨刪除含有缺失年齡的觀察 titanic.dropna(subset=['Age'], inplace=True)# 設置圖形的顯示風格 plt.style.use('ggplot') # 繪圖:乘客年齡的頻數直方圖 plt.hist(titanic.Age, # 繪圖數據bins = 20, # 指定直方圖的條形數為20個color = 'steelblue', # 指定填充色edgecolor = 'k', # 指定直方圖的邊界色label = '直方圖' )# 為直方圖呈現標簽# 去除圖形頂部邊界和右邊界的刻度 plt.tick_params(top='off', right='off') # 顯示圖例 plt.legend() # 顯示圖形 plt.show()

上圖繪制的是年齡的頻數直方圖,從整體的分布來看,有點像正態分布,兩邊低中間高的倒鐘形狀。除此,我們還可以繪制累計頻率直方圖,并且設置5歲為組距,如下代碼可以表示成:

# 繪圖:乘客年齡的累計頻率直方圖 plt.hist(titanic.Age, # 繪圖數據bins = np.arange(titanic.Age.min(),titanic.Age.max(),5), # 指定直方圖的組距normed = True, # 設置為頻率直方圖cumulative = True, # 積累直方圖color = 'steelblue', # 指定填充色edgecolor = 'k', # 指定直方圖的邊界色label = '直方圖' )# 為直方圖呈現標簽# 設置坐標軸標簽和標題 plt.title('乘客年齡的頻率累計直方圖') plt.xlabel('年齡') plt.ylabel('累計頻率')# 去除圖形頂部邊界和右邊界的刻度 plt.tick_params(top='off', right='off')# 顯示圖例 plt.legend(loc = 'best') # 顯示圖形 plt.show()

通過累計頻率直方圖就可以快速的發現什么年齡段的人數占了多少比重,例如35歲以下的乘客占了7成,這種圖的解讀有點像帕累托圖。為了測試數據集是否近似服從正態分布,需要在直方圖的基礎上再繪制兩條線,一條表示理論的正態分布曲線,另一條為核密度曲線,目的就是比較兩條曲線的吻合度,越吻合就說明數據越近似于正態分布。接下來我們就在直方圖的基礎上再添加兩條曲線:

# 正太分布圖 plt.hist(titanic.Age, # 繪圖數據bins = np.arange(titanic.Age.min(),titanic.Age.max(),5), # 指定直方圖的組距normed = True, # 設置為頻率直方圖color = 'steelblue', # 指定填充色edgecolor = 'k') # 指定直方圖的邊界色# 設置坐標軸標簽和標題 plt.title('乘客年齡直方圖') plt.xlabel('年齡') plt.ylabel('頻率')# 生成正態曲線的數據 x1 = np.linspace(titanic.Age.min(), titanic.Age.max(), 1000) normal = mlab.normpdf(x1, titanic.Age.mean(), titanic.Age.std()) # 繪制正態分布曲線 line1, = plt.plot(x1,normal,'r-', linewidth = 2) # 生成核密度曲線的數據 kde = mlab.GaussianKDE(titanic.Age) x2 = np.linspace(titanic.Age.min(), titanic.Age.max(), 1000) # 繪制 line2, = plt.plot(x2,kde(x2),'g-', linewidth = 2)# 去除圖形頂部邊界和右邊界的刻度 plt.tick_params(top='off', right='off')# 顯示圖例 plt.legend([line1, line2],['正態分布曲線','核密度曲線'],loc='best') # 顯示圖形 plt.show()

從直方圖的展現來看,乘客的年齡分布與理論正態分布曲線存在一些差異,說明不服從正態分布,而且從圖中也能看見,年齡呈現右偏的特征

二元直方圖的繪制

???????上面繪制的直方圖都是基于所有乘客的年齡,如果想對比男女乘客的年齡直方圖的話,我們可以通過兩個hist將不同性別的直方圖繪制到一張圖內,具體代碼如下:

# 提取不同性別的年齡數據 age_female = titanic.Age[titanic.Sex == 'female'] age_male = titanic.Age[titanic.Sex == 'male']# 設置直方圖的組距 bins = np.arange(titanic.Age.min(), titanic.Age.max(), 2) # 男性乘客年齡直方圖 plt.hist(age_male, bins = bins, label = '男性', color = 'steelblue', alpha = 0.7) # 女性乘客年齡直方圖plt.hist(age_female, bins = bins, label = '女性', alpha = 0.6)# 設置坐標軸標簽和標題 plt.title('乘客年齡直方圖') plt.xlabel('年齡') plt.ylabel('人數')# 去除圖形頂部邊界和右邊界的刻度 plt.tick_params(top='off', right='off')# 顯示圖例 plt.legend() # 顯示圖形 plt.show()

圖中結果反映了,不同年齡組內幾乎都是男性乘客比女性乘客要多;同時,也說明男女性別的年齡組分布幾乎一致

?

?

matplotlib(折線圖)

講解一下關于折線圖的繪制,折線圖一般是用來表示某個數值變量隨著時間的推移而形成的趨勢,這種圖還是比較常見的,如經濟走勢圖、銷售波動圖、PV監控圖等。在Python的matplotlib模塊中,我們可以調用plot函數就能實現折線圖的繪制了,先來看看這個函數的一些參數含義。

plot函數的參數解讀


???????matplotlib模塊中plot函數語法及參數含義:

plt.hist(x,y,linestyle,linewidth,color,marker,markersize,markeredgecolor,markerfactcolor,label,alpha)
  • x:指定折線圖的x軸數據;

  • y:指定折線圖的y軸數據;

  • linestyle:指定折線的類型,可以是實線、虛線、點虛線、點點線等,默認文實線;

  • linewidth:指定折線的寬度

  • marker:可以為折線圖添加點,該參數是設置點的形狀;

  • markersize:設置點的大小;

  • markeredgecolor:設置點的邊框色;

  • markerfactcolor:設置點的填充色;

  • label:為折線圖添加標簽,類似于圖例的作用;

?

一元折線圖的繪制


案例:每天進步一點點2015公眾號文章閱讀人數

# 導入模塊 import pandas as pd import matplotlib.pyplot as plt# 設置繪圖風格 plt.style.use('ggplot') # 設置中文編碼和負號的正常顯示 plt.rcParams['font.sans-serif'] = 'Microsoft YaHei' plt.rcParams['axes.unicode_minus'] = False# 讀取需要繪圖的數據 article_reading = pd.read_excel('wechart.xlsx') # 取出8月份至9月28日的數據 sub_data = article_reading.loc[article_reading.date >= '2017-08-01' ,:]# 設置圖框的大小 fig = plt.figure(figsize=(10,6)) # 繪圖 plt.plot(sub_data.date, # x軸數據sub_data.article_reading_cnts, # y軸數據linestyle = '-', # 折線類型linewidth = 2, # 折線寬度color = 'steelblue', # 折線顏色marker = 'o', # 點的形狀markersize = 6, # 點的大小markeredgecolor='black', # 點的邊框色markerfacecolor='brown') # 點的填充色# 添加標題和坐標軸標簽 plt.title('公眾號每天閱讀人數趨勢圖') plt.xlabel('日期') plt.ylabel('人數')# 剔除圖框上邊界和右邊界的刻度 plt.tick_params(top = 'off', right = 'off')# 為了避免x軸日期刻度標簽的重疊,設置x軸刻度自動展現,并且45度傾斜 fig.autofmt_xdate(rotation = 45)# 顯示圖形 plt.show()

???????由于x軸是日期型數據,當數據量一多的時候,就會導致刻度標簽的重疊或擁擠,為了防止重疊的產生,我們需要讓日期型的x軸刻度標簽自動展現,從而避免重疊的現象。下面兩幅圖是對比自動刻度標簽的前后變化:

?

?

???????可能你并不滿足這樣的刻度標簽展現形式,你想以個性化的展現方式,如“YYYY-MM-DD”的顯示方式,同時又想以固定的幾天作為間隔,這樣的設置又該如何實現?其實非常的簡單,只需要在上面代碼的基礎上添加幾行代碼就可以輕松搞定。

一元折線圖的繪制—圖形優化


# 導入模塊 import matplotlib as mpl# 設置圖框的大小 fig = plt.figure(figsize=(10,6)) # 繪圖 plt.plot(sub_data.date, # x軸數據sub_data.article_reading_cnts, # y軸數據linestyle = '-', # 折線類型linewidth = 2, # 折線寬度color = 'steelblue', # 折線顏色marker = 'o', # 點的形狀markersize = 6, # 點的大小markeredgecolor='black', # 點的邊框色markerfacecolor='steelblue') # 點的填充色# 添加標題和坐標軸標簽 plt.title('公眾號每天閱讀人數趨勢圖') plt.xlabel('日期') plt.ylabel('人數')# 剔除圖框上邊界和右邊界的刻度 plt.tick_params(top = 'off', right = 'off')# 獲取圖的坐標信息 ax = plt.gca() # 設置日期的顯示格式 ? date_format = mpl.dates.DateFormatter("%Y-%m-%d") ? ax.xaxis.set_major_formatter(date_format) # 設置x軸顯示多少個日期刻度 #xlocator = mpl.ticker.LinearLocator(10) # 設置x軸每個刻度的間隔天數 xlocator = mpl.ticker.MultipleLocator(5) ax.xaxis.set_major_locator(xlocator)# 為了避免x軸日期刻度標簽的重疊,設置x軸刻度自動展現,并且45度傾斜 fig.autofmt_xdate(rotation = 45)# 顯示圖形 plt.show()

多元折線圖的繪制


???????如果你需要在一張圖形中畫上兩條折線圖,也很簡單,只需要在代碼中寫入兩次plot函數即可,其他都不需要改動了。具體可以參考下面的代碼邏輯:

# 設置圖框的大小 fig = plt.figure(figsize=(10,6))# 繪圖--閱讀人數趨勢 plt.plot(sub_data.date, # x軸數據sub_data.article_reading_cnts, # y軸數據linestyle = '-', # 折線類型linewidth = 2, # 折線寬度color = 'steelblue', # 折線顏色marker = 'o', # 點的形狀markersize = 6, # 點的大小markeredgecolor='black', # 點的邊框色markerfacecolor='steelblue', # 點的填充色label = '閱讀人數') # 添加標簽# 繪圖--閱讀人次趨勢 plt.plot(sub_data.date, # x軸數據sub_data.article_reading_times, # y軸數據linestyle = '-', # 折線類型linewidth = 2, # 折線寬度color = '#ff9999', # 折線顏色marker = 'o', # 點的形狀markersize = 6, # 點的大小markeredgecolor='black', # 點的邊框色markerfacecolor='#ff9999', # 點的填充色label = '閱讀人次') # 添加標簽# 添加標題和坐標軸標簽 plt.title('公眾號每天閱讀人數和人次趨勢圖') plt.xlabel('日期') plt.ylabel('人數')# 剔除圖框上邊界和右邊界的刻度 plt.tick_params(top = 'off', right = 'off')# 獲取圖的坐標信息 ax = plt.gca() # 設置日期的顯示格式 ? date_format = mpl.dates.DateFormatter('%m-%d') ? ax.xaxis.set_major_formatter(date_format) # 設置x軸顯示多少個日期刻度 #xlocator = mpl.ticker.LinearLocator(10) # 設置x軸每個刻度的間隔天數 xlocator = mpl.ticker.MultipleLocator(3) ax.xaxis.set_major_locator(xlocator)# 為了避免x軸日期刻度標簽的重疊,設置x軸刻度自動展現,并且45度傾斜 fig.autofmt_xdate(rotation = 45)# 顯示圖例 plt.legend() # 顯示圖形 plt.show()

兩條折線圖很完美的展現在一張圖中,公眾號的閱讀人數與人次趨勢完全一致,而且具有一定的周期性,即過幾天就會有一個大幅上升的波動,這個主要是由于雙休日的時候,時間比較空閑,就可以更新并推送文章了。

matplotlib(散點圖)

我們通過折線圖可以快速的發現時間序列的趨勢圖,當然他不僅僅只能用在時間序列中,也可以和其他圖形配合使用,正如本期要介紹的,可以將折線圖繪制到散點圖中。散點圖可以反映兩個變量間的相關關系,即如果存在相關關系的話,它們之間是正向的線性關系還是反向的線性關系?甚至于是非線性關系?在繪制散點圖之前,我們任然老規矩,先來介紹一下matplotlib包中的scatter函數用法及參數含義。

scatter函數的參數解讀


???????matplotlib模塊中scatter函數語法及參數含義:

plt.scatter(x, y, s=20, c=None, marker='o', cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None)
  • x:指定散點圖的x軸數據;

  • y:指定散點圖的y軸數據;

  • s:指定散點圖點的大小,默認為20,通過傳入新的變量,實現氣泡圖的繪制;

  • c:指定散點圖點的顏色,默認為藍色;

  • marker:指定散點圖點的形狀,默認為圓形;

  • cmap:指定色圖,只有當c參數是一個浮點型的數組的時候才起作用;

  • norm:設置數據亮度,標準化到0~1之間,使用該參數仍需要c為浮點型的數組;

  • vmin、vmax:亮度設置,與norm類似,如果使用了norm則該參數無效;

  • alpha:設置散點的透明度;

  • linewidths:設置散點邊界線的寬度;

  • edgecolors:設置散點邊界線的顏色;

?

一般散點圖的繪制


案例:汽車速度與剎車距離的關系

# 導入模塊 import pandas as pd import matplotlib.pyplot as plt# 設置繪圖風格 plt.style.use('ggplot') # 設置中文編碼和負號的正常顯示 plt.rcParams['font.sans-serif'] = 'Microsoft YaHei' plt.rcParams['axes.unicode_minus'] = False# 讀入數據cars = pd.read_csv('cars.csv') # 繪圖 plt.scatter(cars.speed, # x軸數據為汽車速度cars.dist, # y軸數據為汽車的剎車距離s = 30, # 設置點的大小 c = 'steelblue', # 設置點的顏色marker = 's', # 設置點的形狀alpha = 0.9, # 設置點的透明度linewidths = 0.3, # 設置散點邊界的粗細edgecolors = 'red' # 設置散點邊界的顏色)# 添加軸標簽和標題plt.title('汽車速度與剎車距離的關系') plt.xlabel('汽車速度') plt.ylabel('剎車距離')# 去除圖邊框的頂部刻度和右邊刻度 plt.tick_params(top = 'off', right = 'off')# 顯示圖形plt.show()

這樣一張簡單的散點圖就呈現出來了,很明顯的發現,汽車的剎車速度與剎車距離存在正相關關系,即隨著速度的增加,剎車距離也在增加。其實這個常識不用繪圖都能夠發現,關鍵是通過這個簡單的案例,讓大家學會如何通過python繪制一個散點圖。如果你需要畫的散點圖,是根據不同的類別進行繪制,如按不同的性別,將散點圖區分開來等。這樣的散點圖該如何繪制呢?

分組散點圖的繪制


案例:iris數據集

# 讀取數據 iris = pd.read_csv('iris.csv')# 自定義顏色 colors = ['steelblue', '#9999ff', '#ff9999']# 三種不同的花品種S pecies = iris.Species.unique()# 通過循環的方式,完成分組散點圖的繪制 for i in range(len(Species)):plt.scatter(iris.loc[iris.Species == Species[i], 'Petal.Length'], iris.loc[iris.Species == Species[i], 'Petal.Width'], s = 35, c = colors[i], label = Species[i])# 添加軸標簽和標題 plt.title('花瓣長度與寬度的關系') plt.xlabel('花瓣長度') plt.ylabel('花瓣寬度')# 去除圖邊框的頂部刻度和右邊刻度 plt.tick_params(top = 'off', right = 'off') # 添加圖例 plt.legend(loc = 'upper left') # 顯示圖形 plt.show()

繪制這樣的分組散點圖是不是也非常的簡單呀,而且關于圖的屬性,可以想怎么設置就怎么設置。從圖中可以發現,三種花的花瓣長度與寬度之間都存在正向的關系,只不過品種setasa的體型比較小,數據點比較聚集。

氣泡圖的繪制


案例:大區銷售數據

# 導入第三方包 import numpy as np# 讀取數據 sales = pd.read_excel('sales.xlsx')# 繪制氣泡圖 plt.scatter(sales.finish_ratio, sales.profit_ratio, c = 'steelblue',s = sales.tot_target/30,edgecolor = 'black')# 改變軸刻度的顯示方式(百分比形式) plt.xticks(np.arange(0,1,0.1), [str(i*100)+'%' for i in np.arange(0,1,0.1)]) plt.yticks(np.arange(0,1,0.1), [str(i*100)+'%' for i in np.arange(0,1,0.1)])# 設置x軸和y軸的數值范圍 plt.xlim(0.2, 0.7) plt.ylim(0.25, 0.85)# 添加軸標簽和標題 plt.title('完成率與利潤率的關系') plt.xlabel('完成率') plt.ylabel('利潤率')# 去除圖邊框的頂部刻度和右邊刻度 plt.tick_params(top = 'off', right = 'off') # 顯示圖形 plt.show()

這樣一個氣泡圖,也非常容易的展現出來了,圖中的圓越大,代表總任務量就越大。一般來說氣泡圖可以展現3維或4維數據,利潤本圖就展現了3維數據,如果再加上顏色表示不同的大區,就可以反映4維數據。

???????在絕大多數情況下,我們會看見散點圖和線性回歸線繪制在一起,一方面可以反映變量間的相關關系,另一反面,也可以定量的找到一根直線來反映這個相關趨勢。接下來,我們就來實現一下散點圖+回歸線的繪制,這里回歸線的繪制數據需要加載sklearn這個機器學習的模塊,通過這個模塊來生成一個線性模型。關于sklearn模塊的知識分享,后期我也會以系列的形式呈現。

散點圖+線性回歸線


汽車速度與剎車距離的關系

???????從我們的第一案例就認識到了汽車的剎車速度與剎車距離之間存在正相關的關系,如果需要定量的模型來反映這個關系,就可以利用線性回歸模型來刻畫即可,接下來我們就來實現一下這個散點圖與回歸圖的結合:

# 導入第三方模塊 from sklearn.linear_model import LinearRegression# 散點圖 plt.scatter(cars.speed, # x軸數據為汽車速度cars.dist, # y軸數據為汽車的剎車距離s = 30, # 設置點的大小 c = 'black', # 設置點的顏色marker = 'o', # 設置點的形狀alpha = 0.9, # 設置點的透明度linewidths = 0.3, # 設置散點邊界的粗細label = '觀測點')# 建模 reg = LinearRegression().fit(cars.speed.reshape(-1,1), cars.dist) # 回歸預測值 pred = reg.predict(cars.speed.reshape(-1,1))# 繪制回歸線 plt.plot(cars.speed, pred, linewidth = 2, label = '回歸線')# 添加軸標簽和標題 plt.title('汽車速度與剎車距離的關系') plt.xlabel('汽車速度') plt.ylabel('剎車距離')# 去除圖邊框的頂部刻度和右邊刻度 plt.tick_params(top = 'off', right = 'off') # 顯示圖例 plt.legend(loc = 'upper left') # 顯示圖形 plt.show()

?

matplotlib(雷達圖)

如何借用Python繪制雷達圖(或蛛網圖),雷達圖可以很好刻畫出某些指標的橫向或縱向的對比關系,例如近三年營業額、客單價、新客招募等指標的同比情況對比,完全就可以通過雷達圖讓數據一目了然。很不幸的是,matplotlib模塊中并沒有特制雷達圖的封裝函數,我們只能換一只思路來實現了。

雷達圖的繪制


# 導入第三方模塊 import numpy as np import matplotlib.pyplot as plt# 中文和負號的正常顯示 plt.rcParams['font.sans-serif'] = 'Microsoft YaHei' plt.rcParams['axes.unicode_minus'] = False# 使用ggplot的繪圖風格 plt.style.use('ggplot')# 構造數據 values = [3.2,2.1,3.5,2.8,3] feature = ['個人能力','QC知識','解決問題能力','服務質量意識','團隊精神']N = len(values) # 設置雷達圖的角度,用于平分切開一個圓面 angles=np.linspace(0, 2*np.pi, N, endpoint=False)# 為了使雷達圖一圈封閉起來,需要下面的步驟 values=np.concatenate((values,[values[0]])) angles=np.concatenate((angles,[angles[0]]))# 繪圖 fig=plt.figure() # 這里一定要設置為極坐標格式 ax = fig.add_subplot(111, polar=True) # 繪制折線圖 ax.plot(angles, values, 'o-', linewidth=2) # 填充顏色 ax.fill(angles, values, alpha=0.25) # 添加每個特征的標簽 ax.set_thetagrids(angles * 180/np.pi, feature) # 設置雷達圖的范圍 ax.set_ylim(0,5) # 添加標題 plt.title('活動前后員工狀態表現') # 添加網格線 ax.grid(True) # 顯示圖形 plt.show()

?

非常簡單吧,一張雷達圖就這么造出來了。其思想也非常簡單,即先把常見的二維坐標變換成極坐標,然后在極坐標的基礎上繪制折線圖,如果需要填充顏色的話就是要fill方法。一般而言這樣的雷達圖沒有什么意義,因為我們用雷達圖通常是要實現多個對象的對比,所以,該如何繪制多條線的雷達圖呢?可以參考下面的代碼:

# 導入第三方模塊 import numpy as np import matplotlib.pyplot as plt# 中文和負號的正常顯示 plt.rcParams['font.sans-serif'] = 'Microsoft YaHei' plt.rcParams['axes.unicode_minus'] = False# 使用ggplot的繪圖風格 plt.style.use('ggplot')# 構造數據 values = [3.2,2.1,3.5,2.8,3] values2 = [4,4.1,4.5,4,4.1] feature = ['個人能力','QC知識','解決問題能力','服務質量意識','團隊精神']N = len(values) # 設置雷達圖的角度,用于平分切開一個圓面 angles=np.linspace(0, 2*np.pi, N, endpoint=False) # 為了使雷達圖一圈封閉起來,需要下面的步驟 values=np.concatenate((values,[values[0]])) values2=np.concatenate((values2,[values2[0]])) angles=np.concatenate((angles,[angles[0]]))# 繪圖 fig=plt.figure() ax = fig.add_subplot(111, polar=True) # 繪制折線圖 ax.plot(angles, values, 'o-', linewidth=2, label = '活動前') # 填充顏色 ax.fill(angles, values, alpha=0.25) # 繪制第二條折線圖 ax.plot(angles, values2, 'o-', linewidth=2, label = '活動后') ax.fill(angles, values2, alpha=0.25)# 添加每個特征的標簽 ax.set_thetagrids(angles * 180/np.pi, feature) # 設置雷達圖的范圍 ax.set_ylim(0,5) # 添加標題 plt.title('活動前后員工狀態表現')# 添加網格線 ax.grid(True) # 設置圖例 plt.legend(loc = 'best') # 顯示圖形 plt.show()

?

發現了吧,如果要繪制多個對象的雷達圖,只需多執行幾個繪制折線圖的語句即可。總體來說,這張圖繪制的還算可以,但總是覺得有點擁擠,不自在。其實在matplotlib官網中,也提供了繪制雷達圖的API,只不過代碼量非常大,感興趣的話,可以前去查看(http://matplotlib.org/gallery/api/radar_chart.html#sphx-glr-gallery-api-radar-chart-py)。

???????雖然matplotlib模塊沒有封裝好的雷達圖命令,但pygal模塊則提供了更加簡單的雷達圖函數,我們也嘗試著借助這個模塊實現雷達圖的繪制。

# 導入第三方模塊 import pygal# 調用Radar這個類,并設置雷達圖的填充,及數據范圍 radar_chart = pygal.Radar(fill = True, range=(0,5)) # 添加雷達圖的標題 radar_chart.title = '活動前后員工狀態表現' # 添加雷達圖各頂點的含義 radar_chart.x_labels = ['個人能力','QC知識','解決問題能力','服務質量意識','團隊精神']# 繪制兩條雷達圖區域 radar_chart.add('活動前', [3.2,2.1,3.5,2.8,3]) radar_chart.add('活動后', [4,4.1,4.5,4,4.1])# 保存圖像 radar_chart.render_to_file('radar_chart.svg')

matplotlib(面積圖)

一般來說,折線圖表達的思想是研究某個時間序列的趨勢。往往一條折線圖可以根據某個分組變量進行拆分,比如今年的銷售額可以拆分成各個事業線的貢獻;流量可以拆分為各個渠道;物流總量可以拆分為公路運輸、鐵路運輸、海運和空運。按照這個思路可以將一條折線圖拆分成多條折線圖,直觀的發現各個折線圖的趨勢,但遺憾的是不能得知總量的趨勢。為了解決這個問題,我們可以借助matplotlib中的stackplot函數繪制面積圖來直觀表達分組趨勢和總量趨勢。

stackplot函數語法及參數含義


stackplot(x,*args,**kargs)

  • x指定面積圖的x軸數據

  • *args為可變參數,可以接受任意多的y軸數據,即各個拆分的數據對象

  • **kargs為關鍵字參數,可以通過傳遞其他參數來修飾面積圖,如標簽、顏色

可用的關鍵字參數:

labels:以列表的形式傳遞每一塊面積圖包含的標簽,通過圖例展現

colors:設置不同的顏色填充面積圖

?

案例分享


???????以我國2017年的物流運輸量為例,來對比繪制折線圖和面積圖。這里將物流運輸量拆分成公路運輸、鐵路運輸和水路運輸,繪圖的對比代碼見下方所示:

# ========== Python3 + Jupyter ========== # # 導入第三方模塊 import pandas as pd import numpy as np import matplotlib.pyplot as plt# 設置圖形的顯示風格 plt.style.use('ggplot') # 設置中文和負號正常顯示 plt.rcParams['font.sans-serif'] = 'Microsoft YaHei' plt.rcParams['axes.unicode_minus'] = False# 讀取數據 transport = pd.read_excel('transport.xls') # 窺探數據框的前5行 transport.head()# 折線圖的x變量值,即Jan(一月份)到Aug(八月份)8個值 N = np.arange(transport.shape[1]-1)# 繪制拆分的折線圖 labels = transport.Index channel = transport.columns[1:]for i in range(transport.shape[0]):plt.plot(N, # x坐標transport.loc[i,'Jan':'Aug'], # y坐標label = labels[i], # 添加標簽marker = 'o', # 給折線圖添加圓形點linewidth = 2 # 設置線的寬度)# 添加標題和坐標軸標簽 plt.title('2017年各運輸渠道的運輸量') plt.ylabel('運輸量(萬噸)') # 修改x軸的刻度標簽 plt.xticks(N,channel)# 剔除圖框上邊界和右邊界的刻度 plt.tick_params(top = 'off', right = 'off')# 顯示圖例(即顯示label的效果) ? plt.legend(loc = 'best') ? # 顯示圖形 plt.show()

?

這就是繪制分組的折線圖思想,雖然折線圖能夠反映各個渠道的運輸量隨月份的波動趨勢,但無法觀察到1月份到8月份的各自總量。接下來我們看看面積圖的展現。

?

x = N # 將鐵路運輸、公路運輸和水路運輸各月的值提取出來,存儲到y1~y3 # 千萬千萬記得,提取出數據框的一列時,需要將序列的數據類型進行強制轉換,否則會報錯 y1 = transport.loc[0,'Jan':'Aug'].astype('int') y2 = transport.loc[1,'Jan':'Aug'].astype('int') y3 = transport.loc[2,'Jan':'Aug'].astype('int')# 定義各區塊面積的含義 colors = ['#ff9999','#9999ff','#cc1234']# 繪制面積圖 plt.stackplot(x, # x軸y1,y2,y3, # 可變參數,接受多個ylabels = labels, # 定義各區塊面積的含義colors = colors # 設置各區塊的填充色)# 添加標題和坐標軸標簽 plt.title('2017年各運輸渠道的運輸量') plt.ylabel('累積運輸量(萬噸)')# 修改x軸的刻度 plt.xticks(N,channel)# 剔除圖框上邊界和右邊界的刻度 plt.tick_params(top = 'off', right = 'off')# 顯示圖例(即顯示labels的效果) ? plt.legend(loc = 'upper left') # 顯示圖形 plt.show()

一個stackplot函數就能解決問題,而且具有很強的定制化。從上面的面積圖就可以清晰的發現兩個方面的信息,一個是各渠道運輸量的趨勢,另一個是則可以看見各月份的總量趨勢。所以,我們在可視化的過程中要盡可能的為閱讀者輸出簡單而信息量豐富的圖形

matplotlib(熱力圖)

如何繪制填充表格熱力圖的知識點,先給大家看一下效果圖。


???????從效果圖里我們可以發現,所謂的填充表格熱力圖就是將原本為數字表(數組)的單元格以顏色來填充,顏色的深淺表示數值的大小。我想,對于這樣的圖來說,總比直接看密密麻麻的數值表要輕松的多吧,畢竟顏色感官比數字感官要直接,要具有更強的沖擊。除了填充表格熱力圖,還有更為常見的地圖熱力圖等。那填充表格熱力圖是如何應用Python來實現的呢?就讓我們手把手的進行講解吧~

數據采集—氣溫數據


???????在繪圖之前,需要說明一下繪圖的數據源,案例中的數據是通過爬蟲獲取的,用的是上海9月份每天的最高氣溫,即生成兩列數據(日期和最高氣溫)。在有了原始數據的基礎上,還需要對數據進行清洗和整理,關于這部分是做任何數據分析或可視化都必經的坎。詳細可以通過下面的代碼來了解:

  • 步驟一:數據采集

# ========== Python3 + Jupyter ========== # # 導入所需的第三方包 import datetime import calendar import requests from bs4 import BeautifulSoup import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns# 采集數據 # 上海2017年9月份歷史氣溫數據 url = 'http://lishi.tianqi.com/shanghai/201709.html'# 發送爬蟲請求 response = requests.get(url).text # 解析源代碼 soup = BeautifulSoup(response, 'html.parser') # 根據HTML標記語言,查詢目標標記下的數據 datas = soup.findAll('div',{'class':'tqtongji2'})[0].findAll('ul')[1:]# 抓取日期數據 date = [i.findAll('li')[0].text for i in datas] # 抓取最高溫數據 high = [i.findAll('li')[1].text for i in datas]# 創建數據框 df = pd.DataFrame({'date':date, 'high':high}) # 變量類型 df.dtypes

?

  • 步驟二:數據整理

# 將date變量轉換為日期類型 df.date = pd.to_datetime(df.date) # 將high變量轉換成數值型 df.high = df.high.astype('int')# 數據處理 # 由日期型數據衍生出weekday df['weekday'] = df.date.apply(pd.datetime.weekday)# 由日期型數據計算week_of_month,即當前日期在本月中是第幾周 # 由于沒有現成的函數,這里自定義一個函數來計算week_of_month def week_of_month(tgtdate):# 由日期型參數tgtdate計算該月的天數days_this_month = calendar.mdays[tgtdate.month] ? ?# 通過循環當月的所有天數,找出第二周的第一個日期for i in range(1, days_this_month + 1):d = datetime.datetime(tgtdate.year, tgtdate.month, i) ? ? ? ?if d.day - d.weekday() > 0:startdate = d ? ? ? ? ? ?break# 返回日期所屬月份的第一周return (tgtdate - startdate).days //7 + 1df['week_of_month'] = df.date.apply(week_of_month) df.head()

到此為止,我們就完成了數據的采集和清洗過程,接下來我們就可以借助該數據完成填充熱力(日歷)圖的繪制。

填充熱力圖的繪制


基于matplotlib繪制熱力圖

???????其實,我需要繪制的是一個數據表,只不過把表中的每一個單元格用顏色填充起來。而表的結構是:列代表周一到周日,行代表9月份第一周到第五周。很顯然,我們剛剛完成的數據并不符合這樣的結構,故需要通過pandas模塊中的pivot_table函數制作一個透視表,然后才可以繪圖。關于熱力圖,我們可以使用matplotlib模塊中的pcolor函數,具體我們可以看下方的繪圖語句:

# ==================繪圖前的數據整理===================== # 構建數據表(日歷) target = pd.pivot_table(data = df.iloc[:,1:],values = 'high', index = 'week_of_month', columns = 'weekday') target# 缺失值填充(不填充的話pcolor函數無法繪制) target.fillna(0,inplace=True) # 刪除表格的索引名稱 target.index.name = None # 對索引排序(為了讓“第一周”到“第五周”的刻度從y軸的高到底顯示) target.sort_index(ascending=False, inplace=True)# ======================開始繪圖========================= # 設置中文和負號正常顯示 plt.rcParams['font.sans-serif'] = 'Microsoft YaHei' plt.rcParams['axes.unicode_minus'] = Falseplt.pcolor(target, # 指定繪圖數據cmap=plt.cm.Blues, # 指定填充色edgecolors = 'white' # 指點單元格之間的邊框色)# 添加x軸和y軸刻度標簽(加0.5是為了讓刻度標簽居中顯示) plt.xticks(np.arange(7)+0.5,['周一','周二','周三','周四','周五','周六','周日']) plt.yticks(np.arange(5)+0.5,['第五周','第四周','第三周','第二周','第一周'])# 消除圖框頂部和右部的刻度線 plt.tick_params(top='off', right = 'off') # 添加標題 plt.title('上海市2017年9月份每日最高氣溫分布圖') # 顯示圖形 plt.show()

繪圖數據的表結構

熱力圖展現

OK,一張填充表格熱力圖就奇跡般的顯示了,而且看上去還蠻舒服的。從圖框看,9月份的第一天是周五,之后的每一天都有對應的顏色顯示。但我在繪圖過程中發現幾個問題

1)繪圖用的數據,不能包含缺失值,否則填充圖是繪制不出來的,所有需要對缺失值做填充處理;

2)最終的圖例無法實現,即顏色的深淺,代表了具體的數值范圍是什么?

3)不方便將具體的溫度值顯示在每個單元格內;

???????為解決上面的三個問題,我們借助于seaborn模塊中的heatmap函數重新繪制一下熱力圖,而且這些問題在heatmap函數看來根本不算問題。

基于seaborn繪制熱力圖

# 通過透視圖函數形成繪圖數據 target = pd.pivot_table(data = df.iloc[:,1:],values = 'high', index = 'week_of_month', columns = 'weekday')# 繪圖 ax = sns.heatmap(target, # 指定繪圖數據cmap=plt.cm.Blues, # 指定填充色linewidths=.1, # 設置每個單元方塊的間隔annot=True # 顯示數值)# 添加x軸刻度標簽(加0.5是為了讓刻度標簽居中顯示) plt.xticks(np.arange(7)+0.5,['周一','周二','周三','周四','周五','周六','周日']) # 可以將刻度標簽置于頂部顯示 # ax.xaxis.tick_top()# 添加y軸刻度標簽 plt.yticks(np.arange(5)+0.5,['第一周','第二周','第三周','第四周','第五周']) # 旋轉y刻度0度,即水平顯示 plt.yticks(rotation = 0)# 設置標題和坐標軸標簽 ax.set_title('上海市2017年9月份每日最高氣溫分布圖') ax.set_xlabel('') ax.set_ylabel('')# 顯示圖形 plt.show()

完美熱力圖的繪制太簡單了!不需要做任何的特殊處理,只需要將繪圖數據扔給heatmap函數即可。想想是不是有點小激動啊~激動過后,還得跟著步驟操作一表哦~

matplotlib(樹地圖)

? 用可視化的方法來表達離散變量的數值情況,不僅僅可以使用條形圖、餅圖、熱力圖,我們還可以借助于樹地圖來完成。樹地圖的思想就是通過方塊的面積來表示,面積越大,其代表的值就越大,反之亦然。今天要跟大家分享的就是如何通過Ptyhon這個工具,完成樹地圖的繪制。

函數語法及參數


???????在Python中,可以借助于squarify包來繪制,即squarify.plot函數。首先,我們來看一下這個函數的語法及參數含義

squarify.plot(sizes, norm_x=100, norm_y=100, color=None, label=None, value=None, alpha,**kwargs)
  • sizes:指定離散變量各水平對應的數值,即反映樹地圖子塊的面積大小

  • norm_x:默認將x軸的范圍限定在0-100之內;

  • norm_y:默認將y軸的范圍限定在0-100之內;

  • color:自定義設置樹地圖子塊的填充色

  • label:為每個子塊指定標簽

  • value:為每個子塊添加數值大小的標簽

  • alpha:設置填充色的透明度

  • **kwargs:關鍵字參數,與條形圖的關鍵字參數類似,如設置邊框色、邊框粗細等;

    ?

???????介紹完了繪圖所需要的函數,先來拋一個樹地圖的效果圖,該圖反映的是2017年8月中央財政收入的主要來源情況:

樹地圖的繪制


???????圖中的數據來自《中華人民共和國財政部》官網,具體可以從2017年8月財政收支情況(http://gks.mof.gov.cn/zhengfuxinxi/tongjishuju/201709/t20170911_2695830.html)查看。

# 導入第三方包 import matplotlib.pyplot as plt import squarify#中文及負號處理辦法 plt.rcParams['font.sans-serif'] = 'Microsoft YaHei' plt.rcParams['axes.unicode_minus'] = False# 創建數據 name = ['國內增值稅','國內消費稅','企業所得稅','個人所得稅','進口增值稅、消費稅','出口退稅','城市維護建設稅','車輛購置稅','印花稅','資源稅','土地和房稅','車船稅煙葉稅等'] income = [3908,856,801,868,1361,1042,320,291,175,111,414,63]# 繪圖 colors = ['steelblue','#9999ff','red','indianred','green','yellow','orange']plot = squarify.plot(sizes = income, # 指定繪圖數據label = name, # 指定標簽color = colors, # 指定自定義顏色alpha = 0.6, # 指定透明度value = income, # 添加數值標簽edgecolor = 'white', # 設置邊界框為白色linewidth =3 # 設置邊框寬度為3)# 設置標簽大小 plt.rc('font', size=8) # 設置標題大小 plot.set_title('2017年8月中央財政收支情況',fontdict = {'fontsize':15})# 去除坐標軸 plt.axis('off') # 去除上邊框和右邊框刻度 plt.tick_params(top = 'off', right = 'off') # 顯示圖形 plt.show()

???????通過上面的這些繪圖語句和美化語句,就可以得到一個形象不錯的樹地圖了。是不是很簡單呢,如果你的工作中需要繪制離散變量的可視化,也可以考慮考慮這張圖呢~簡單明了形象佳!

?

?

總結

以上是生活随笔為你收集整理的Matplotlib画各种图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久一区二区三区国产精品 | 色诱亚洲精品久久久久久 | 国产伦精品一区二区三区照片91 | 国际精品久久久久 | 久久综合狠狠综合久久激情 | 久久99影院| 在线色资源| 免费在线观看午夜视频 | 国产一区视频在线 | 国内精品久久久久影院一蜜桃 | 免费99视频 | 久久久久国产精品一区 | 麻豆系列在线观看 | 日韩亚洲在线观看 | 深爱婷婷久久综合 | 看全黄大色黄大片 | 97超碰人人澡人人爱 | 久久激情影院 | 免费久久网 | 亚洲久草在线 | 欧洲亚洲国产视频 | 日韩电影久久久 | 就要干b | 丁香六月av| 久久午夜电影 | 国产丝袜高跟 | 日韩av资源在线观看 | 日躁夜躁狠狠躁2001 | 国产精品久久久久一区二区国产 | av电影中文字幕在线观看 | 国产一区二区久久精品 | 在线视频麻豆 | 毛片黄色一级 | 九九免费观看视频 | 午夜国产影院 | 91看片看淫黄大片 | 91插插视频 | 久久香蕉一区 | 欧美日韩在线观看一区二区三区 | 久久精品成人热国产成 | 一级黄色在线免费观看 | 亚洲另类人人澡 | 91av在线免费视频 | 免费69视频 | 欧美成人在线网站 | 国产精品第二十页 | 久久与婷婷 | 亚洲综合小说电影qvod | 婷婷中文字幕在线观看 | 91在线看免费 | 国产最新网站 | 久久婷婷一区二区三区 | 夜夜高潮夜夜爽国产伦精品 | 91免费观看国产 | 日韩三级免费 | 亚洲精品乱码久久 | 天堂网av在线 | 一区二区欧美在线观看 | 国产精品69久久久久 | 精品免费 | 亚洲不卡123 | 国产美腿白丝袜足在线av | 91麻豆精品国产91久久久无需广告 | 黄在线免费看 | 亚州黄色一级 | 91亚色视频在线观看 | 最新极品jizzhd欧美 | 国产999在线 | 97视频在线观看成人 | www亚洲视频 | 免费在线观看视频a | 国产成人一区二区精品非洲 | 亚洲黄色免费网站 | 美腿丝袜av | 欧美一级片免费 | av成人免费在线看 | 国产成人久久久77777 | 天天天插 | 国产精品美女久久久久久免费 | 国产成人精品久久亚洲高清不卡 | 日韩欧美精品一区二区三区经典 | 国产精品久久99精品毛片三a | 亚洲欧美乱综合图片区小说区 | 99热在线观看 | 免费一级特黄录像 | 最近更新的中文字幕 | 久久久国产精品一区二区三区 | 99精品国产99久久久久久97 | 色婷婷综合久色 | 天天摸天天舔 | 国产最顶级的黄色片在线免费观看 | 中文字幕成人在线观看 | 亚洲免费a | 97精品国产91久久久久久久 | 97视频网址 | 久久综合网色—综合色88 | www久久久久 | 日本最新高清不卡中文字幕 | 91视频免费网站 | 国产精品入口麻豆www | 精品视频999| 久久久久国产精品免费 | 欧美一级乱黄 | 久久综合九色综合网站 | 99亚洲国产 | 99精品在线免费观看 | 91中文字幕 | 亚洲人人射 | 日韩va在线观看 | 国产精品中文字幕在线播放 | 天天操伊人 | 国产中文字幕网 | 欧美国产日韩久久 | 99久久99久久精品国产片 | 久草精品视频在线看网站免费 | 久久免费高清 | 精品国产色 | 成人av电影免费在线观看 | 干干操操| 亚洲精品在线观看中文字幕 | 91超级碰 | 日韩高清在线看 | 天堂在线视频中文网 | 在线看v片 | 在线成人性视频 | 国产黄色在线看 | 黄色1级毛片 | 人人射人人插 | 99热最新精品 | 国产黄在线看 | 天天爽天天碰狠狠添 | 伊人影院99| 精品美女在线观看 | 91在线播放综合 | 人人要人人澡人人爽人人dvd | 国产视频亚洲精品 | 青青草在久久免费久久免费 | 欧美激情综合网 | 日本久热 | 久草在线观看资源 | 亚州视频在线 | 久久艹99 | 国产日韩视频在线播放 | 国产一区二区在线精品 | 97国产大学生情侣酒店的特点 | 干狠狠| 免费观看一区二区 | 久久午夜影视 | 中文字幕在线观看一区二区 | 久久精品欧美一区 | 奇米网网址 | 免费看黄色小说的网站 | 麻豆视频一区 | 国产成人av | 18做爰免费视频网站 | 亚洲精品视频第一页 | 能在线观看的日韩av | 精品久久久久久久久久久久久久久久久久 | 色综合天天在线 | 国产成人av免费在线观看 | 亚洲视频 中文字幕 | www色网站| 国产精品大片免费观看 | 久久久视屏 | 波多野结衣视频网址 | 国产精品人成电影在线观看 | 天天干天天上 | 97中文字幕 | 天天做夜夜做 | 黄色国产成人 | 欧美精品一区二区在线播放 | 久久久www成人免费毛片 | 日韩免费看 | 成人一级影视 | 99视频精品在线 | 91视频高清免费 | 国产精品一区二区av麻豆 | 日韩激情av在线 | 国产一区免费 | 日韩在线电影一区 | 99精品视频免费看 | 人人干狠狠干 | 91正在播放 | 国产精品久久久久久久久久直播 | 99久在线精品99re8热视频 | 国产精品久久久久久久久久久久久 | 欧美日韩亚洲一 | 日韩在线播放av | 久久区二区 | 91精品啪在线观看国产线免费 | 免费热情视频 | 成人高清在线观看 | 美女久久 | 亚洲高清视频在线观看免费 | 亚洲 中文 欧美 日韩vr 在线 | 青青久视频 | 精品国产伦一区二区三区观看说明 | 插插插色综合 | 免费中文字幕视频 | a黄色影院 | 日本黄色免费看 | 激情五月网站 | 91av小视频 | 97超碰免费在线 | 黄色精品一区二区 | 色在线中文字幕 | 最近能播放的中文字幕 | 欧美成年黄网站色视频 | 在线观看视频一区二区 | 国产麻豆剧传媒免费观看 | 久草视频在线观 | 日本特黄特色aaa大片免费 | 久久国产视频网站 | 黄色免费观看视频 | 日韩精品久久一区二区 | 久久草视频 | 精品产品国产在线不卡 | 亚洲国产一区在线观看 | 日批视频在线播放 | 毛片.com| 中文字幕在线国产 | 亚洲v欧美v国产v在线观看 | 狠狠色噜噜狠狠 | www.eeuss影院av撸| 日本黄色大片免费看 | 中文字幕4 | 欧美日韩国产综合一区二区 | 91精品免费在线观看 | 午夜电影久久久 | 午夜久久久久久久久久久 | 日韩国产高清在线 | 日本精品一二区 | 精品免费在线视频 | 国产激情免费 | 亚洲精欧美一区二区精品 | 伊人永久 | 激情在线网址 | 国产精品激情偷乱一区二区∴ | www天天操| 欧美一区二区三区特黄 | 久久成熟 | 青青草国产免费 | 欧美在线观看视频一区二区 | 中文字幕av免费在线观看 | 91麻豆免费视频 | 中文乱幕日产无线码1区 | 婷婷av在线 | 日本成人中文字幕在线观看 | 久久理论影院 | 中文字幕在线看视频国产 | 久久草在线视频国产 | 美女视频黄免费的久久 | 激情综合婷婷 | 国产精品18videosex性欧美 | 麻豆极品| 日韩中文字幕免费在线播放 | 国产亚洲精品久久19p | 亚洲成人第一区 | 色在线免费视频 | 色婷婷综合在线 | 精品视频资源站 | 亚洲精品在线一区二区 | 99久免费精品视频在线观看 | 黄色网在线播放 | 精品日韩在线 | 69av在线视频| 婷婷中文在线 | 亚洲 欧美 变态 国产 另类 | 日韩av一区在线观看 | 久久理伦片 | 激情av在线资源 | 操综合| 亚洲午夜精品久久久久久久久久久久 | 中文字幕在线播放日韩 | 国产尤物一区二区三区 | 成人免费看片98欧美 | 黄网站免费久久 | 日本在线观看黄色 | 国产精品亚洲片在线播放 | 国产精品久久久久久久久费观看 | 国产资源中文字幕 | 香蕉视频日本 | 日韩免费一级a毛片在线播放一级 | 久久爽久久爽久久av东京爽 | 国产精品婷婷午夜在线观看 | 99riav1国产精品视频 | 国产精品毛片一区二区在线看 | 国产精品毛片一区二区在线 | 日韩一区二区三区在线看 | 色a在线观看 | 久久久久国产精品午夜一区 | 青青河边草免费观看 | 91精品成人久久 | 人人操日日干 | 久久综合久久久 | 成人a v视频 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 色五丁香 | 91精品久久久久久久91蜜桃 | 久久久久久久久久久久av | 色婷婷啪啪免费在线电影观看 | 国产乱对白刺激视频在线观看女王 | 欧美日韩三区二区 | 黄色av一区二区 | 成人a视频片观看免费 | 国产精品久久久久久久久岛 | 欧美在线free | 久久tv| 精品一区 在线 | 亚洲国产精品99久久久久久久久 | 黄色网中文字幕 | 不卡日韩av | av电影在线不卡 | 国产亚洲视频系列 | 精品久久久久久亚洲 | 日韩三区在线 | 亚洲综合视频在线观看 | 91精品久久久久久久久 | 91成人精品在线 | 日韩黄色网络 | 综合色在线 | 在线黄色免费av | 久久兔费看a级 | 国内精品久久久精品电影院 | 久久精品国产亚洲a | 国产在线a免费观看 | 一级黄色电影网站 | 免费中文字幕 | 在线视频日韩一区 | 成人午夜电影在线播放 | 日韩精品视频在线观看网址 | 亚洲黄色小说网 | 奇米网8888| 黄色大全在线观看 | 久久影视一区 | 人人爽人人爱 | 精品一区二区三区久久久 | 成人免费看电影 | 久久成人福利 | 天天草天天色 | 日韩精品1区2区 | 久久99视频精品 | 日本久久电影网 | 成人国产精品免费 | 欧美福利在线播放 | 日韩精品中文字幕在线 | 欧美aa级 | 手机av在线网站 | 天天操天天干天天操天天干 | 亚洲人成人在线 | 国产96在线| 亚洲精品色 | 国产成人精品久久二区二区 | 国产麻豆精品久久 | 日韩三级成人 | 一级免费片 | av综合 日韩 | 国产精品久久久一区二区三区网站 | 国产精品观看在线亚洲人成网 | 亚洲综合在线视频 | 成人在线观看影院 | 国产免费亚洲高清 | 波多野结衣在线观看一区 | 日韩午夜一级片 | 欧美国产日韩在线观看 | 亚洲一区二区高潮无套美女 | 欧美日韩国产一区二区在线观看 | 色网址99 | 九九在线高清精品视频 | 中文字幕永久免费 | 日日夜夜免费精品 | 日韩精品免费一线在线观看 | 久久成年人 | 精品国内 | 日日夜夜人人精品 | 亚洲国产精品va在线看黑人动漫 | 色视频在线免费 | 福利视频午夜 | 国产黄a三级三级 | 国产色在线,com | 夜夜躁狠狠燥 | 91人人插 | 欧美a级片网站 | 中文字幕在线视频一区 | 色丁香婷婷 | 日韩高清在线一区二区三区 | 97精品国产一二三产区 | 婷婷日 | 亚洲精品午夜久久久久久久久久久 | 久久色视频 | 91视频免费看网站 | 免费中文字幕在线观看 | 一区三区在线欧 | 亚洲免费高清视频 | 韩国av免费 | 久久不见久久见免费影院 | 福利视频精品 | 亚洲视频精品在线 | 日韩v在线91成人自拍 | 最近中文字幕视频网 | 天天综合人人 | 亚洲精品乱码久久久久久高潮 | 亚洲精品资源在线 | 91免费观看视频在线 | 91精品国产欧美一区二区成人 | av资源免费在线观看 | 91成人短视频在线观看 | 亚洲禁18久人片 | 在线观看亚洲精品视频 | 天天射射天天 | 国产一区自拍视频 | 国产一区电影在线观看 | 五月激情在线 | 亚洲精品免费在线观看视频 | 亚洲日韩精品欧美一区二区 | 日日插日日干 | 四虎永久免费在线观看 | 中文av网站 | 日韩影片在线观看 | 国产不卡免费视频 | 国产在线一区观看 | www.人人草 | 特级aaa毛片 | 五月婷婷一区二区三区 | 激情综合色播五月 | 国产尤物视频在线 | www国产精品com | 久久国产a| 99久久99久久精品 | 综合在线色 | 九九热在线免费观看 | 免费v片 | 在线观看亚洲国产 | 亚洲春色成人 | 亚洲区另类春色综合小说校园片 | 久久久久久久99 | 在线国产专区 | 久久久久免费精品视频 | 一区二区中文字幕在线播放 | 免费在线中文字幕 | 99久久久久成人国产免费 | 国内成人综合 | 国产精品大片免费观看 | 亚洲精品国产精品久久99 | 亚洲最大av在线播放 | 五月天婷婷在线播放 | 精品99免费视频 | 超碰个人在线 | 91爱爱电影 | 久久久久久伊人 | 麻豆视频观看 | 国产成人久久 | 99亚洲精品视频 | 久久综合射| 波多野结衣一区二区三区中文字幕 | 色噜噜狠狠色综合中国 | 黄色一级大片在线免费看产 | 日韩欧美精品一区二区三区经典 | 免费在线看v| 97精品国产97久久久久久免费 | 黄色三级网站在线观看 | 国产999视频 | 亚洲人在线 | av资源免费看 | 综合国产在线观看 | 国产精品观看视频 | 国产自在线观看 | 亚洲aⅴ免费在线观看 | 白丝av免费观看 | 成人免费一级 | avwww在线 | 天天操天天干天天玩 | 成人cosplay福利网站 | 日本高清久久久 | 精品女同一区二区三区在线观看 | 久久免费视频网 | 最近中文字幕国语免费高清6 | 五月天高清欧美mv | 日韩一区二区三区高清免费看看 | 玖玖在线精品 | 日本女人逼| 超碰在线公开免费 | 久草在线视频网站 | v片在线看 | 国内偷拍精品视频 | 伊人六月 | 97福利在线观看 | 欧美成人69av | 天堂网中文在线 | 亚洲欧洲xxxx | 福利一区二区 | 久久蜜桃av| 久久久穴 | 精品国产片 | 国产精品成人国产乱一区 | 午夜电影av | 亚洲精品videossex少妇 | 中文字幕在线观看视频免费 | 五月婷婷一级片 | 国产精品手机看片 | av成人免费在线看 | 久久久久久美女 | 亚州视频在线 | 香蕉在线观看 | 在线国产片| 日韩av不卡播放 | 一区二区三区四区五区在线 | 夜夜操网站| 波多野结衣最新 | 色视频在线观看 | 久久经典视频 | 亚洲 中文 在线 精品 | 伊人永久在线 | 色99导航| 精品毛片一区二区免费看 | 成人久久久精品国产乱码一区二区 | 天天爽天天爽天天爽 | 国产精品成人a免费观看 | 日韩欧美一二三 | 国产综合香蕉五月婷在线 | 高清在线一区二区 | 亚洲第一区在线播放 | 日韩网站免费观看 | 韩国精品福利一区二区三区 | 久久不卡av | 久久国产片 | 久久亚洲综合色 | 狠狠干中文字幕 | 麻豆视频国产在线观看 | 中文字幕精品三级久久久 | 在线亚洲激情 | 六月激情丁香 | 成人影视免费看 | 国产中文字幕大全 | 精品久久久久久久久中文字幕 | 国产中的精品av小宝探花 | 一区二区三区免费 | 国产又黄又爽又猛视频日本 | 黄污网站在线 | 久久国产日韩 | 黄色软件视频大全免费下载 | 97视频久久久 | 亚洲精品资源 | 天天射狠狠干 | 欧美国产精品久久久久久免费 | 能在线看的av | 亚洲日韩欧美视频 | 色黄www小说 | 国产日韩欧美在线影视 | 91色蜜桃 | 97超碰人人在线 | 午夜av影院| 国产免费叼嘿网站免费 | 国产伦精品一区二区三区无广告 | 99久久精品免费看国产免费软件 | 在线观看成年人 | 国产精品美女免费看 | 精品免费一区二区三区 | 久久一区二区免费视频 | 狠狠色丁香 | 91大神在线观看视频 | 午夜 久久 tv | 国产亚洲精品免费 | 一区二区三区视频网站 | 国产96在线 | 久久精品国产亚洲aⅴ | 日韩字幕在线观看 | 永久黄网站色视频免费观看w | 久久av网址 | 天天干,天天草 | 在线看不卡av | 久草a在线 | 99精品视频播放 | 欧美一区二区日韩一区二区 | 日韩久久精品一区 | 国产亚洲婷婷免费 | 免费成人av电影 | 伊甸园永久入口www 99热 精品在线 | 成年人在线免费看片 | 国产精品一区二区免费视频 | 三级黄色大片在线观看 | 九九在线视频免费观看 | 黄色毛片电影 | 天天操天天摸天天射 | 91精品国产综合久久福利不卡 | 2023av在线| 久久九九九九 | 中文在线a√在线 | av不卡在线看 | 国产综合精品久久 | 麻花豆传媒mv在线观看网站 | 色天天天 | 色噜噜日韩精品一区二区三区视频 | 久热超碰 | 777久久久 | 在线视频 国产 日韩 | 在线视频中文字幕一区 | 中文电影网 | 国产福利一区二区三区视频 | 丝袜少妇在线 | 国产亚洲精品女人久久久久久 | 精品久久91 | 亚洲精品国产成人 | 国产91在线观看 | 日韩色高清 | 国产精品中文字幕在线 | 精品国产一区二区三区蜜臀 | 日韩在线免费小视频 | 免费男女羞羞的视频网站中文字幕 | 在线看av的网址 | 九九久久电影 | av在线色| 久久99精品久久久久婷婷 | 99精品国产99久久久久久福利 | 日韩av高清 | 岛国av在线不卡 | 成年性视频 | 成人av在线亚洲 | 久久国产精品小视频 | 国产在线播放一区 | 日韩欧美69 | 亚洲成人av片在线观看 | 国模吧一区 | 国产中出在线观看 | 免费在线播放视频 | 人人天天夜夜 | 国内视频在线 | 黄色片免费电影 | 亚洲女人天堂成人av在线 | 色网站免费在线观看 | 久久精品国产亚洲a | 久草在线最新视频 | 日日夜夜精品视频天天综合网 | h视频在线看 | 99超碰在线观看 | 色婷婷久久| 在线播放日韩 | 久草视频免费观 | 99视频精品免费视频 | 日韩手机在线观看 | 国产资源在线免费观看 | 国产精品国产三级国产 | 久久视精品 | 亚洲春色奇米影视 | 久久久久久久久福利 | 久久大片网站 | 日日爽日日操 | 免费人人干 | 精品久久久久久久久久久久久 | 国产精品激情 | 欧美一级黄大片 | 三级黄色在线 | 国精产品999国精产品视频 | 久久久久久久久久久影视 | 在线观看国产福利片 | 亚洲黄色免费电影 | 久久久久国产精品一区 | 成年人在线免费看片 | 中文字幕 国产精品 | 欧美激情第一页xxx 午夜性福利 | 国产1区在线观看 | 人人揉人人揉人人揉人人揉97 | 久久爱资源网 | 天天色成人网 | 久草在线免费新视频 | 久久综合色播五月 | 一级精品视频在线观看宜春院 | 视频在线在亚洲 | 亚洲理论在线观看电影 | 天天天天干| 国产资源免费 | 欧美综合在线观看 | 亚洲人成综合 | 天天干天天天天 | 久久久国产一区二区三区四区小说 | 欧美夫妻生活视频 | 亚洲男男gaygay无套同网址 | 在线观看你懂的网站 | 日韩免费三区 | 日韩中文字幕免费电影 | 日韩毛片在线一区二区毛片 | 97色在线观看 | 黄a在线观看| 欧美一区二区视频97 | 中文字幕一区二区三区四区视频 | 国产精品久久久久久久久久99 | 午夜在线资源 | 久久黄色影视 | 国产精品日韩在线观看 | 欧美日韩亚洲在线观看 | 综合久久婷婷 | 黄免费在线观看 | www久久com| 激情婷婷色 | 国产欧美日韩精品一区二区免费 | 在线观看深夜福利 | 久久精品一区二区三区四区 | 欧美a级在线 | 中文字幕av在线电影 | 麻豆视频免费在线 | 三日本三级少妇三级99 | 91香蕉久久| 国产综合婷婷 | 丁香花在线视频观看免费 | 亚洲无在线 | 国产精品女人久久久久久 | 人人澡人摸人人添学生av | 91麻豆视频网站 | 99色视频| 福利视频第一页 | 91久久久久久久 | 亚州欧美精品 | 亚洲成人网av | 中文在线免费看视频 | 国产人成免费视频 | 久久久国产精品网站 | 精品福利在线 | 亚洲 欧美 变态 国产 另类 | 伊人亚洲综合网 | 亚洲在线视频免费 | 在线视频婷婷 | 国产一区二区三区在线 | 国内精自线一二区永久 | 天天做天天射 | 成人免费一区二区三区在线观看 | 青青草国产精品 | 国产一区电影在线观看 | 国产精品久久久久久久久久久免费 | 天天操夜夜爱 | 在线视频第一页 | 五月综合激情 | www.com.日本一级 | 99r在线精品| 久久在线视频精品 | 国产日韩中文字幕 | 国产一区成人 | 9999激情| 中文字幕丝袜美腿 | av资源免费在线观看 | av在线影视 | 成人综合免费 | 国产视频日韩视频欧美视频 | 久久久wwww| 日日草夜夜操 | 国产精品va最新国产精品视频 | 久久亚洲日本 | 日本三级久久 | 一区二区三区日韩视频在线观看 | 久色免费视频 | 在线免费观看视频一区二区三区 | 亚洲在线观看av | 日韩网站在线免费观看 | 国产在线观看免费av | 国产成人综合图片 | 国产精品一区二区在线观看免费 | 久久一区二区三区国产精品 | 免费观看版| 久久国语 | 日韩丝袜视频 | 亚洲国产精彩中文乱码av | 人人看97| 精品国产视频一区 | 热久久最新地址 | 天天干天天干天天色 | 欧美日本在线视频 | 色丁香婷婷| 免费的黄色的网站 | 好看av在线 | 人人射人人插 | 国产精品一区二区三区久久 | 久久婷五月 | 中文av影院| 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲精品中文字幕在线观看 | 亚洲播播 | 成av在线| 国产高清免费 | av中文字幕不卡 | 欧美一区二区三区四区夜夜大片 | www.久久色| 在线观看成人小视频 | 超级碰碰免费视频 | 亚洲精品97 | 国产香蕉久久精品综合网 | 精品婷婷 | 婷婷激情五月 | 超碰电影在线观看 | 国产精品免费久久久久 | 欧美国产精品一区二区 | 久黄色 | 欧美aaa一级 | 免费看一级 | 亚洲韩国一区二区三区 | 91精品视频免费 | 99久久激情| 日日干夜夜爱 | 麻豆影视在线播放 | 中文字幕一区二区三区视频 | 91av电影在线| 亚洲国产三级在线 | 91精品啪在线观看国产 | 最新av在线免费观看 | 99性视频 | 成人久久久久久久久 | 成年人在线观看网站 | 国产黄色精品在线 | 免费精品国产 | 亚洲黄色免费观看 | 手机在线永久免费观看av片 | 天天摸日日摸人人看 | 亚洲一级片免费观看 | 在线观看免费 | 麻豆免费观看视频 | 日日日干| 欧美精品九九 | aa级黄色大片 | av免费看电影 | 亚洲另类视频 | 国产精品 日本 | 中文字幕一二 | 久久成人综合 | 国产在线超碰 | 在线观看免费色 | 91香蕉国产在线观看软件 | 在线看黄色的网站 | 99视频在线免费播放 | 在线超碰av| 精品一区二区免费在线观看 | aⅴ视频在线 | 日日夜夜人人精品 | 国产高清视频在线播放一区 | 国产成人综合在线观看 | 日韩中文字幕国产 | 97超碰在线久草超碰在线观看 | 免费黄色激情视频 | 啪啪免费视频网站 | 国产五月婷 | 最近乱久中文字幕 | 亚洲人成精品久久久久 | 国产一级视频 | 国产精品久久久久久久久久久免费 | 久久久久久影视 | 国产成人久久精品一区二区三区 | 国产成人免费 | 欧美日韩1区 | 99riav1国产精品视频 | 黄色免费视频在线观看 | 午夜私人影院 | 久草在线高清 | 国产二区电影 | 综合久久网| 91x色| 国产精品乱码久久 | 91人人视频在线观看 | 国产午夜剧场 | 98超碰在线观看 | 综合国产在线 | 黄视频网站大全 | 国产黄色精品 | 成人在线视频观看 | 麻豆免费视频观看 | 免费三级网 | 国产一卡久久电影永久 | 99久久久久免费精品国产 | 欧美韩国日本在线 | 狠狠狠色丁香婷婷综合激情 | 国产精品久久久久一区 | 国产特级毛片aaaaaaa高清 | 国产成人黄色在线 | h久久| 欧美亚洲国产精品久久高清浪潮 | 视频二区 | 日韩一级精品 | 日韩精品免费在线 | 波多野结衣在线视频一区 | av大片免费在线观看 | 五月婷婷综合激情网 | 日韩欧美一区二区三区黑寡妇 | 久久国产麻豆 | 亚洲激情 | 欧美日韩裸体免费视频 | 手机在线黄色网址 | 91日韩在线专区 | 国产精品一区专区欧美日韩 | 四虎成人精品永久免费av | 国产一区二区三区免费观看视频 | 国产在线精品一区二区三区 | 香蕉97视频观看在线观看 | 91精品国产成人观看 | 欧美激情综合五月色丁香 | 91视频在线免费 | 91精品国产91久久久久久三级 | 国产成人三级在线播放 | 97超碰站 | 免费黄色一区 | 99re8这里有精品热视频免费 | 91福利视频久久久久 | 久久免费视频国产 | 国产人成免费视频 | 色网站在线 | 久久久久免费精品视频 | 欧美性极品xxxx娇小 | 欧美日韩视频一区二区三区 | 国产精品久久久久毛片大屁完整版 | 久久久污 | 色综合色综合久久综合频道88 | 国产一区观看 | 91av影视| 黄色大片网 | 超碰人人乐 | 日韩精品久久中文字幕 | 久久久久国产免费免费 | 日日夜夜人人精品 | 日韩欧美国产视频 | 在线观看你懂的网址 | 西西www4444大胆在线 | 日本在线视频网址 | 免费成人在线视频网站 | 免费看片在线观看 | 又色又爽的网站 | 国产色视频一区二区三区qq号 | 精品国产精品久久一区免费式 | 麻豆手机在线 | 国产高清不卡一区二区三区 | 婷婷丁香av | 中文字幕中文字幕在线中文字幕三区 | 欧美日韩午夜在线 | 亚洲午夜久久久久久久久电影网 | 午夜av网站| 国产精品高清一区二区三区 | 免费久久久久久久 | 天堂网一区二区三区 | 亚洲人成人在线 | 久草www| 五月香视频在线观看 | 亚洲视频在线播放 | 色偷偷88888欧美精品久久 | 亚洲一区动漫 | 精品国产一区二区三区四区在线观看 | 97在线视频网站 | 欧美久久电影 | 五月天精品视频 | 国产亚洲精品v | 日韩欧美高清在线 | 美女视频黄的免费的 | 中文字幕a∨在线乱码免费看 | 中文字幕免费高清 | 天堂av观看 | 国产精品免费视频久久久 | 国产亚洲一区二区三区 | 涩涩成人在线 | 久久福利小视频 | 国产在线视频一区 | av成人动漫在线观看 | 狠狠gao | 中文字幕第 | 麻豆成人精品 | 国产 在线 高清 精品 | 国产精品婷婷午夜在线观看 | 日韩视频免费观看高清完整版在线 | 91 在线视频播放 | 天堂素人在线 | 美女网站视频免费黄 | 国产精品久久久久久久免费大片 | 日韩av网页| 精品久久99 | 美女性爽视频国产免费app | 奇米影视777四色米奇影院 | 欧美精品在线观看 | 久久免费看视频 | 亚洲国产欧洲综合997久久, | 国内精品久久久久久久影视简单 | 欧美a级成人淫片免费看 | 91精品在线播放 | 国产黄色免费电影 | 国产激情小视频在线观看 | 国产精品综合av一区二区国产馆 | 中文字幕在线观看第二页 | 97夜夜澡人人双人人人喊 | 久久99热久久99精品 | 五月婷婷另类国产 | 国产精品 日韩精品 | 成人免费视频播放 | 一个色综合网站 | av在线不卡观看 | 国产高清在线免费 | 日日干夜夜操视频 | 日韩欧美一区二区三区在线观看 | 成人影视免费看 | 国产精品日韩在线播放 | 国产一区二区综合 | 日日操天天操夜夜操 | 久久久久久久99 | 天堂网av 在线 | 国产精品中文 | 色国产精品 | 九九九热 | 日日爽夜夜操 |