Python數(shù)據(jù)分析與可視化 教案 第5-6章 51 繪圖設(shè)置與簡單繪圖_第1頁
Python數(shù)據(jù)分析與可視化 教案 第5-6章 51 繪圖設(shè)置與簡單繪圖_第2頁
Python數(shù)據(jù)分析與可視化 教案 第5-6章 51 繪圖設(shè)置與簡單繪圖_第3頁
Python數(shù)據(jù)分析與可視化 教案 第5-6章 51 繪圖設(shè)置與簡單繪圖_第4頁
Python數(shù)據(jù)分析與可視化 教案 第5-6章 51 繪圖設(shè)置與簡單繪圖_第5頁
已閱讀5頁,還剩82頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Python數(shù)據(jù)分析與可視化教案

第1頁

課題5.1繪圖設(shè)置與簡單繪圖課型講練

授課班級大數(shù)據(jù)授課時數(shù)2

1.能夠創(chuàng)建繪圖窗口及其子圖。

2.能夠?qū)L圖窗口進行各種屬性設(shè)置。

教學目標

3.能夠設(shè)置圖形的reParams參數(shù)。

4.能夠利用plot進行簡單繪圖。

1.能夠?qū)L圖窗口進行各種屬性設(shè)置。

教學重點

2.能夠利用plot進行簡單繪圖。

教學難點1.能夠設(shè)置圖形的reParams參數(shù)。

本次課是繪圖的第一次課,所以本次課是繪圖這一章的基礎(chǔ)內(nèi)容,學號

學情分析

本次課對于本章的學習至關(guān)重要。

在繪制各種圖形之前,一般需要設(shè)置繪圖的各種參數(shù),這是繪圖的基礎(chǔ)。每一幅

圖的繪制都涉及不少參數(shù),雖然這些參數(shù)大多都有默認值,但是也有一些參數(shù)必須手

動設(shè)置,才能更好輔助繪制圖形。

一、繪圖設(shè)置

1.導入繪圖庫

繪制圖形之前,一般需要導入matplotlib庫中的pyplot模塊,其一般方法為:

importmatplotlib.pyplotaspit

2.創(chuàng)建與顯示繪圖窗口

創(chuàng)建畫布的主要作用是構(gòu)建出一張空白的繪圖窗口(figure),其一般方法為:

plt.figure(figsize=(len,wid))

其中,len表示繪圖窗口的長度,wid表示繪圖窗口的寬度。

創(chuàng)建的繪圖窗口只有顯示以后,才能看到,顯示繪圖窗口的一般方法為:

plt.show()

示例代碼如下:

importmatplotlib.pyplotaspit

plt.figure(figsize=(6,4))#創(chuàng)建一個6*4的空白繪圖窗口

plt.show()#顯示繪圖窗口

輸出結(jié)果如圖5-*所示。

\Figure1一□X

?W6中Q三Y目

圖5-*創(chuàng)建繪圖窗口示例結(jié)果

【結(jié)果分析】因為是創(chuàng)建的第一個繪圖窗口,所以默認名稱為Figure1?示例

代碼中如果缺少pit.showO,則不會顯示該繪圖窗口。

3.創(chuàng)建子圖

在matplotlib中,整個圖像為一個Figure對象。在Figure對象中可以包含一個或

者多個Axes對象,每個Axes對象相當于一個子圖了。在繪圖時,可以選擇是否將整

個繪圖窗口劃分為多個子圖(Axes),方便在同一幅圖上繪制多個子圖。

利用subplot可以將當前繪圖窗口(figure)劃分為按行列編號的多個矩形窗格,

每一個矩形窗格都對應一個子圖。創(chuàng)建子圖的方法主要有兩種,一種是分步添加子圖

再分別填充子圖,另一種是一次創(chuàng)建多個子圖,再選取其中的子圖進行填充。

(1)分步添加子圖

在matplotlib中,可以利用add_subplot逐一創(chuàng)建子圖,其一般方法為:

fig=plt.figure()#利用plt.figure。創(chuàng)建繪圖窗口并命名為fig

ax=fig.add_subplot(m,n,k)#添加編號為k的子圖

其中,m表示繪圖窗口分為m行,n表示繪圖窗口分為n歹U,k表示創(chuàng)建的子圖

編號。

示例代碼如下:

fig=plt.figure(figsize=(6,4))#利用pltfgure。創(chuàng)建繪圖窗口并命名為fig

ax1=fig.add_subplot(1,2,1)

ax2=fig.add_subplot(1,2,2)

plt.show()

輸出結(jié)果如圖5-*所示。

圖5-*創(chuàng)建繪圖窗口示例結(jié)果

(2)創(chuàng)建多個子圖

在matplotlib中,可以利用subplots一次創(chuàng)建多個子圖,其一般方法為:

fig,axes=plt.subplots(m,n)

ax=axes[i,j]

其中,m和n表示將繪圖窗口分割為m行n列矩形子窗口,使用時需要保證m

和n都要大于1。i和j分別表示在矩形子窗口中的行列位置,并且行與列編號都是從

0開始編號。

示例代碼如下:

fig,axes=plt.subplots(2,3)#創(chuàng)建2行3列的繪圖窗口

axl=axes[O,l]

ax2=axes[l,2]

plt.show()

輸出結(jié)果如圖5-*所示。

AFigure1-□X

今G6+Q三廿區(qū)

0.00.51.00.00.51.00.00.51.0

圖5-*創(chuàng)建繪圖窗口示例結(jié)果

創(chuàng)建子圖時,如需要同時編輯所有子圖,還可以利用循環(huán)語句進行編輯,其一般

方法為:

fig,axes=plt.subplots(m,n)

ax=axes.ravel()

foriinrange(k):

ax[i]

4.設(shè)置繪圖窗口屬性

繪圖窗口是繪圖的主體部分,繪圖窗口屬性包括標題,坐標軸名稱、坐標軸刻度

等,設(shè)置繪圖窗口屬性與繪制圖形是并列的,沒有先后順序。一般來說,可以先繪制

圖形,再設(shè)置繪圖窗口屬性。繪圖窗口屬性如表5-*所示。

表5-*繪圖窗口屬性表

屬性名稱說明

plt.title表示添加標題。

plt.legend表示顯示圖例。

plt.xlabel表示添加X軸名稱。

plt.ylabel表示添加y軸名稱。

plt.xlim表示指定X軸的范圍。

plt.ylim表示指定y軸的范圍。

plt.xticks表示指定X軸刻度的數(shù)目與取值。

plt.yticks表示指定y軸刻度的數(shù)目與取值。

plt.axvline表示添加X軸輔助線。

plt.axhline表示添加y軸輔助線。

plt.text表示添加文本標注,常用來添加數(shù)據(jù)標簽。

【說明】

(1)在設(shè)置標題、坐標軸等含有字符信息時,如果需要顯示中文字符,需要使

用reParams參數(shù)。

(2)在設(shè)置圖例時,可以利用參數(shù)loc控制圖例的位置,如loc='upperright'

表示圖例在上方靠右位置,“l(fā)oc=lowercenter"表示圖例在下方居中位置。默認

是上方靠右位置。

(3)利用pit.xlim和pit.ylim添加設(shè)置x軸與y軸范圍時,需要將范圍寫進

列表中,如pIt.xIim([0,10])表示x軸的范圍為。到10。

(4)利用pit.xticks和pit.yticks添加x軸與y軸刻度時,需要將一系列刻

度都寫進列表中,并且用逗號隔開。如plt.xticks([0,2,4,6,8,10])表示在x軸顯

示刻度0,2,4,6,8,10,如果刻度較為規(guī)律,可以利用np.arange進行創(chuàng)建。

(5)利用pit.axvIine(coIor,IinestyIe)與pit.axhIine(coIor,IinestyIe)

添加x軸和y軸輔助線時,參數(shù)color表示輔助線的顏色,參數(shù)IinestyIe表示輔助

線的類型。

(6)利用pit.text(x,y,string)添加文本標注時,參數(shù)x、y表示文本標注的

位置,即文本標注的橫坐標與縱坐標,string表示添加的說明文字。

(7)子圖的繪圖屬性與窗口的繪圖屬性略有不同,子圖的繪圖屬性只需要在窗

口的繪圖屬性之前加set_即可,如設(shè)置子圖的標題可用set_ti11eo

示例代碼如下:

plt.figure(figsize=(6,4))#創(chuàng)建一個6*4的繪圖窗口

plt.title("title")#添加標題“title”

plt.ylabel("ylabel")#添加y軸標題“ylabel”

plt.xlim([0,10J)#將x軸范圍設(shè)為0到10

plt.xticks([0,2,4,6,8,10])#將x軸刻度設(shè)為0,2,4,6,8,10

plt.show()

輸出結(jié)果如圖5-*所示。

\Figure1—□X

#+Q三2E)

title

1.0---------------------------------------------------------------------------------------------------------

0.8-

0.6-

e

A

0.4■

0.2■

0.0--------------------1--------------------1--------------------1--------------------1--------------------

0246810

圖5-*創(chuàng)建繪圖窗口示例結(jié)果

5.設(shè)置圖形的reParams參數(shù)

pyplot可以使用reParams參數(shù)修改圖形的各種默認屬性,包括窗體大小、每英寸

的點數(shù)、線條寬度、顏色、樣式、坐標軸、網(wǎng)絡屬性、字體等。reParams參數(shù)可以在

Python的交互環(huán)境中動態(tài)修改屬性,參數(shù)修改后,繪圖時默認參數(shù)就會改變。設(shè)置圖

形的reParams參數(shù)如表5-*所示。

表5-*圖形的reParams參數(shù)表

參數(shù)名稱說明

figure.figsize表示窗口的大小。

表示圖像顯示的中文字體,SimHei表示黑體,KaiTi表示楷體,

font.sans-serif

FanfSong表示仿宋。

lines.linewidth表示線寬。

表示線的類型。可取、和“:”四種,默認

lines.linestyle

為。

axes.unicode_minu表示是否顯示負數(shù),F(xiàn)alse表示顯示負數(shù)。

s

font.size表示字體的大小。

text.color表示文本的顏色。

【說明】

(1)在圖形中輸入中文字符時,一定要使用參數(shù)font,sans-serif,如

pit.reParams['font,sans-serif']二「SimHei']就表示輸入中文為黑體,如果不適

用該參數(shù),則在圖形中輸入中文時,會顯示□□□□□等缺省符。

(2)lines,linestyle表示線型類型,默認為實線,如需修改為虛線,可用

p11.rcParams['Iines.IinestyIe']='-'o

(3)color參數(shù)在繪圖中使用較為廣泛,既可以表示文本顏色,又可以表示點

或線的顏色。顏色種類有很多,如“k”表示黑色,“g”表示綠色,“r”表示紅色,

“b”表示藍色,“yellow”表示黃色,“orange”表示橙色,"grey”表示灰色,

“brown”表示棕色,“yellowgreen”表示黃綠色、“skyblue”表示天藍色,

“l(fā)ightyellow”表示淡黃色、“darkorange”表示深橙色等。顏色參數(shù)具體設(shè)置可

參考附錄1。

示例代碼如下:

plt.figure(figsize=(6,4))#創(chuàng)建一個6*4的繪圖窗口

pk.rcParamsrfont.sans-serif1]=fSimHei*]#設(shè)置中文字體

plt.rcParams('axes.unicode_minus']=False#顯示負數(shù)

plt.rcParams['font.size'J=20#顯示字體大小

plt.rcParams['text.color']=T#顯示字體顏色

pit.title。標題")#將標題設(shè)為“title”

plt.xticks(l-2,-l,0J,2J)#設(shè)置x軸刻度

plt.show()

輸出結(jié)果如圖5-*所示。

\Figure1-□X

備G"+Q三2IS

1.0,__________________________________

0.8

0.6

0.4

0.2

圖5-*設(shè)置圖形的rc參數(shù)示例結(jié)果

二、簡單繪圖

在matplotlib中,可以使用通用的plot函數(shù)針對DataFrame繪制簡單圖形,如折

線圖、柱形圖、條形圖等。

1.利用plot函數(shù)繪制Series圖形

利用plot函數(shù)繪制Series圖形的一般方法為:

Series.plot(kind,color)

其中,參數(shù)kind表示繪圖的類型,kind=line表示折線圖,“bar”表示柱形圖,

“barh”表示條形圖。color表示繪圖對象的顏色。

2.利用plot函數(shù)繪制DataFrame圖形

利用plot函數(shù)繪制DataFrame圖形的一般方法為:

DataFrame.plot(kind,color)

其中,kind表示繪圖的類型,kind=line表示繪制折線圖,kind=bar表示繪制柱形

圖,kind=barh表示繪制條形圖。color表示繪圖對象的顏色。

任務實訓

任務1:創(chuàng)建Series數(shù)據(jù)data1,datal的數(shù)據(jù)為90、85、95、90,其對應的index

為“001”、“002”、“003”、為04”,根據(jù)datal,完成:

(1)利用reParams參數(shù)設(shè)置繪圖窗口的大小為12*8,設(shè)置中文字體為黑體。

(2)在第1個子圖中,繪制柱形圖,柱狀的顏色為天藍,添加圖表標題“數(shù)學

成績”,利用np.arange生成y軸刻度0、10、20、30、…、100,在y軸90的位置,

添加輔助線,輔助線為紅色虛線。

(3)在第2個子圖中,繪制條形圖,柱狀的顏色為天藍,添加圖表標題“數(shù)學

成績”,利用np.arange生成x軸刻度0、10、20、30、…、100,在x軸90的位置,

添加輔助線,輔助線為紅色虛線。

具體代碼如下:

importpandasaspd

importnumpyasnp

datal=pd.Series([90,85,95,80],index=['00r,,002','003','004'])#創(chuàng)建Series

fig=plt.figure(figsize=(12,8))

plt.rcParamslfont.sans-serifJ=[^imHei1]

fig.add_subplot(1,2,1)

data1.plot(kind=,bar,,color=,skyblue')#繪制柱形圖

plLtitl式數(shù)學成績)#添加標題

plt.yticks(np.arange(0,101,10))#利用np生成序列作為y軸的刻度

plt.axhline(90,linestyle=,-,,color=,darkorange,)#添加y軸輔助線

fig.add_subplot(l,2,2)

datal.plot(kind=,barh,,color="skyblue')#繪制柱形圖

pll.titleC數(shù)學成績)#添加標題

plt.xticks(np.arange(0,101,10))#利用np生成序列作為x軸的刻度

plt.axvline(90,linestyle=,-,,color=,darkorange,)#添力口x軸輔助線

plt.show()

輸出結(jié)果如圖5-*所示。

\Figure1-□x

中Q三2El

數(shù)學成績

8§8

圖5-*任務1輸出結(jié)果

任務2:創(chuàng)建DataFrame數(shù)據(jù)data2,data2包含4行3歹!J,3列的列名分別為“數(shù)

學”、“語文”、“英語”,4行的index分別為“001”、“002”、“003”、“004”,

data2如表5-*所示。

表5-*任務2數(shù)據(jù)源

index數(shù)學語文英語

0019095100

002858595

003959090

004808585

根據(jù)data2,完成:

(1)利用reParams參數(shù)設(shè)置繪圖窗口的大小為12*8,設(shè)置中文字體為黑體。

(2)繪制條形圖,三個條形的顏色分別為“紅色”、“綠色”、“橙色”。

(3)添加標題為“成績統(tǒng)計”,圖例位于上部靠右位置。

具體代碼如下:

diet=/數(shù)學成績.90,85,95,80];語文成績,:[95,85,90,85/英語成績

’:口00,95,90,85]}

data2=pd.DataFrame(dict,index=[,001\,002\'003\,004,J)

plt.rcParams['figure,figsize1]=(12,8)

plt.rcParamsfTont.sans-serif]=「SimHei']

data2.plot(kind=,barh,,color=l'r,,,g,,'orange1])

plt.title("考試成績”)

plt.legend(loc=*upperright1)

plt.show()

輸出結(jié)果如圖5-*所示。

XFigure1

科G)*Q三匕a

考試成紈

004

aa

002

(01

圖5-*任務1輸出結(jié)果

鞏固訓練

創(chuàng)建Series,數(shù)據(jù)為641、578、612、561,739,其對應的index為“周一”、“周

二”、“周三”、“周四”、“周五”,完成:

(1)利用reParams參數(shù)設(shè)置繪圖窗口的大小為8*8,設(shè)置中文字體為黑體。

(2)繪制折線圖,柱狀的顏色為紅色。

(3)添加圖表標題“周一到周五平均營業(yè)額”。

課題5.2繪制柱形圖課型講練

授課班級大數(shù)據(jù)授課時數(shù)2

1.能夠根據(jù)數(shù)據(jù)繪制簡單柱形圖。

教學目標2.能夠根據(jù)數(shù)據(jù)繪制多重柱形圖。

3.理解數(shù)據(jù)標簽的添加方法。

1.能夠根據(jù)數(shù)據(jù)繪制簡單柱形圖。

教學重點

2.能夠根據(jù)數(shù)據(jù)繪制多重柱形圖。

教學難點1.理解數(shù)據(jù)標簽的添加方法。

本次課是繪圖這一章學的第一種繪制圖形,學好本次課有助于后面一些

學情分析

圖形的學習,比如條形圖與柱形圖就有很多類似的地方,只是圖形方向不同。

各種統(tǒng)計圖表中,柱形圖是常用圖形之一,柱形圖是用柱形來顯示數(shù)據(jù),并且柱

形的長度與數(shù)據(jù)值成比例。

一、繪制柱形圖

柱形圖可以用于顯示一段時間內(nèi)的數(shù)據(jù)變化或顯示各項之間的比較情況,柱狀圖

一般用于描述分類型數(shù)據(jù),每根柱子寬度固定,柱子之間會有間距。

在柱形圖中,一般將分類型字段設(shè)為橫坐標,而將統(tǒng)計值設(shè)為縱坐標。比如在比

較不同班級的數(shù)學平均分時,就可以繪制柱形圖,其中班級就是分類字段可作為橫坐

標,數(shù)學成績的平均值就是統(tǒng)計值可作為縱坐標。

柱形圖根據(jù)每個X刻度上面對應的柱形的數(shù)量,可以分為簡單柱形圖和多重柱形

圖。如果每個X刻度上面只有一個柱形就是簡單柱形圖,就如之前不同班級的數(shù)學平

均分。如果每個X刻度上面有多個柱形就是多重柱形圖,如不同班級的數(shù)學、語文、

英語平均分,一個班級就是一個X刻度,而這個X刻度上對應三個柱形,分別代表這

個班級的數(shù)學、語文、英語平均分。

在pyplot模塊中,plot(kind=bar)可以針對Series或DataFrame繪制柱形圖,但是

其參數(shù)較少,只能用于簡單繪圖。如果要繪制更為復雜的柱形圖,可以使用繪圖pyplot

模塊提供的柱形圖繪制函數(shù)bar,其一般用法為:

plt.bar(x,height,width,color,edgecolor,label)

其中,各參數(shù)的作用如下:

x表示x軸對應數(shù)據(jù)的列表。

height表示柱子的高度,即表示y軸對應數(shù)據(jù)的列表。

width表示柱子的寬度。

color表示柱子的顏色。

edgecolor表示柱子邊框的顏色。

label表示圖例的內(nèi)容,用于解釋每個柱形的含義,這個參數(shù)在繪制多重柱形圖

時作用較為明顯,因為可以用不同的顏色區(qū)分不同的柱形。

1.繪制簡單柱形圖

繪制簡單柱形圖時.,可以直接使用bar函數(shù)進行繪制.

示例代碼如下:

importpandasaspd

importmatplotlib.pyplotaspit

,,,,,,,

dict={a':[A';B',C'],b':[95,85,90],'c':[60,65,70],'d:[100,80,90](e:[65,70,75]}

data=pd.DataFrame(dict)

print(data)

plt.rcParams['font.sans-serif']:=['SimHei']

x=datafa']

height=data['b']

width=0.4

plt.bar(x,height,width,color='darkorange,,edgecolor=,b')

plt.title("b列統(tǒng)計")

plt.show()

輸出結(jié)果如圖5-*所示。

*Figure1—□X

倩66中Q三〃目

圖5-*繪簡單柱形圖示例結(jié)果2

【結(jié)果分析】在柱形圖中,每個柱狀的刻度恰好是柱形的中間位置,如5-*中的

x軸刻度A、B、C?而在matplotlib中,當繪制完柱形圖之后,由于沒有數(shù)據(jù)標簽,

所以顯示效果往往不是很好。此時,可以使用pit.text的方法加以添加,此部分內(nèi)

容會在第三部分詳細闡述。

2.繪制多重柱形圖

繪制多重柱形圖,需要在每個x刻度上面畫出多個柱形,這一過程分可以多次完

成。第1次先確定第1個柱形的數(shù)字刻度位置,然后在此刻度位置基礎(chǔ)上再增加一個

柱形寬度后,就是第2個柱形的數(shù)字刻度位置,以此類推,如圖5-*所示。

圖5-*多重柱形圖刻度位置設(shè)置

如果最后需要顯示文本刻度,可以利用plt.xticks將數(shù)字刻度轉(zhuǎn)換為文本刻度。

示例代碼如下:

importnumpyasnp

plt.rcParamsl'figure.figsize'J=(10,8)

plt.rcParams['font.sans-serif]=['SimHei']

x=np.arange(1,4)#設(shè)置x軸刻度為1,2,3

height1=data['c']

height2=data['d']

heights=data['e']

width=0.2#設(shè)置柱形的寬度為0.2

plt.rcParams[,font.sans-serif]=[,SimHei']

pll.bar(x,heightl,width,color='darkorange',edgecolo^'grey'Jabe^'c歹小)

#根據(jù)c列繪制第1組系列柱形

plt.bar(x+width,height?,width,coloi-'yellowgreen\edgecolo^'greyjabe^'d列)

#根據(jù)d列繪制第2組系列柱形

plt.bar(x+2*width,height3,width,color='skyblue',edgecolor='grey',label='e列')

#根據(jù)e列繪制第3組系列柱形

plt.legend(loc=,upperright')#在右上方顯示圖例

plt.title("c歹J1、d列、e列統(tǒng)計”)

plt.show()

輸出結(jié)果如圖5-*所示。

XFigure1-OX

#4+Q三2E)

圖5-*創(chuàng)建多重柱形圖示例結(jié)果

根據(jù)數(shù)字刻度繪制多重柱形圖后,還需要將數(shù)字刻度[123]轉(zhuǎn)換為a列的文本刻

度此時就需要確定新刻度的位置。新刻度「A"BrC']應放在第2組系列柱

形的中間位置,即刻度[123]右側(cè)一個柱形寬度位置。

在繪制多重柱形圖的適當位置增加一行代碼plt.xticks(x+width,data[1a']),就可以

將數(shù)字刻度轉(zhuǎn)換為文本刻度。

示例代碼如下:

plt.xticks(x+width,dataf'a'])#將x軸刻度重新設(shè)為a列數(shù)據(jù)

plt.legend(loc='upperright')

plt.tiUe("c列、d列、e列統(tǒng)計")

plt.show()

輸出結(jié)果如圖5-*所示。

KFigure1-□X

育G今+Q三2E)

圖5-*x軸刻度轉(zhuǎn)化示例結(jié)果

二、添加數(shù)據(jù)標簽

比如在柱形圖中,默認的圖形只有光禿禿的柱子,這樣就使得圖形好像缺少一些

元素,此時就可以根據(jù)需要添加數(shù)據(jù)標簽。

1.添加簡單柱形圖的數(shù)據(jù)標簽

添加柱形圖的數(shù)據(jù)標簽時,首先確定柱子對應的數(shù)據(jù)標簽,然后在柱子上方添加

該柱子的數(shù)據(jù)標簽,如圖5-*所示。

以3個柱狀的柱形圖為例,數(shù)據(jù)標簽的位置可以比每個柱子的實際高度略高,設(shè)

置柱形圖數(shù)據(jù)標簽可以使用text函數(shù),該函數(shù)有3個參數(shù),分別是數(shù)據(jù)標簽橫坐標、

數(shù)據(jù)標簽縱坐標、數(shù)據(jù)標簽顯示值。添加簡單柱形圖數(shù)據(jù)標簽的一般方法為:

x=[xl,x2,x3]#設(shè)置數(shù)據(jù)標簽的橫坐標

height=[height1,height2,height3]#設(shè)置數(shù)據(jù)標簽的縱坐標

fori,jinzip(x,height):

plt.text(i,j+Ah,j)

其中,在plt.text函數(shù)中,第1個參數(shù)i表示數(shù)據(jù)標簽的橫坐標,使用時也可以

根據(jù)實際情況右移一點位置Aw,以保證添加的數(shù)標簽處于條形圖右側(cè)的Aw位置,如

i+0.5表示在每個條形的右側(cè)0.5的位置設(shè)置數(shù)據(jù)標簽。第2個參數(shù)j表示數(shù)據(jù)標簽的

縱坐標,使用時也可以根據(jù)實際情況下移一點位置,以保證添加的數(shù)標簽處于垂直居

中位置。第3個參數(shù)i表示顯示出來的數(shù)據(jù)標簽的值,即每一個條形的實際長度。使

用pit.text時,前兩個參數(shù)表示添加數(shù)據(jù)標簽位置,需要用數(shù)值型數(shù)據(jù)。

示例代碼如下:

importnumpyasnp

x=np.arange(l,4)

dict={'":rA;B,C]b:[95,85,90],'c':[60,65,70],d:[100,80,90],2:[65,70,75]}

data=pd.DataFrame(dict)

print(data)

輸出結(jié)果如圖5-*所示。

Run:5-2

>C:\Users\liliang\Anaconda3\python.exeC:/Users/liliang/PycharmProjects/sjfx/5-2.py

abcde

0A956010065

■>rp1B85658070

“二zl2C90709075

7Processfinishedwithexitcode°

圖5-*添加簡單柱形圖的數(shù)據(jù)標簽示例結(jié)果1

示例代碼如下:

height=data['b']

width=0.4

plt.bar(x,height,width)

fori,jinzip(x,height):

plt.text(i-0.08,j+2,j,coloi-'r',size=15)

#數(shù)據(jù)標簽左移0.08,可以使得數(shù)據(jù)處于水平居中位置

#數(shù)據(jù)標簽上移2,可以使得數(shù)據(jù)位于柱形上方的2個單位高度

#數(shù)據(jù)標簽的文本顏色設(shè)為紅色

#數(shù)據(jù)標簽的文本大小顏色設(shè)為15

plt.xticks(x,data['a'])

plt.show()

圖5-*添加簡單柱形圖數(shù)據(jù)標簽示例結(jié)果2

2.添加復雜柱形圖的數(shù)據(jù)標簽

添加復雜柱形圖的數(shù)據(jù)標簽與添加簡單柱形圖的數(shù)據(jù)標簽類似,只是添加的時

候,重點注意橫坐標和縱坐標的變化即可。

示例代碼如下:

plt.rcParamst^gure.figsize'J=(12,8)

x=np.arange(l,4)

print(type(x))

height!=datafc']

height?=data「d']

height3=datafe1]

width=0.2#設(shè)置柱形的寬度為0.2

plt.bar(x,height1,width,color='darkorange,,edgecolor='grey')

plt.bar(x+width,height2,width,color='yellowgreen',edgecolor='grey')

plt.bar(x+2*width,height3,width,color='skyblue',edgecolor=,grey,)

fori,jinzip(x,heightl):

plt.text(i-0.05,j4-2,j,color=,r\size=15)

fori,jinzip(x+width,height2):

plt.text(i-0.05,j+2,j,color=,r',size=15)

fori,jinzip(x+2*width,height3):

plt.text(i-0.05,j+2,j,color='r,,size=15)

plt.xticks(x+width,data[,a'])

plt.show()

輸出結(jié)果如所看_________________________________________

KFigure1-OX

?<-->+Q三NB

圖5-*添加多重柱形圖數(shù)據(jù)標簽示例結(jié)果

鞏固訓練

創(chuàng)建DataFrame數(shù)據(jù)data,data包含4行3列,記錄了蘇州、青島、廈門3個城

市的GDP(單位:億元),如表5-*所示。

表5-*練習數(shù)據(jù)源

index蘇州重慶杭州

2017年170001953012556

2018年186972036313500

2019年193002360515373

完成:

(1)繪制多重柱形圖,年份為橫坐標,各個城市的GDP為縱坐標。

(2)在多重柱形圖中,添加各個城市GDP的數(shù)據(jù)標簽。

課題5.3繪制條形圖課型講練

授課班級大數(shù)據(jù)授課時數(shù)2

1.能夠根據(jù)數(shù)據(jù)繪制條形圖。

教學目標

2.能夠根據(jù)子圖繪制多個條形圖。

教學重點L能夠根據(jù)數(shù)據(jù)繪制條形圖。

教學難點1.能夠根據(jù)子圖繪制多個條形圖。

條形圖和柱形圖的畫法類似,只是方向不同,之前學習的柱形圖的學習

學情分析

有助于本次課的學習。

各種統(tǒng)計圖表中,條形圖與柱形圖類似,兩者都用于比較多個數(shù)據(jù),只是兩者區(qū)

別在于圖形的方向,柱形圖面向垂直方向,條形圖面向水平方向。條形圖又稱橫向柱

形圖,當坐標軸刻度取值較多且名稱又較長時,可以考慮使用條形圖,因為條形圖能

夠橫向布局,方便展示較長的坐標軸刻度值。

一、直接繪制條形圖

1.繪制條形圖

pyplot模塊提供了條形圖繪制函數(shù)barh,其一般用法為:

plt.barh(y,height,width,color,edgecolor,label)

其中,各參數(shù)的作用如下:

y表示y軸對應數(shù)據(jù)的列表。

width表示條形的長度。

height表示條形的寬度。

color表示條形的顏色。

edgecolor表示條形邊框的顏色。

label表示圖例的內(nèi)容,用于解釋每個條形的含義,這個參數(shù)在繪制多重條形圖

時作用較為明顯,因為可以用不同的顏色區(qū)分不同的條形。

示例代碼如下:

importpandasaspd

importmatplotlib.pyplotaspit

diet={'a':『A',B,'C'],'b':[95,85,90],'c':[60,65,70],d:[100,80,90],'e':[65,70,75]}

data=pd.DataFrame(dict)

print(data)

plt.rcParams['font.sans-serif]=[,SimHei']

y=data['a*]

width=dataf'b1]

height=0.4

plt.barh(y,width,height,color=,darkorange',edgecolor=,b,)

plt.title("b列統(tǒng)計")

plt.show()

輸出結(jié)果1如圖5-*所示。

Run:。5-3

CC:\Users\liliang\Anaconda3\python.exeC:/Users/liliang/PycharmProjects/sjfx/5-3.py

abcde

0A956010065

?51B85658070

U2C90709075

X二

.

?

圖5-*簡單柱形圖示例結(jié)果1

輸出結(jié)果2如圖5-*所示。

\Figure1□X

伊66+Q=2目

9]統(tǒng)計

020O6080

圖5-*簡單條形圖示例結(jié)果2

2.添加數(shù)據(jù)標簽

添加條形圖的數(shù)據(jù)標簽時,首先確定條形對應的數(shù)據(jù)標簽,然后在條形右側(cè)添加

該條形的數(shù)據(jù)標簽,如圖5-*所示。

圖5-*數(shù)據(jù)標簽添加位置

以3個條形的條形圖為例,數(shù)據(jù)標簽的位置比每個條形長度略靠右,設(shè)置條形圖

數(shù)據(jù)標簽的一般方法為:

width=[width1,wedth2,width31#設(shè)置每個條形的橫坐標

y=[yl,y2,y3]#設(shè)置每個條形的縱坐標

fori,jinzip(width,y):

plt.text(i+Aw,j,i)

其中,在plt.text函數(shù)中,第1個參數(shù)i表示數(shù)據(jù)標簽的橫坐標,即條形的長度

width,使用時也可以根據(jù)實際情況右移一點位置Aw,以保證添加的數(shù)標簽處于條形

圖右側(cè)的Aw位置,如i+0.5表示在每個條形長度的右側(cè)0.5的位置設(shè)置數(shù)據(jù)標簽。第

2個參數(shù)j表示數(shù)據(jù)標簽的縱坐標,使用時也可以根據(jù)實際情況下移一點位置,以保

證添加的數(shù)標簽處于垂直居中位置。第3個參數(shù)i表示顯示出來的數(shù)據(jù)標簽的值,即

每一個條形的實際長度。使用plt.text時,前兩個參數(shù)表示添加數(shù)據(jù)標簽位置,需要

用數(shù)值型數(shù)據(jù)。

示例代碼如下:

importnumpyasnp

plt.rcParams['figure.figsize']=(10,6)

plt.rcParams[,font.sans-serif]=[,SimHei']

y=np.arange(l,4)#設(shè)置y軸刻度為1,2,3

width=dataf'b1]

height=0.4

plt.barh(y,width,height,color=,darkorange\edgecolor=,b')

plt.title(nb列統(tǒng)計”)

fori,jinzip(width,y):

plt.text(i+2,j-0.05,i,color='r,,size=15)

#數(shù)據(jù)標簽右移2,可以使得數(shù)據(jù)位于條形右側(cè)的2個單位長度

#數(shù)據(jù)標簽下移0.05,可以使得數(shù)據(jù)處于垂直居中位置

#數(shù)據(jù)標簽的文本顏色設(shè)為紅色y

#數(shù)據(jù)標簽的文本大小顏色設(shè)為15

plt.yticks(y,data['a'])#將y軸刻度重新設(shè)為a列數(shù)據(jù)

plt.show()

輸出結(jié)果如圖5-*所示。

\Figure1-□X

#+Q三廿EI

圖5-*添加條形圖數(shù)據(jù)標簽示例結(jié)果

二、利用數(shù)據(jù)分組繪制條形圖

繪制統(tǒng)計圖時,除了可以直接繪制以外,也常常需要先對數(shù)據(jù)進行分組統(tǒng)計后,

再根據(jù)統(tǒng)計繪制圖。這種方法幾乎在所有統(tǒng)計圖中均可以使用,下面以條形為例加以

說明。

示例代碼如下:

importnumpyasnp

diet={'a':[l,2,3,3,2,1,1,2,3];b':np.arange(60,101,5);c,:np.arange(l00,59,-5))

data=pd.DataFrame(dict)

data['a']=data['a'].replace({l:'l班',2:2班',3:3班'})#將a列中的1、2、3分

別替換為1班、2班、3班

print(data)

輸出結(jié)果1如圖5-*所示。

Run:5-3

>C:\Users\liliang\Anaconda3\python.exeC:/Users八iliang/Pychar?Projects/sjfx/5-3.py

abC

01班60100

■方12班6595

23班7690

*.33班7585

.42妞8080

151W8575

69070

72班9565

83班10060

Processfinishedwithexitcode0

圖5?*利用數(shù)據(jù)分組繪制條形圖示例結(jié)果1

示例代碼如下:

group=data.groupby(by=,a,)[,b,].mean()#按a列分組再計算b列的平均值

group=round(group,0)#統(tǒng)計結(jié)果按照四舍五入顯示整數(shù)

print("按a列分組再計算b列的平均值的結(jié)果為:\n”,group)

輸出結(jié)果2如圖5-*所示。

Run:S-3

AC:\Users\liliang\Anaconda3\python.exeC:/Users/liliang/PychannProjects/sjfx/5-3.py

按a外分姐再計算b列的平均值的結(jié)果為:

a

二m1班78.0

2班80.0

*二退82°

Name:b,dtype:float64

Processfinishedwithexitcode0

圖5-*利用數(shù)據(jù)分組繪制條形圖示例結(jié)果2

示例代碼如下:

plt.rcParams['figure,figsize']=(10,6)

plt.rcParams[,font.sans-serif]=['SimHei,]

y=group.index

width=group

height=0.4

plt.barh(y,width,height,color=,darkorange',edgecolor=,b')

plt.title("按a列分組再計算b列的平均值")

plt.show()

輸出結(jié)果3如圖5-*所示。

\Figure1-OX

??6+Q三2El

圖5-*利用數(shù)據(jù)分組繪制條形圖示例結(jié)果3

任務實訓

任務1:利用read_csv導入鶯尾花數(shù)據(jù)集iris.csv數(shù)據(jù)(iris.csv存放在c:\data路

徑中),并命名為datal,完成:

⑴按"Iris-type"列分組,再計算“Sep_wid”列的平均值,結(jié)果保留2位小

數(shù),查看分組統(tǒng)計結(jié)果。

(2)根據(jù)分組統(tǒng)計結(jié)果繪制條形圖,顯示標題“不同類別鶯尾花的平均花萼寬

度條形圖”,并將標題文字顏色設(shè)為藍色,大小設(shè)為20,添加數(shù)據(jù)標簽,數(shù)據(jù)標簽

文字顏色設(shè)為紅色,大小設(shè)為15,添加x軸輔助線,輔助線的值為"Sep_wid”列的

總體平均值,輔助線的線型為點虛線,輔助線的顏色為灰色。

任務1(1)具體代碼如下:

datal=pd.read_csv("c:\data\iris.csv")

datal_group=datal.groupby('Iris_type,)['Sep_wid'].mean()

datal_group=round(data1_group,2)

print("datal的分組結(jié)果為:\n",datal_group)

輸出結(jié)果如圖5-*所示。

Run:吸5-3

CC:\Users\liliang\Anaconda3\python.exeC:/Users/liliang/PycharmProjects/sjfx/5-3.py

;datal的分蛆結(jié)果為:

Iris_type

*RIris-setosa3.42

Iris-versicolor2.77

“各Iris-virginica2.97

Name:Sep_wid,dtype:float64

圖5-*任務1(1)輸出結(jié)果

任務1(2)具體代碼如下:

plt.rcParamst^gure.figsize*]=(12,6)

plt.rcParams[,font.sans-serif]=['SimHei*]

y=np.arange(1,4)

width=datal_group

height=0.4

plt.barh(y,width,height,color='darkorange',edgecolor=,b')

plLtitle("不同類別鶯尾花的平均花萼寬度條形圖,color二b,size=20)

fori,jinzip(width,y):

plt.text(i+0.1,j,i,color='r',size=15)

plt.yticks(y,datal_group.index)

plt.axvline(datal[,Sep_wid'l.mean(),linestyle=,:,,color=,grey,)

plt.show()

輸出結(jié)果如圖5-*所示。

\Figure1—OX

育G6+Q三20

圖5-*任務1(2)輸出結(jié)果

任務2:根據(jù)任務1的導入數(shù)據(jù),重新命名為data2,完成:

⑴按“Iris_type”列分組,再計算PetJen"列和"Pet_wid”列的平均值,

結(jié)果保留2位小數(shù)。

(2)根據(jù)(1)的分組計算結(jié)果,在2行1列的兩個子圖中,分別繪制條形圖,

并比較其結(jié)果。

任務2(1)具體代碼如下:

data2=datal

print(data2.columns)

data2_group1=datal.groupby(,Iris_type,)[,Pet_len,].mean()

data2_groupl=round(data2_group1,2)

data2_group2=datal.groupby(,Iris_type,)L,Pet_wid,].mean()

data2_group2=round(data2_group2,2)

任務2(2)具體代碼如下:

fig=plt.figure(figsize=(12,6))

y1=data2_group1.index

width1=data2_group1

y2=data2_group2.index

width2=data2_group2

height=0.4

axl=fig.add_subplot(2,1,1)

ax1.barh(y1,width1,height,color=,darkorange,,edgecolor=,b,)

axl.set_title(uPet_len,',color='r',size=15)

ax2=fig.add_subplot(2,1,2)

ax2.barh(y2,width2,height,color=,darkorange,,edgecolor=,b,)

ax2.set_title("Pet_widn,color='r',size=15)

plt.show()

輸出結(jié)果如圖5-*所示。

\Figure1—OX

備G6+Q三2區(qū)I

圖5-*任務2輸出結(jié)果

【結(jié)果分析】從兩個子圖看,不管是“Pet」en",還是“Pet_wid",不同類別

的鶯尾花,都是平均值都是Iris-virginica>lris-versicolor>Iris-setosa?

鞏固訓練

創(chuàng)建DataFrame數(shù)據(jù)data,data包含4行3列,記錄了蘇州、青島、廈門3個城

市的GDP(單位:億元),如表5-*所示。在3行1列的三個子圖中,分別繪制不同

年份三個地區(qū)DGP條形圖,并比較其結(jié)果。

表5-*練習數(shù)據(jù)源

index蘇州重慶杭州

2017年170001953012556

2018年186972036313500

2019年19300236

溫馨提示

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

評論

0/150

提交評論