pandas實現(xiàn)數(shù)據(jù)可視化的示例代碼
在pandas 基礎操作大全之數(shù)據(jù)讀取&清洗&分析 以及 pandas基礎操作大全之數(shù)據(jù)合并 中介紹了pandas常見的數(shù)據(jù)處理操作以及常用的數(shù)據(jù)合并操作,本文繼續(xù)對pandas數(shù)據(jù)可視化操作做下介紹,便于大家快速了解,也方便后續(xù)需要時快速查詢。
一、概述
1.1 plot函數(shù)參數(shù)
數(shù)據(jù)可視化,一般用Matplotlib庫,該庫可與MATLAB作圖相媲美,允許完全按照自己的意愿自定義圖表的展示方式,但相較于日??焖龠M行數(shù)據(jù)分析和可視化,用起來相對繁瑣,故pandas基于該庫,重新封裝了plot方法,該方法還對Series和DataFrame數(shù)據(jù)格式進行了特定的優(yōu)化,本文主要講解pandas的數(shù)據(jù)可視化工具,首先講解plot函數(shù)常用參數(shù)的含義。
#pandas主要使用plot函數(shù)進行數(shù)據(jù)可視化繪圖,完整表達式如下,本文僅羅列常見的參數(shù),其他參數(shù)待用到時,可自行學習
df.plot(
x='A',#即繪圖x軸用的數(shù)據(jù)列標簽,如果不指定,則默認為index
y='B',#即繪圖y軸用的數(shù)據(jù)列標簽,可指定一個,也可指定多個,指定多個使用列表格式['A', 'B']
use_index=True,#設置是否用DF的index行索引作為x軸,默認是True,當x不傳入值時,便用index
kind='line',#即繪圖用的圖表類型,枚舉有l(wèi)ine(折線)、bar(條形圖)、barh(橫向條形圖)、hist(柱狀圖)、box(箱線圖或蠟燭圖)、area(面積圖)、pie(餅圖)、scatter(散點圖)等
subplots=True,#子圖,即如果y指定的是多列,則將每列分為一個子圖,與layout一起使用
layout=(2,2),#2*2布局,即4個子圖
sharex=True,#如果有子圖,子圖共x軸刻度,標簽,默認True
sharey=False,#如果有子圖,子圖共y軸刻度,標簽,默認False,即不共享
figsize=(12,8),#設置圖表大小,橫縱方向,單位英尺
title='title',#設置圖表的標題
grid=True,#設置圖表的格子,默認False,即不添加格子
legend=True,#即設置是否添加圖例,默認True
color=['r', 'g', 'b'],#設置不同序列或不同組對應展示的圖表顏色,序列格式(列表或元組),默認none,一般不需要顯示指定,系統(tǒng)會自動分配
xticks=[],#設置x軸刻度,序列形式(列表或元組),可自定義橫軸的刻度,默認none,一般不需要
yticks=[],#設置y軸刻度,序列形式(列表或元組),可自定義縱軸的刻度,默認none,一般不需要
rot=0,#設置軸刻度旋轉角度,默認是0,即水平展示
fontsize=12,#設置橫縱坐標刻度字體大小
xlim=[0,100],#設置x軸刻度區(qū)間,序列形式(列表或元素),默認不設置,由系統(tǒng)自動判斷
ylim=(0,100),#設置y軸刻度區(qū)間,序列形式(列表或元素),默認不設置,由系統(tǒng)自動判斷
ax,#設置此次繪圖的目標axes(坐標系),在本文最后會詳細展開,可以理解為,其是pandas暴露的與matplotlib無縫銜接的接口
)
#df.plot()函數(shù)返回值為此次繪圖所生成的坐標系,可以是1個,也可以是多個,視subplots是True或False而定
#pandas的plot繪圖后,還可結合Matplotlib,對生成的圖表的屬性進一步定制和設置
plt.grid(linewidth=0.2, alpha=0.5) 1.2 本文用到的數(shù)據(jù)源說明
#為了讓該篇文章更加易懂,這次會使用真實數(shù)據(jù)進行數(shù)據(jù)分析及可視化的演示 #網(wǎng)上獲取公開數(shù)據(jù)源的平臺比較多,比如AkShare、Tushare、BaoStock等 #其中Tushare使用時較為便捷,但使用接口獲取數(shù)據(jù)時還需要積分達到一定的值,而AkShare數(shù)據(jù)則完全公開,調(diào)用時沒有任何限制,故本文內(nèi)均會使用AKShare的數(shù)據(jù) #獲取數(shù)據(jù)方法如下: import akshare as ak #如果沒有安裝akshare,請自行pip安裝 df=ak.macro_cnbs() #每一個接口獲取的數(shù)據(jù)不一樣,此處只使用歷年中國宏觀杠桿率數(shù)據(jù) #AKShare詳細教程和數(shù)據(jù)可訪問以下鏈接 https://www.akshare.xyz/zh_CN/latest/index.html
二、折線圖--kind='line'
#折線圖,一般用來分析某數(shù)據(jù)指標(列)隨著index或另外一個數(shù)據(jù)序列的變化趨勢,也是最常見的圖表 #數(shù)據(jù)源,以下使用AkShare 數(shù)據(jù)平臺的 中國宏觀杠桿率 作為數(shù)據(jù)源 import akshare as ak import pandas as pd import matplotlib.pyplot as plt df=ak.macro_cnbs() #獲取中國歷史各部門的杠桿率 #df.head() 年份 居民部門 非金融企業(yè)部門 政府部門 中央政府 地方政府 實體經(jīng)濟部門 金融部門資產(chǎn)方 金融部門負債方 0 1993-12 8.311222 91.658000 4.249689 3.572548 7.822237 107.791459 8.896441 7.128428 1 1994-12 7.808230 82.411703 4.989987 3.144351 8.134338 98.354271 9.808787 6.796868 2 1995-12 8.200000 81.000000 5.700000 3.000000 8.700000 97.900000 10.000000 7.000000 3 1996-03 8.400000 81.700000 6.100000 3.000000 9.100000 99.200000 10.200000 7.200000 4 1996-06 8.600000 82.100000 6.000000 3.000000 9.000000 99.700000 10.400000 7.400000 df.plot(x='年份',y=['居民部門','政府部門','地方政府'],kind='line', figsize=(10,8),fontsize=12,title='金融杠桿率') #運行后,生成圖表如下,可見基本來說,杠桿率在逐年增加,其中居民部門的杠桿率,在2008年以后出現(xiàn)驟增的趨勢,可能與房價快速上漲有關

#如果使用子圖,對各個經(jīng)濟部門的杠桿率分開展示,則如下 df.plot(x='年份',y=['居民部門','政府部門','地方政府'], subplots=True, layout=(1,3),kind='line', figsize=(10,8),fontsize=12,title='金融杠桿率') #運行后圖表如下,可見如果拆成子圖之后,會更加清晰些

三、柱狀圖--kind='bar'
3.1 各組數(shù)據(jù)(列)分開展示
#柱狀圖(條形圖)一般用來分析某指定時間段內(nèi),不同指標之間的對比,同時還可以分析變化趨勢 #相較于折線圖,會表現(xiàn)的更加直觀,條形圖,或者叫柱狀圖,一般用于分析不同時間段不同指標或組別的表現(xiàn)對比,但如果要判斷趨勢,最好還是用折線圖會更加直觀 #數(shù)據(jù)源,仍然以中國各經(jīng)濟部門宏觀杠桿率為準,但是只取前20行數(shù)據(jù),因數(shù)據(jù)量太大 df.iloc[range(20)].plot(x='年份',y=['居民部門','政府部門','地方政府'],kind='bar',figsize=(10,8),fontsize=12,title='金融杠桿率')#運算后,生成的圖標如下

3.2 各組(列)數(shù)據(jù)合并展示--stacked
#柱狀圖還有一種變種,即堆疊柱狀圖,相當于將需要對比的不同組別的指標值加和,并展示在一個柱內(nèi),用不同顏色區(qū)分 #該種圖表既可以體現(xiàn)同一時期或區(qū)間不同組別的指標占比大?。ǜ鶕?jù)數(shù)值),還可以觀察不同時期對應組別累加值的變化趨勢 #比如不同季度4個銷售團隊的銷售業(yè)績,那么堆疊柱狀圖即可以對比不同季度各個銷售團隊的業(yè)績,還可以觀察4個銷售團隊在不同季度業(yè)績總和的變化趨勢 df.iloc[range(20)].plot(x='年份',y=['居民部門','政府部門','地方政府'],kind='bar', stacked=True,figsize=(10,8),fontsize=12,title='金融杠桿率') #運行后圖表如下

3.3 橫向柱狀圖--kind='barh'
#橫向柱狀圖,基本就是將bar圖給橫過來,沒有其他區(qū)別,有橫向柱狀圖的原因,主要是長短相較于高低會更加直觀些,大概可能是因為人類的視覺習慣吧 #還是以中國宏觀杠桿率數(shù)據(jù)為數(shù)據(jù)源 df.iloc[range(20)].plot(x='年份',y=['居民部門','政府部門','地方政府'],kind='barh', stacked=True,figsize=(10,8),fontsize=12,title='金融杠桿率') #運行后圖表如下,為疊加效果

#以下為不疊加數(shù)據(jù)的效果 df.iloc[range(20)].plot(x='年份',y=['居民部門','政府部門','地方政府'],kind='barh',figsize=(10,8),fontsize=12,title='金融杠桿率') #運行后圖表如下

四、直方圖--kind='hist'
4.1 概述
#直方圖一般用在統(tǒng)計數(shù)據(jù)可視化領域,類似概率分布,即數(shù)據(jù)序列在不同值區(qū)間內(nèi)分布的情況 #默認情況下,plot會將序列數(shù)據(jù)值分為10個數(shù)值區(qū)間并統(tǒng)計數(shù)值在不同區(qū)間的個數(shù),即頻數(shù)圖,如果要展示的是頻率圖,則設置density = True即可。 #仍以中央宏觀杠桿率數(shù)據(jù)為例,我們想看下不同經(jīng)濟部門歷年杠桿率區(qū)間分布情況 df.plot(y=['居民部門','地方政府'],kind='hist',figsize=(10,8),fontsize=12,title='金融杠桿率區(qū)間分布情況') #運行后,圖表如左圖,為頻數(shù)圖 df.plot(y=['居民部門','地方政府'],kind='hist',density = True, figsize=(10,8),fontsize=12,title='金融杠桿率區(qū)間分布情況') #運行后,圖表如中圖,為頻率圖 df.plot(y=['居民部門','地方政府'],kind='hist',density = True, figsize=(10,8),fontsize=12,title='金融杠桿率區(qū)間分布情況') #運行后,圖表如右圖,為頻率圖,且設置透明度



4.2 自定義直方圖橫向區(qū)間數(shù)量
#如果對系統(tǒng)自動劃分的10個區(qū)間不太滿意,比如感覺太多或者太少,也可以自定義區(qū)間值,一般有兩種方式
#1、使用bins參數(shù),直接指定需要劃分的區(qū)間數(shù)量,默認是10,可設置比如15或5等
#2、使用xticks參數(shù),直接指定橫軸的坐標刻度值
#1、使用bins參數(shù)
df.plot(y=['居民部門','地方政府','中央政府'],kind='hist',figsize=(10,6),fontsize=12,title='金融杠桿率區(qū)間分布圖',bins=15) #指定將區(qū)間劃分為15個,如下左圖所示
#2、使用xticks參數(shù)
xtick=[5,10,15,20,25,30,35,40,45,50,55,60]
colormap=('r','g','b')
df.plot(y=['居民部門','地方政府','中央政府'],kind='hist',figsize=(10,6),fontsize=12,title='金融杠桿率區(qū)間分布圖',xticks=xtick)#指定將區(qū)間按照指定刻度劃分,如下右圖所示

4.3 多子圖展示多序列數(shù)據(jù)
#也可將不同序列數(shù)據(jù)在不同的子圖上進行展示,這個是一個通用方法,所有的繪圖方法均可對多序列數(shù)據(jù)分幾個子圖進行繪圖展示 #以下使用3個子圖,對不同的序列數(shù)據(jù)直方圖進行繪制 df.plot(y=['居民部門','地方政府','中央政府'],kind='hist',figsize=(18,6),subplots=True,layout=(1,3),fontsize=12,title='金融杠桿率區(qū)間分布圖')#運行后效果如下

4.4 一維數(shù)據(jù)密度圖--kind='kde'
#kde是直方圖的另外一種變種,相對于直方圖,可以認為其區(qū)間數(shù)量不限,是連續(xù)性的,可以更加直觀的觀察序列數(shù)據(jù)在不同數(shù)值下的概率分布圖,看數(shù)值主要集中于哪個數(shù)值區(qū)間范圍內(nèi) df.plot(y=['居民部門','地方政府','中央政府'],kind='kde',figsize=(18,6),fontsize=12,title='金融杠桿率區(qū)間分布圖',subplots=True,layout=(1,3))#運行后圖表如下

4.5 累積直方圖--cumulative = True
#如果希望幾個數(shù)據(jù)序列,在同一區(qū)間內(nèi)的頻次或者頻率相加,則可以使用累積直方圖,相當于將頻數(shù)或頻率在同一區(qū)間內(nèi)疊加展示 df.plot(y=['居民部門','地方政府'],kind='hist',cumulative = True,figsize=(10,8),alpha=0.5,fontsize=12,title='金融杠桿率區(qū)間分布情況') #運行后如下圖所示

五、箱線圖--kind='box'
5.1 默認用法--垂直箱線圖
#box箱線圖一般用來直觀研究一組或多組數(shù)據(jù)分布特征的統(tǒng)計圖,要求所分析的列數(shù)據(jù)必須是數(shù)值格式 #box圖會計算出每一組數(shù)據(jù)的上四分位數(shù)、下四分位數(shù)、上邊緣、下邊緣、中位數(shù)以及異常值等6個值,并以箱狀繪制出來 #箱線圖還有其他較多變體 #仍以中國宏觀杠桿率數(shù)據(jù)為例,我們分析下幾個關鍵的部門歷年杠桿率數(shù)據(jù)的分布情況 df.plot(y=['地方政府','中央政府', '實體經(jīng)濟部門','非金融企業(yè)部門'],kind='box') #運行后如下圖所示,可見地方政府和中央政府的杠桿率整體偏低,而實體經(jīng)濟的杠桿率則最高,但中國整體實體經(jīng)濟又整年缺乏現(xiàn)金流,數(shù)據(jù)表現(xiàn)比較奇怪

5.2 水平箱線圖--vert = False
#如果希望箱線圖水平展示,則直接設置 vert=False即可 df.plot(y=['地方政府','中央政府', '實體經(jīng)濟部門','非金融企業(yè)部門'], vert=False, kind='box')#運行后效果如下

六、餅圖--kind='pie'
6.1 概述
#餅圖一般研究在同一時期或數(shù)據(jù)點下,不同指標列數(shù)值的百分比占比情況,比如同一個月內(nèi),不同銷售團隊銷售額占比情況 #還是以中國宏觀杠桿率數(shù)據(jù),我們?nèi)?020年9月份的數(shù)據(jù),研究下不同經(jīng)濟部門杠桿率占比情況,看哪個部門占比最多,即杠桿率最高,以及其占比情況 #以下s,為從df中抽出2020年9月份數(shù)據(jù),然后去掉月份列,并轉為Series格式,因為pie一般使用Series格式的數(shù)據(jù)進行繪圖 s.plot(kind='pie',autopct='%1.1f%%',figsize=(10,8),fontsize=12,title='2020年9月各經(jīng)濟部門杠桿率占比') #繪圖效果如下,可見實體經(jīng)濟部門的杠桿率占比最大

6.2 設置陰影--shadow=True
#為了增強生成的圖表的可讀性,可對pie圖的每個slice添加陰影,不過本人不太喜歡陰影 s.plot(kind='pie',autopct='%1.1f%%',startangle=90, figsize=(10,8), fontsize=12,title='2020年9月各經(jīng)濟部門杠桿率占比') #運行生成的圖表如下所示

6.3 設置不同餅區(qū)域偏離中心區(qū)域的距離--explode
#有時候為了突出展示某幾個slice,希望這些slice可以脫離出餅圖圓心一定距離,這樣就從餅圖分離出一部分,可以通過設置explode參數(shù)實現(xiàn) explode_list = [0, 0, 0, 0, 0, 0.2,0.1,0.1] #此處按照數(shù)據(jù)序列順序,指定對應silce偏離餅圖中心的距離,以半徑為單位1,如果是0,則代表不批那里 s.plot(kind='pie',autopct='%1.1f%%',figsize=(10,15),startangle=90,explode=explode_list, shadow=True,fontsize=12,title='2020年9月各經(jīng)濟部門杠桿率占比') #運行后,效果如下,突出體現(xiàn)了最小的三個部門杠桿率占比

6.4 設置自動產(chǎn)生的百分比文案偏離中心區(qū)域的距離--pctdistance
#可能pie圖自動生成的百分比文案位置不太滿意,此時可以通過pctdistance參數(shù)設置其位置偏差 #默認是在餅圖半徑的一半位置,即pctdistance=0.5,如果設置為1,則會在餅圖外邊緣位置 #以下將百分比文案位置設置在半徑的0.8位置 explode_list = [0, 0, 0, 0, 0, 0.1,0.1,0.1] s.plot(kind='pie',autopct='%1.1f%%',figsize=(10,15),startangle=90,pctdistance=0.8,explode=explode_list, shadow=True,fontsize=12,title='2020年9月各經(jīng)濟部門杠桿率占比') #運行后效果如下

6.5 去掉列標簽,用圖例展示
#如果覺得將對應slice的數(shù)據(jù)名稱直接展示在pie圖內(nèi),整體會顯得擁擠,則可以去掉,并添加圖例 explode_list = [0, 0, 0, 0, 0, 0.1,0.1,0.1] s.plot(kind='pie',autopct='%1.1f%%',figsize=(10,15),startangle=90,labels=None,pctdistance=0.8,explode=explode_list, shadow=True,fontsize=12,title='2020年9月各經(jīng)濟部門杠桿率占比') plt.legend(labels=s.index, loc='upper left') #添加圖例

七、散點圖--kind='scatter'
7.1 概述
#散點圖,一般用于分析兩列(組)二維數(shù)據(jù)的相關性規(guī)律,折線圖的x軸一般是線性變化,所以折線圖一般只能研究某一指標列的變化趨勢,而散點圖則可以研究兩列數(shù)據(jù)的相關性,比如是否有線性變化關系等,且兩列數(shù)據(jù)本身已經(jīng)相對于同一個線性數(shù)據(jù)進行了對齊(以下例子中即均與年份對齊)
#一般用法
df.plot(
x='', #設置x軸的數(shù)據(jù)序列
y='',#設置y周的數(shù)據(jù)序列
s=100,#設置散點的大小
c='r',#設置散點的顏色,也可傳入列名,傳入的列名必須是數(shù)值化的,那么散點會根據(jù)列名的數(shù)值大小自動著色
marker='*',#設置散點的形狀
)
#數(shù)據(jù)源還是中國各個經(jīng)濟部分宏觀杠桿率,現(xiàn)在想觀察下中央政府和地方政府杠桿率是否有相關性,則
df.plot(x='中央政府',y='地方政府',kind='scatter',figsize=(10,8),fontsize=12,title='中央政府和地方政府杠桿率相關性分析') #繪圖結果如下,可發(fā)現(xiàn)中央政府和地方政府杠桿率呈現(xiàn)一定程度的正相關
7.2 分類散點圖--增加另一個維度的數(shù)據(jù)變量
#一般散點圖是分析二維碼數(shù)據(jù)(兩個數(shù)據(jù)序列)之間的關系,也是數(shù)據(jù)分析最主要的任務,但是如果希望分析三維數(shù)據(jù),即三個數(shù)據(jù)序列之間的變化關系,也可以用散點圖實現(xiàn) #此時將第三個數(shù)據(jù)序列(必須是數(shù)值化的)傳給c參數(shù),用第三個數(shù)據(jù)序列的大小,對散點進行自動著色,顏色越黑,代表第三個數(shù)據(jù)序列越大 #還是以中國宏觀杠桿率數(shù)據(jù)為例,我們不僅希望知道中央政府和地方政府之間杠桿率變化規(guī)則,還希望知道實體經(jīng)濟部門與這兩者數(shù)據(jù)的關系(用顏色深淺代表數(shù)值大?。?,則可以使用分類散點圖 df.plot(x='中央政府',y='地方政府',kind='scatter',figsize=(10,8),fontsize=12,c='實體經(jīng)濟部門' ,title='中央政府、地方政府即實體經(jīng)濟部門杠桿率相關性分析') #運行后如下圖所示,可見中央政府和地方政府杠桿率越大,實體經(jīng)濟部門杠桿率也越大(因為對應的顏色越深)

7.3 氣泡圖--散點圖變種--以氣泡大小代表數(shù)值大小
#分類散點圖是以顏色深淺來判斷第三個數(shù)據(jù)序列與指定的x和y數(shù)據(jù)序列之間的數(shù)值變化關系 #氣泡圖則是用氣泡的大小,來判斷,氣泡圖較為適用于數(shù)據(jù)點不太多的情況,因為數(shù)據(jù)太多的話,各個氣泡重疊在一起,可視化效果范圍不好 df.plot(x='中央政府',y='地方政府',kind='scatter',figsize=(10,8),fontsize=12,c='c' ,alpha=0.5,s=2*df['實體經(jīng)濟部門'], title='中央政府、地方政府即實體經(jīng)濟部門杠桿率相關性分析') #運行后,效果如下,還是分析實體經(jīng)濟部門與中央政府、地方政府杠桿率數(shù)值變化的趨勢關系 #其中s為三點的大小,大小直接使用實體經(jīng)濟部門杠桿率數(shù)值設置

八、面積圖--kind='area'
8.1 默認用法--不同序列數(shù)據(jù)不疊加值
#面積圖,融合了折線圖和柱狀圖的優(yōu)點,既可以分析不同指標(列標簽)隨同一個列或index的變化趨勢,同時也可以直觀的看到大小。如果單純只是想對比不同指標在同一列下不同大小和變化趨勢,則使用折線圖最理想。 #如果希望即看不同指標的變化趨勢,又希望看不同指標在同一時期內(nèi)疊加值的變化趨勢,且數(shù)據(jù)點較多,則使用面積圖最理想,比如希望看5年內(nèi),每個月不同銷售團隊的銷售額的大小對比和變化趨勢,又希望看每個月不同銷售團隊總銷售額的變化趨勢,使用面積圖最理想 df.plot(x='年份',y=['居民部門','政府部門','地方政府'],kind='area', stacked=False,figsize=(10,8),fontsize=12,title='金融杠桿率')#不同列值不堆疊,繪圖效果如下:

8.2 不同序列數(shù)據(jù)疊加值--stacked
df.plot(x='年份',y=['居民部門','政府部門','地方政府'],kind='area', stacked=True,figsize=(10,8),fontsize=12,title='金融杠桿率') #堆疊時繪圖效果如下,可見整體疊加杠桿率,近幾年上升較快

九、六邊圖--kind='hexbin'
9.1 概述
六邊圖又叫六邊箱圖,主要分析二維(即兩個數(shù)據(jù)序列)數(shù)據(jù)點數(shù)值分布情況,類似二維的直方圖,它展示了每個小六邊形中觀測點的數(shù)量,這種圖在大數(shù)據(jù)集上可視化效果最佳。
直方圖針對每個數(shù)據(jù)序列,是單獨展示其沿著x周數(shù)值區(qū)間的頻數(shù)或頻次分布,而六邊圖則展示了x和y兩個數(shù)據(jù)序列關聯(lián)起來后的頻數(shù)分布圖,同時還可以展示x和y兩個數(shù)據(jù)序列之間的關聯(lián)變化關系
#還是以分析中國宏觀杠桿率數(shù)據(jù),我們想了解中央政府和地方政府杠桿率數(shù)值的分布情況,且最好還可以體現(xiàn)兩者之間的變化關系 df.plot(x='中央政府',y='地方政府',kind='hexbin',figsize=(10,8),fontsize=12,title='中央政府、地方政府杠桿率分布和變化趨勢圖') #運行效果如下,其中最右側的標尺,代表分布頻數(shù),即每個六邊形狀內(nèi)分布的數(shù)據(jù)點數(shù),圖表中用頻數(shù)代表顏色深淺,頻數(shù)越大,顏色越深

9.2 調(diào)整x軸六邊形數(shù)量--類似增加密度--gridsize
如果數(shù)據(jù)點太多時,希望增大統(tǒng)計的區(qū)間長度,以更加直觀的觀察分布情況,則可以調(diào)大gridsize的數(shù)值
#gridsize默認大小是100,即會將數(shù)據(jù)歸集到100個區(qū)間范圍內(nèi),包括x軸和y軸,但是一般情況下,100比較多,設置個比如20個相對可視化效果會比較好 df.plot(x='中央政府',y='地方政府',kind='hexbin',figsize=(10,8),fontsize=12, gridsize=20,title='中央政府、地方政府杠桿率分布和變化趨勢圖') #運行后效果如下,可見中央政府和地方政府的杠桿率分布比較不均勻,在最小值、中間值、最大值處分布較多

十、常用繪圖時設置參數(shù)
以下演示的方式,對所有的圖表類型均通用
10.1 將不同數(shù)據(jù),繪制到同一個圖表的不同子圖內(nèi),且不同子圖單獨繪圖
#比如上面的面積圖,希望看下stacked參數(shù)不同時,繪圖效果,則可分別將數(shù)據(jù)繪制在指定的子圖內(nèi) fig, (ax1, ax2) = plt.subplots(2) #首先創(chuàng)建2個子圖 df.plot(x='年份',y=['居民部門','政府部門','地方政府'],kind='area', ax=ax1,stacked=False,figsize=(10,12),fontsize=12,title='金融杠桿率') #將圖表1繪制到子圖1內(nèi) df.plot(x='年份',y=['居民部門','政府部門','地方政府'],kind='area',ax=ax2, figsize=(10,12),fontsize=12,title='金融杠桿率')#將圖表1繪制到子圖1內(nèi),數(shù)據(jù)和x軸數(shù)據(jù)也可完全不相同

10.2 設置數(shù)據(jù)序列顏色
#可通過color參數(shù)指定在繪制不同數(shù)據(jù)序列時,對應的顏色,或者pie圖中不同slice的顏色,序列格式,一般用列表格式 colors=['r','g','b'] df.plot(x='年份',y=['居民部門','政府部門','地方政府'], color=colors, subplots=True, layout=(1,3),kind='line', figsize=(15,8),fontsize=12,title='金融杠桿率') #運行后如下圖所示,指定了居民部門、政府部門、地方政府相應的折線的顏色

10.3 設置x和y坐標軸label
#可通過matplotlib庫中的xlabel和ylabel設置x和y坐標軸的標簽名,一般這些pandas的plot函數(shù)會根據(jù)實際情況自動添加,不過也可以根據(jù)自己需要自行設置
df.plot(x='年份',y=['居民部門','政府部門','地方政府'],kind='line', figsize=(15,8),fontsize=12,title='金融杠桿率')
plt.xlabel('年份')
plt.ylabel('杠桿率')
#運行后如下圖所示,指定了居民部門、政府部門、地方政府相應的折線的顏色
10.4 其他參數(shù)設置
| 參數(shù) | 說明 |
|---|---|
| title | 設置圖表的標題,字符串格式 |
| linestyle | 設置不同折線的線型,序列格式(列表或元組),默認實線 |
| legend | 設置圖表的圖例是否展示,布爾,默認True,即展示 |
| marker | 設置散點圖等點的形狀 |
| alpha | 數(shù)值,設置透明度,默認為1,即不透明,0.5,即50%透明度 |
| secondary_y | 設置第二個y軸,只有當繪制的數(shù)據(jù)序列大于等于2時,設置才生效,可設置為True,或直接指定使用哪個數(shù)據(jù)序列作為第二個y軸的刻度 |
| linewidth | 設置線寬,數(shù)值 |
| table | 圖下添加表,如果為True,則使用DataFrame中的數(shù)據(jù)繪制表格,并且數(shù)據(jù)將被轉置以滿足matplotlib的默認布局,一般不要添加,并且添加時性能較差 |
| logx | 設置x軸坐標刻度是否取對數(shù),布爾,默認False,即不取 |
| logy | 設置y軸坐標刻度是否取對數(shù),布爾,默認False,即不取 |
| loglog | 設置x軸和y軸坐標刻度是否均取對數(shù),布爾,默認False,即不取 |

10.5 ax參數(shù)專門講解
10.5.1 概述
DataFrame.plot()函數(shù)中,ax參數(shù)如果使用得當,則即可以享受pandas的plot函數(shù)帶來的便捷性,同時又可以擁有matplotlib的靈活性,如文章以上介紹,其實plot函數(shù)給我們提供的參數(shù),只是可以滿足日??焖倮L圖的需求,并可以定義常見的一些繪圖屬性,但是如果需要定制比如x和y坐標軸的label,坐標軸,或者想隱藏坐標軸、指定坐標軸標簽的字體和顏色等等,便無能為力。
而ax則是plot函數(shù)暴露出來,直接與matplotlib直接銜接的接口,ax可以認為是一個坐標系,每個圖表的繪制,均需要在指定坐標系內(nèi)完成,而ax參數(shù)則指定了此次df.plot調(diào)用,繪圖的坐標系對象。
其實df.plot()函數(shù)本身,返回的便是此次繪圖生成的坐標系,如果希望后續(xù)df.plot函數(shù)也繪制到之前df.plot返回的坐標系內(nèi),則可以將ax參數(shù)賦值成之前的坐標系值,不過一般不建議使用df.plot返回的坐標系,大部分情況下,一次df.plot即繪制一個
#可以使用ax參數(shù)指定此次繪圖對應的坐標系(axes)對象 #1、用plt生成的axes賦值給ax #這種方法最為靈活,一般用于希望將多種(kind)圖表拼接展示在一起的時候,如下左圖所示 fig,axes=plt.subplots(1,2,figsize=(16,8)) #生成一個1行2列的繪圖區(qū),并返回圖表本身和對應的2個坐標系 df.plot(x='年份',y='居民部門',ax=axes[0],title='居民部門杠桿率') #將圖表繪制到第1個坐標系內(nèi) df.plot(x='年份',y=['非金融企業(yè)部門','政府部門'],ax=axes[1],title='非金&政府部門杠桿率')#將圖表繪制到第2個坐標系內(nèi) #2、用上次plot函數(shù)返回的ax賦值給ax #這種方法,一般不常用,因為原則性一次plot調(diào)用,就是一次完整的繪圖動作,相當于此次在之前的坐標系內(nèi)進行繪圖,如下右圖所示 ax1=df.plot(x='年份',y='居民部門',title='居民部門杠桿率') #首先繪圖并返回ax1坐標系 df.plot(x='年份',y=['非金融企業(yè)部門','政府部門'],ax=ax1)#指定在ax1坐標系繼續(xù)繪圖,就是追加繪圖


10.5.2 使用ax參數(shù)設置具體繪圖對象--指定坐標系繪圖
一般用的最多的,是先使用plt繪制一個比如3×3的繪圖區(qū)域,包含9個坐標系,然后使用df.plot()分別在對應坐標系內(nèi)進行繪圖,以達到將不同類型的圖表拼接到一起的效果
#使用時,原則性,一次df.plot()就是一次完整的繪圖動作,如果希望將多次df.plot繪圖動作生成的圖表集中展示,則使用下面的方法 fig,axes=plt.subplots(3,3,figsize=(24,24)) #首先生成一個3×3的繪圖區(qū),共9個坐標系 df.plot(x='年份',y=['中央政府','地方政府','居民部門'],kind='line',ax=axes[0,0],title='各部門杠桿率') #將圖繪制到第1行第1列的坐標系 df.iloc[range(10)].plot(x='年份',y=['居民部門','地方政府'],kind='bar',ax=axes[0,1] ,stacked=True,title='金融杠桿率') #將圖繪制到第1行第2列的坐標系 df.plot(y=['居民部門','地方政府'],kind='hist',density = True,ax=axes[0,2] ,title='金融杠桿率區(qū)間分布情況') #將圖繪制到第1行第3列的坐標系 df.plot(y=['居民部門','地方政府','中央政府'],kind='kde',ax=axes[1,0],title='金融杠桿率區(qū)間分布圖') #將圖繪制到第2行第1列的坐標系 df.plot(y=['地方政府','中央政府', '實體經(jīng)濟部門'],kind='box',ax=axes[1,1],title='各部門杠桿率箱線圖')#將圖繪制到第2行第2列的坐標系 df.plot(x='中央政府',y='地方政府',kind='scatter',ax=axes[1,2] ,title='中央政府和地方政府杠桿率相關性分析')#將圖繪制到第2行第3列的坐標系 df.plot(x='中央政府',y='地方政府',kind='scatter',ax=axes[2,0] ,c='c' ,alpha=0.5,s=2*df['實體經(jīng)濟部門'], title='中央政府、地方政府即實體經(jīng)濟部門杠桿率相關性分析')#將圖繪制到第3行第1列的坐標系 df.plot(x='中央政府',y='地方政府',kind='hexbin', ax=axes[2,1], gridsize=20,title='中央政府、地方政府杠桿率分布和變化趨勢圖') #將圖繪制到第3行第2列的坐標系 df.plot(x='中央政府',y='地方政府',kind='scatter',ax=axes[2,2] ,c='實體經(jīng)濟部門' ,title='中央政府、地方政府即實體經(jīng)濟部門杠桿率相關性分析')#將圖繪制到第3行第3列的坐標系

10.5.3 設置x和y坐標軸標簽
可以根據(jù)df.plot返回的ax來設置坐標軸標簽,也可以根據(jù)plt生成的坐標系下標來設置坐標軸標簽
#1、根據(jù)df.plot函數(shù)返回的ax直接設置x和y坐標軸label,效果如下左圖所示
ax=df.plot(x='年份',y=['中央政府','地方政府','居民部門'],kind='line',title='各部門杠桿率')
ax.set_xlabel('年月')
ax.set_ylabel('各部門杠桿率')
#2、先由plt生成坐標系,然后使用plt生成的坐標系設置x和y坐標軸label,效果如下右圖所示
fig,axes=plt.subplots(1,2,figsize=(10,5)) #生成一個1×2的2個坐標系繪圖區(qū)
df.plot(x='年份' ,y='居民部門',ax=axes[0],title='居民部門杠桿率') #繪制到第1個坐標系
df.plot(x='年份' ,y='政府部門',ax=axes[1],title='政府部門杠桿率')#繪制到第2個坐標系
axes[0].set_xlabel('年月')
axes[0].set_ylabel('居民部門杠桿率')
axes[1].set_xlabel('年月')
axes[1].set_ylabel('政府部門杠桿率')

10.5.4 matplotlib子圖和subplots指定的子圖之前關系
- 如果對某次df.plot設置了ax參數(shù),則該次df.plot返回的ax,即指定的ax,因為既然已經(jīng)指定了繪圖ax坐標系,返回的肯定也是指定的坐標系
- df.plot如果將subplots設置為True,則其返回的ax是一個矩陣,矩陣的shape即layout指定的shape
- matplotlib中的plt.subplots其實生成的也是一個指定shape的繪圖區(qū)域,類似以上的layout
- 如果df.plot設置了subplots為True,且此時指定了ax為plt生成的某個ax,此時會將df.plot生成的子圖,分別依次繪制到plt對應的子圖區(qū)域
- 比如df.plot,將subplots設置為True,且layout=(2,2),而plt生成的也是一個(2,2)的繪圖區(qū)域,然后把df.plot的ax指定到了plt繪圖區(qū)域內(nèi)的第一個坐標系,則系統(tǒng)會自動將df.plot繪制的4個子圖,依次繪制到plt生成的四個繪圖坐標系內(nèi)。
#以下演示當df.plot設置subplots=True時的效果 fig,axes=plt.subplots(1,2) df.plot(x='年份',y=['居民部門','政府部門'],subplots=True,layout=(1,2),ax=axes)

10.5.5 保存圖表
#當圖表繪制好之后,一般可能希望將其保存到本地留作他用,需要用fig對象進行保存,fig對象的獲取一般有以下兩種方式,本質(zhì)道理一樣
#1、使用plt.subplots方法返回的fig并保存
fig,axes=plt.subplots(1,1)
df.plot(x='年份',y='居民部門',ax=axes)
fig.savefig('filename.png')
#2、使用df.plot函數(shù)返回的ax簡介獲取fig并保存
ax=df.plot(x='年份',y='居民部門')
ax.get_figure().savefig('filename.png')十一、不同圖表類型的區(qū)別
一維數(shù)據(jù)分析
- 即分析一個數(shù)據(jù)序列的數(shù)值變化趨勢、分布情況(頻數(shù)、頻率)、占比情況
- 一般line(數(shù)值變化)、bar(數(shù)值變化)、barh(數(shù)值變化)、hist(數(shù)值分布)、kde(數(shù)值分布)、box(數(shù)值分布)、pie(占比)、area(變化趨勢、占比)適用于進行以上一維數(shù)據(jù)分析
二維數(shù)據(jù)分析
- 即分析兩個數(shù)據(jù)序列之間的數(shù)值關聯(lián)變化趨勢、分布情況、占比情況等
- 一般scatter、hexbin適用于進行以上二維數(shù)據(jù)分析
其他數(shù)據(jù)分析和可視化工具
- 后續(xù)可學習matplotlib庫以及seaborn庫,而seaborn庫最為推薦,因為做出來的圖表顏值非常高,并且很容易上手
- Plotly庫也是強雷建議學習的,因為其有很多非常驚艷的可視化工具
到此這篇關于pandas實現(xiàn)數(shù)據(jù)可視化的示例代碼的文章就介紹到這了,更多相關pandas 數(shù)據(jù)可視化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
16行Python代碼實現(xiàn)微信聊天機器人并自動智能回復功能
聊天機器人自動智能回復給我們的生活帶來了極大的便利,尤其在業(yè)務比較繁忙的時候,智能機器人給我們帶來極大的方便,今天小編教大家一招通過16行代碼實現(xiàn)微信聊天智能機器人,感興趣的朋友一起看看吧2022-01-01
PyCharm 2021.2 (Professional)調(diào)試遠程服務器程序的操作技巧
本文給大家分享用 PyCharm 2021 調(diào)試遠程服務器程序的過程,通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-08-08
python中matplotlib調(diào)整圖例位置的方法實例
在matplotlib中,一般圖例默認是在圖表內(nèi)部的,如果要放置到圖例外面,需要對坐標進行指定,下面這篇文章主要給大家介紹了關于python中matplotlib調(diào)整圖例位置的相關資料,需要的朋友可以參考下2022-06-06

