7-Pandas的基本繪圖函數(常用參數表、圖形類型、樣式參數設置表、條形圖、直方圖、箱線圖、散點圖、氣泡圖、六邊箱圖、餅圖)


一、基於Matplotlib的Pandas繪圖方法

  Pandas繪制圖形相較於Matplotlib來說更為簡潔,基礎函數為df.plot(x,y)

  

>>>df.plot('time','Money')

二、 基本數據圖形類型

 

 通過kind可以設置圖形的類型,df.plot()默認繪制折線圖,df.plot(kind ='')用於設置各類圖形,如下表所示

df.plot()常用參數表
參數 說明
x x軸數據
y y軸數據
kind 設置圖表類型(具體可見右表)
subplots 判斷圖片是否有子圖
figsize 圖片尺寸大小
label 用於圖例的標簽
style 設置風格,傳入字符串(如:'ko-')
alpha 設置透明度(越靠近0越透明)

rot

旋轉刻度標簽(rotation縮寫,取值0-360)

fontsize

設置軸刻度的字體大小
xticks 用作x軸刻度的值
yticks 用作y軸刻度的值
xlim x軸的范圍
ylim y軸的范圍
grid 顯示刻度背景網格
colormap 設置圖形顏色
layout 設置子圖排列格式

 

 

 

 

通過kind設置圖形類型
參數kind 圖形類型
line 折線圖
bar/barh 條形圖
hist 直方圖
box 箱線圖
scatter 散點圖
pie 餅圖

 

 

 

 

 

 

 

 

 

 

    

 

    注意:若在繪制圖形時,對象是Series,那么Series對象的索引自動會設置為x軸,但是不會顯示刻度標簽

 

 

 

 

 

 

linestyle:設置線的樣式(簡寫:style)

marker:設置標記樣式

color:設置線的顏色(簡寫:c)

linewidth:設置顯得粗細(簡寫:lw)

樣式參數設置總結如下表

三、條形圖

1、Series.plot(kind = 'bar')

  Series繪制條形圖時,通常結合value_counts()顯示各值的出現頻率

  除了傳入kind參數外,也可以簡寫為data.plot.bar()的形式,此類方法也適用於其他圖形。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
data = pd.read_csv('C:/Users/xhl/Desktop/input/train_sample_utf8.csv')
cg = data['分類'].value_counts()
cg
汽車     544
科技     511
旅游     510
健康     492
文化     491
房地產    480
財經     469
新聞     458
體育     437
教育     437
娛樂     370
女人     322
Name: 分類, dtype: int64

#兩種繪圖方式均可
#cg.plot(kind='bar',rot=45)
cg.plot.bar(rot=45)
plt.xlabel('分類')
plt.ylabel('頻數')
plt.title('新聞分類分布條形圖')

2、DataFrame.plot.bar()

 DataFrame繪制條形圖時,會將每一行的值分為一組,各列名稱作為圖例

df = pd.read_excel('C:/Users/xhl/Desktop/input/class.xlsx')
df
  class     sex  score_math  score_music
0     A    male          95           79
1     A  female          96           90
2     B  female          85           85
3     C    male          93           92
4     B  female          84           90
5     B    male          88           70
6     C    male          59           89
7     A    male          88           86
8     B    male          89           74

df_class = df.groupby('class').mean()
df_class
       score_math  score_music
class
A            93.0        85.00
B            86.5        79.75
C            76.0        90.50

df_class.plot.bar()

 

3、堆積條形圖

設置參數stacked=True,每行的值就堆積起來,更易於觀察比較各組的分數

df_class.plot.barh(stacked=True)

 四、直方圖

1、Series.plot.hist()

2、DataFrame.plot.hist()

  通過bins設置面元,表示將數據分為多少組

  當有多種類型進行數據可視化時(堆疊情況發生時)可以設置透明度alpha,將數據的可視化更加明顯

df['score_math'].plot.hist(bins=20)
df[['score_math','score_music']].plot.hist(bins=25,alpha=0.5)

  默認畫的是頻數圖,如果想畫頻率圖,可以修改參數density = True

  調整參數cumulative = True繪制累積直方圖

 3、繪制子圖

設置參數subplots=True,可將各列分布直方圖分別繪制在不同的子圖中

df.plot.hist(subplots=True,figsize = (7,5))

  五、箱線圖

 1、常規箱線圖

  箱線圖是一種用作顯示數據分散情況的統計圖

  用於考察數據之間的分布狀況,同時又用於考察數據之間的離散和分布程度,離散程度高表明數據之間的差異較大;

  現繪制各科分數分布箱線圖:

color = dict(boxes='Green',whiskers='Orange',medians='Blue',caps='Gray')
df.plot.box(color=color,sym='r+')//sym表示離群點
plt.title('各科分布情況箱線圖')

 

  

  可以通過修改箱線圖的return_type參數為dict使得繪圖函數返回一個字典,這可以讓我們方便地從圖中提取一些數據。

>>> box = df.plot.box(color=color,sym='r+',return_type='dict')
>>>box
{'whiskers': [<matplotlib.lines.Line2D object at 0x00000186969E8DD8>, <matplotlib.lines.Line2D object at 0x00000186969F3438>, <matplotlib.lines.Line2D object at 0x00000186969BA5F8>, <matplotlib.lines.Line2D object at 0x00000186960D2C18>],
 'caps': [<matplotlib.lines.Line2D object at 0x00000186969F3780>, <matplotlib.lines.Line2D object at 0x00000186969F3AC8>, <matplotlib.lines.Line2D object at 0x00000186969FDC88>, <matplotlib.lines.Line2D object at 0x00000186969FDFD0>],
 'boxes': [<matplotlib.lines.Line2D object at 0x00000186969E8C88>, <matplotlib.lines.Line2D object at 0x00000186969FD4E0>], 
'medians': [<matplotlib.lines.Line2D object at 0x00000186969F3E10>, <matplotlib.lines.Line2D object at 0x0000018696A09358>], 
'fliers': [<matplotlib.lines.Line2D object at 0x00000186969F3EB8>, <matplotlib.lines.Line2D object at 0x0000018696A096A0>], 
'means': []}

>>> box.keys()
dict_keys(['whiskers', 'caps', 'boxes', 'medians', 'fliers', 'means'])

  其中:'boxes'對應的是箱體部分,'fliers'對應的是異常值點,'whiskers'對應的是兩條須,可以通過提取列表的第一個元素獲得相應的圖塊,然后使用get_xydata()獲取其對應的數據點

  例:查看異常值部分,使用get_xydata()獲取對應的異常值

>>> box['fliers'][0].get_xydata()
array([[ 1., 59.]])

 2、水平箱線圖

  通過vert = False設置箱線圖為水平方向展示

color = dict(boxes='Green',whiskers='Orange',medians='Blue',caps='Gray')
df.plot.box(color=color,sym='r+',vert=False)
plt.title('各科分布情況箱線圖')

 3、分組繪圖by

   箱線圖也可以使用df.boxplot()的方法,設置參數by根據某列的唯一值將數據進行分組繪圖;子圖先列進行分組,然后按照班級分類進行分組(即子圖的個數 = 列的個數);當類別較多時,可以設定columns,也就是要分析的列

  如按照班級分組:

df.boxplot(by='class',sym='r+')

 

  當boxplot默認繪制了兩個標題時,可以通過suptitletitle進行調整,並設定grid參數為False不顯示刻度背景網格

 

  4、分組繪圖groupby

  使用df.groupby().boxplot()的方法,子圖先按照班級分類進行分組,然后每個子圖再按照各列進行分組(即子圖的個數 = 班級分類的個數

df.groupby('class').boxplot(sym='r+',figsize=(7,5))

 六、散點圖

1、基本散點圖

  df.plot.scatter(x,y),繪制散點圖需要傳入參數x和y,分別設置x軸與y軸的數據。

  基本的散點圖主要考察兩個散點圖之間的相互依存關系(相關關系)

df.plot.scatter(x = 'score_math',y = 'score_music')
plt.title('math與music分數散點圖')
plt.xlabel('math score')
plt.ylabel('music score')

   設置點的樣式

  s :設置點的大小

  marker :設置點的形狀

  c:設置點的顏色

df.plot(kind = 'scatter', x = 'score_math',y = 'score_music',c='g',marker='*',s=200)

 說明在散點圖的繪制過程中,有些數據可能會重疊,可通過設置透明度alpha解決此類問題,但是散點圖本就是分析趨勢,所以一般情況下問題不大。

2、加入影響因素(分類散點圖)

  將班級等級進行數值編碼,並存與新列grade中:

df['grade'] = df['class'].replace(['A','B','C'],[3,2,1])
df.plot(kind = 'scatter', x = 'score_math',y = 'score_music',c='grade',figsize=(7,4))

  注意:參數c既可以傳入顏色,也可以傳入列名,不同值的顏色會發生漸變

 3、氣泡圖(散點圖的變種)

  散點圖可用於展示三個變量(不是單純的三個變量之間的關系,數據分析一般☞分析兩兩量變量之間的關系)之間的關系,現使用氣泡圖的形式加入班級等級影響因素。

  為了便於觀察,將grade的編碼替換為等比數列。

df['grade'] = df['grade'].replace([1,2,3],[1,2,4])
df.plot.scatter(x='score_math',y='score_music',figsize=(7,4),c='c',alpha=0.3,s=100*df['grade'])
plt.title('math與music分數散點圖')
plt.xlabel('math score')
plt.ylabel('music score')

  

  加入plt.colorbar(),可以給子圖添加colorbar(顏色條或漸變色條)

4、六邊箱圖

  六邊箱圖又稱為高密度散點圖,df.plot.hexbin()若數據點太密集,該圖效果優於散點圖

df.plot.hexbin(x='score_math',y='score_music',gridsize=20)
plt.title('math與music分數六邊箱圖')
plt.xlabel('math score')
plt.ylabel('music score')

  

   注意:其中參數gridsize用於設置x軸方向的六邊形數量,默認為100個,使用時根據自身需求進行調整

 七、餅圖

  查看某特征的分布情況,df.plot.pie()會自動添加標題和各部分的名稱

df['class'].value_counts().plot.pie()

  如何去除默認文字、添加圖例、添加每部分百分比數值、設置凸出部分、添加陰影?

  labels = None可去除餅圖外側每部分的名稱;

  plt.ylabel('')設置y軸標簽為空可以去掉默認標題;

  legend = True添加圖例(或者plt.legend());

  bbox_to_anchor:用來移動圖例的位置,其中0.9表示左右,0.8表示上下;

   labels:表示顯示的圖例文字;

   autopct:控制圖內百分比設置,'%%'的表示輸出一個百分號,前一個%是轉義字符;

   explode:設置每一塊餅圖離開中心的距離,如將比重最大的一塊凸出;

  shadow = True:添加陰影。

explode=(0.1,0,0)#0表示默認不離開
df['class'].value_counts().plot.pie(figsize=(5,5),labels=None,
                                    autopct='%.2f%%',fontsize=15,
                                    explode = explode,shadow = True)
plt.ylabel('')
plt.legend(bbox_to_anchor=[0.9,0.8],labels=['class B','class A','class C'])
plt.title('班級分布餅圖')

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM