Python程序設(shè)計(jì)基礎(chǔ)(第2版)課件 第8章 數(shù)據(jù)可視化_第1頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)(第2版)課件 第8章 數(shù)據(jù)可視化_第2頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)(第2版)課件 第8章 數(shù)據(jù)可視化_第3頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)(第2版)課件 第8章 數(shù)據(jù)可視化_第4頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)(第2版)課件 第8章 數(shù)據(jù)可視化_第5頁(yè)
已閱讀5頁(yè),還剩139頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第8章數(shù)據(jù)可視化折線(xiàn)圖餅圖柱狀圖散點(diǎn)圖與氣泡圖直方圖8.18.28.38.48.5熱力圖箱線(xiàn)圖小提琴圖密度圖詞云圖8.68.78.88.98.10學(xué)習(xí)引導(dǎo)…了解…理解…掌握…運(yùn)用8數(shù)據(jù)可視化在各個(gè)領(lǐng)域經(jīng)常用各種數(shù)字類(lèi)指標(biāo)描述數(shù)據(jù)整體狀態(tài),為了更形象地描述數(shù)據(jù)的意義,經(jīng)常用繪圖的方法對(duì)數(shù)據(jù)中的信息進(jìn)行直觀(guān)的呈現(xiàn)。常用的繪圖庫(kù)有Matplotlib、Seaborn、Plotly、Pyecharts和Bokeh等,本節(jié)以matplotlibb為例講解數(shù)據(jù)可視化方法。Matplotlib

是一個(gè)應(yīng)用最為廣泛的、高質(zhì)量的Python2D繪圖庫(kù),使用者可以很輕松地將數(shù)據(jù)圖形化,并且提供多樣化的輸出格式。繪圖庫(kù)中提供了大量的子模塊和繪圖方法,可以繪制各種類(lèi)型的精美圖表。8數(shù)據(jù)可視化plot()折線(xiàn)圖boxplot()箱線(xiàn)圖hist2d()二維直方圖hist()直方圖bar()條(柱)形圖scatter()散點(diǎn)圖pie()餅圖errorbar()誤差條圖stem()莖狀圖violinplot()小提琴圖fill_between()填充區(qū)域stairs()階梯圖contour()等高線(xiàn)圖contourf()填充等高線(xiàn)圖streamplot()矢量流圖tricontour()非結(jié)構(gòu)化網(wǎng)格等高線(xiàn)tricontourf()非結(jié)構(gòu)化網(wǎng)格填充等高線(xiàn)tripcolor()非結(jié)構(gòu)化網(wǎng)格偽彩色圖8數(shù)據(jù)可視化stackplot()堆積圖eventplot()柵格圖hexbin()六邊形分箱圖ecdf()累積分布圖pcolormesh()不規(guī)則矩形網(wǎng)格偽彩色圖imshow()二維規(guī)則光柵barbs()風(fēng)羽標(biāo)圖quiver()向量圖triplot()三角形網(wǎng)格stem()3D莖葉圖plot()三維線(xiàn)型圖quiver()三維箭頭場(chǎng)圖scatter()三維散點(diǎn)圖plot_wireframe()3D網(wǎng)格圖plot_surface()三維表面圖plot_trisurf()三角形曲面圖voxels()填充體圖bar3d()三維條形圖8.1折線(xiàn)圖8.1折線(xiàn)圖折線(xiàn)圖(LineChart)折線(xiàn)圖是一種常見(jiàn)的數(shù)據(jù)可視化圖表,它通過(guò)點(diǎn)與點(diǎn)之間的線(xiàn)段連接展示數(shù)據(jù)隨時(shí)間或其他變量變化趨勢(shì)。通常,橫軸表示時(shí)間、類(lèi)別或某種獨(dú)立變量,縱軸表示與之對(duì)應(yīng)的數(shù)值。通過(guò)連接這些數(shù)據(jù)點(diǎn),線(xiàn)型圖能夠清晰地展示數(shù)據(jù)在一段時(shí)間內(nèi)的變化情況或不同類(lèi)別的比較。折線(xiàn)圖最適合用于表示連續(xù)數(shù)據(jù),常用于分析趨勢(shì)和變化,例如時(shí)間序列、趨勢(shì)分析、股市變化等。廣泛應(yīng)用于經(jīng)濟(jì)、金融、科學(xué)研究、生產(chǎn)管理等領(lǐng)域,幫助分析數(shù)據(jù)的變化模式。8.1折線(xiàn)圖

折線(xiàn)圖有多種類(lèi)型,適用于不同場(chǎng)景。常見(jiàn)的線(xiàn)型圖包括單折線(xiàn)圖、多折線(xiàn)圖、堆疊折線(xiàn)圖、帶區(qū)域填充的線(xiàn)型圖和步進(jìn)線(xiàn)型圖等。單折線(xiàn)圖是最基礎(chǔ)的折線(xiàn)圖,展示一個(gè)變量隨時(shí)間或其他獨(dú)立變量的變化。用于展示單一變量的趨勢(shì),例如某天的氣溫變化或某產(chǎn)品的銷(xiāo)售額變化。多折線(xiàn)圖是在同一個(gè)圖表中繪制多條線(xiàn),展示多個(gè)變量之間的變化和對(duì)比。用于比較多個(gè)數(shù)據(jù)集的趨勢(shì)變化,例如不同地區(qū)的銷(xiāo)售額變化、不同股票的價(jià)格波動(dòng)。堆疊折線(xiàn)圖是多條折線(xiàn)圖的變種。線(xiàn)條疊加在一起,表示每一部分的累加效果,整體體現(xiàn)總量的變化。用來(lái)展示多個(gè)數(shù)據(jù)集的累積值變化,例如不同部門(mén)的銷(xiāo)售額總和。8.1折線(xiàn)圖帶區(qū)域填充的線(xiàn)型圖是在折線(xiàn)圖的基礎(chǔ)上,填充線(xiàn)條與X軸之間的區(qū)域,使得圖表更具可視化效果。用于展示累積數(shù)據(jù)的變化,特別適合展示數(shù)值總量的變化趨勢(shì)。例如展示不同地區(qū)的市場(chǎng)份額隨時(shí)間變化的情況。步進(jìn)線(xiàn)型圖是以水平和垂直的線(xiàn)段代替?zhèn)鹘y(tǒng)的斜線(xiàn)連接數(shù)據(jù)點(diǎn),表現(xiàn)數(shù)據(jù)的跳躍性變化。適合展示變化發(fā)生在離散時(shí)間點(diǎn)的數(shù)據(jù),例如庫(kù)存數(shù)量隨時(shí)間的變化。折線(xiàn)圖與散點(diǎn)圖結(jié)合是在折線(xiàn)圖上疊加散點(diǎn),以便更清晰地展示離散點(diǎn)和趨勢(shì)線(xiàn)的關(guān)系。適合展示趨勢(shì)的同時(shí),強(qiáng)調(diào)每個(gè)數(shù)據(jù)點(diǎn)的具體值。例如展示實(shí)驗(yàn)結(jié)果的離散數(shù)據(jù)點(diǎn)和擬合出的趨勢(shì)線(xiàn)。8.1.1基本折線(xiàn)圖繪制安裝Matplotlib庫(kù)導(dǎo)入Matplotlib庫(kù)中繪制曲線(xiàn)圖的子庫(kù)pyplot,別名為plt。繪圖關(guān)鍵函數(shù)plot(x,y):根據(jù)坐標(biāo)x,y值繪圖。show():將緩沖區(qū)的繪制結(jié)果在屏幕上顯示出來(lái)。pipinstallmatplotlibimport

matplotlib.pyplotas

pltplt.plot(x,

y)

#根據(jù)坐標(biāo)x,y值繪圖plt.show()

#將緩沖區(qū)的繪制結(jié)果在屏幕上顯示出來(lái)8.1.1基本折線(xiàn)圖繪制過(guò)(1,1),(2,8),(3,27)...(100,1000000)繪制直線(xiàn)。#調(diào)用繪圖庫(kù)matplotlib中的pyplot子庫(kù),并起別名為pltimport

matplotlib.pyplot

as

plt

x

=

range(101)

#構(gòu)建x坐標(biāo)的數(shù)列:0,1,2,3...100y

=

[i

**

3

for

i

in

range(101)]

#構(gòu)建y坐標(biāo)的列表:0,1,8,27...1000000plt.plot(x,

y)

#參數(shù)為x,y的列表,過(guò)(1,1),(2,8),(3,27)...畫(huà)線(xiàn)plt.show()

#顯示創(chuàng)建的繪圖對(duì)象8.1.1基本折線(xiàn)圖繪制可以根據(jù)函數(shù)計(jì)算系列x和y的值,利用numpy中的方法產(chǎn)生間距更小的數(shù)組,以數(shù)組或列表的形式傳遞給plot()函數(shù),繪制簡(jiǎn)單函數(shù)曲線(xiàn)import

matplotlib.pyplot

as

pltimport

numpy

as

np

#導(dǎo)入numpy庫(kù),起別名np

x

=

np.arange(0,

5,

0.2)

#[0,5)區(qū)間,步長(zhǎng)0.2,生成數(shù)組square_of_x

=

x

**

2

#x的平方的數(shù)組cube_of_x

=

x

**

3

#x的立方的數(shù)組

plt.plot(x,

x)

#繪制y=x曲線(xiàn)plt.plot(x,

square_of_x)

#繪制y=x^2曲線(xiàn)plt.plot(x,cube_of_x)

#繪制y=x^3曲線(xiàn)

plt.show()

#顯示圖形8.1繪制sinc和lanczos函數(shù)曲線(xiàn)

實(shí)例8.1繪制sinc和lanczos函數(shù)曲線(xiàn)import

matplotlib.pyplot

as

plt

#導(dǎo)入matplotlib中的pyplot子庫(kù)并命別名為pltimport

numpy

as

np

#導(dǎo)入Numpy模塊并命別名為np

x

=

np.linspace(-20,

20,

1000)

#從-20到20生成1000個(gè)點(diǎn)sin_fun

=

np.sin(x)/x

#y=sin(x)/x,用numpy計(jì)算y值的數(shù)組lanczos

=

np.sinc(x)

*

np.sinc(x/5)

#用numpy計(jì)算y值的數(shù)組

plt.plot(x,

sin_fun,label='sinc')

#繪制圖像plt.plot(x,

lanczos,label='lanczos')plt.legend()

#顯示圖例

plt.show()

#顯示圖像實(shí)例8.2繪制國(guó)內(nèi)生產(chǎn)總值數(shù)據(jù)曲線(xiàn)實(shí)例說(shuō)明:列表[1470.1,2279.7,4587.6,18872.9,100280.1,412119.3,1013567.0]中保存了['1960','1970','1980','1990','2000','2010','2020']年的國(guó)內(nèi)生產(chǎn)總值數(shù)據(jù),繪制這段時(shí)間的國(guó)內(nèi)生產(chǎn)總值數(shù)據(jù)曲線(xiàn)。文件“china_gdp.csv”是來(lái)自國(guó)家統(tǒng)計(jì)局網(wǎng)站的國(guó)內(nèi)生產(chǎn)總值和人均國(guó)內(nèi)生產(chǎn)總值數(shù)據(jù),分別根據(jù)列表和文件中的數(shù)據(jù)繪制國(guó)內(nèi)生產(chǎn)總值和人均國(guó)內(nèi)生產(chǎn)總值數(shù)據(jù)曲線(xiàn)。數(shù)據(jù)文件格式如下:指標(biāo),2023,2022,2021,2020,......,,1952國(guó)內(nèi)生產(chǎn)總值(億元),1260582.1,1204724.0,1149237.0,1013567.0,......,679.1人均國(guó)內(nèi)生產(chǎn)總值(元),89358,85310,81370,71828,......,119實(shí)例8.2繪制國(guó)內(nèi)生產(chǎn)總值數(shù)據(jù)曲線(xiàn)import

matplotlib.pyplot

as

plt

year

=

['1960',

'1970',

'1980',

'1990',

'2000',

'2010',

'2020']gdp

=

[1470.1,

2279.7,

4587.6,

18872.9,

100280.1,

412119.3,

1013567.0]plt.plot(year,

gdp)

#繪制GDP曲線(xiàn)plt.show()

#顯示圖形實(shí)例根據(jù)給定列表中的數(shù)據(jù)繪圖,將年份和國(guó)內(nèi)生產(chǎn)總值作為plot()參數(shù)8.2繪制國(guó)內(nèi)生產(chǎn)總值數(shù)據(jù)曲線(xiàn)實(shí)例讀文件中的數(shù)據(jù)繪制曲線(xiàn)時(shí),先要查看文件中的數(shù)據(jù)格式,發(fā)現(xiàn)文件中有3行數(shù)據(jù),繪圖只需要用其中的2行??梢韵葘?shù)據(jù)讀到嵌套列表中,再提取年份和國(guó)內(nèi)生產(chǎn)總值的數(shù)據(jù)到不同的列表。需要注意兩個(gè)地方:文件中的數(shù)據(jù)是從2023年到1952年,使用時(shí)要將其逆序。數(shù)據(jù)都是字符串類(lèi)型,需要將其轉(zhuǎn)為數(shù)字類(lèi)型再繪圖。建議將讀文件和繪圖分為兩個(gè)函數(shù)分別實(shí)現(xiàn),這樣也利于程序的維護(hù)和拓展。8.2繪制國(guó)內(nèi)生產(chǎn)總值數(shù)據(jù)曲線(xiàn)import

matplotlib.pyplot

as

plt

def

get_data_from_file(file_path):

"""從文件中讀取數(shù)據(jù),返回嵌套列表"""

with

open(file_path,

'r',encoding='utf-8')

as

file:

data

=

[line.strip().split(',')

for

line

in

file]

#讀取文件中的數(shù)據(jù)到嵌套列表

year_ls

=

[int(x)

for

x

in

reversed(data[0][1:])

]

#提取年份數(shù)據(jù)轉(zhuǎn)為整數(shù)類(lèi)型

gdp_ls

=

[float(x)

for

x

in

reversed(data[1][1:])]

#提取GDP數(shù)據(jù)轉(zhuǎn)為浮點(diǎn)數(shù)類(lèi)型

gdp_per_capite_ls

=

[float(x)

for

x

in

reversed(data[2][1:])]

#提取人均GDP數(shù)據(jù)

return

year_ls,

gdp_ls,

gdp_per_capite_ls(接下頁(yè))實(shí)例8.2繪制國(guó)內(nèi)生產(chǎn)總值數(shù)據(jù)曲線(xiàn)(續(xù)上頁(yè))def

draw_curves(year,

gdp,gdp_per_capite):

"""繪制GDP曲線(xiàn)"""

plt.plot(year,

gdp)

#繪制GDP曲線(xiàn)

plt.plot(year,

gdp_per_capite)

#繪制人均GDP曲線(xiàn)

plt.show()

#顯示圖形

if

__name__

==

'__main__':

file_path

=

'china_gdp.csv'

#文件名和路徑

year,

gdp,

gdp_per_capite

=

get_data_from_file(file_path)

draw_curves(year,

gdp,gdp_per_capite)實(shí)例8.1.2標(biāo)注與美化matplotlib默認(rèn)字體由一組rcParams控制,默認(rèn)使用安裝在用戶(hù)計(jì)算機(jī)上的英文字體系列,如Helvetica、Times等,中文無(wú)法正常顯示。可以通過(guò)設(shè)置rcParams參數(shù)值來(lái)修改用于顯示的中文字體,例如"SimSun(宋體)""SimHei(細(xì)黑)""FangSong(仿宋)"等,也可以在需要顯示中文的語(yǔ)句中fontproperties指定字體,后一種方法適用性沒(méi)有前一種好。plt.rcParams['axes.unicode_minus']

=

False

#字符顯示plt.rcParams['font.sans-serif']

=

'SimHei’

#設(shè)置字體設(shè)置字體8.1.2標(biāo)注與美化Matplotlib支持對(duì)曲線(xiàn)進(jìn)行各種標(biāo)注與美化,規(guī)定線(xiàn)條顏色、線(xiàn)型、線(xiàn)標(biāo)識(shí)、圖名等操作。plot()方法還可以通過(guò)參數(shù)設(shè)置線(xiàn)條屬性,設(shè)置線(xiàn)條風(fēng)格、線(xiàn)條顏色、線(xiàn)條標(biāo)記、線(xiàn)型和寬度。線(xiàn)條屬性描述線(xiàn)條屬性描述color或c顏色linestyle或ls線(xiàn)型label曲線(xiàn)標(biāo)識(shí)linewidth或lw線(xiàn)寬度marker數(shù)據(jù)點(diǎn)標(biāo)記markersize或ms標(biāo)記大小線(xiàn)條常用屬性美化曲線(xiàn)8.1.2標(biāo)注與美化線(xiàn)條風(fēng)格(linestyle

或ls)線(xiàn)條風(fēng)格描述線(xiàn)條風(fēng)格描述-實(shí)線(xiàn):虛線(xiàn)--破折線(xiàn)-.點(diǎn)劃線(xiàn)color別名顏色color別名顏色blueb藍(lán)色greeng綠色redr紅色yellowy黃色cyanc青色blackk黑色magentam洋紅色whitew白色線(xiàn)條顏色(color或c)8.1.2標(biāo)注與美化常用線(xiàn)條標(biāo)記(marker)標(biāo)記描述標(biāo)記描述“,”像素“>”右三角形“.”點(diǎn)“<”左三角形“o”圓“v”倒三角形“*”星號(hào)“^”正三角形“+”加號(hào)“1”正三分支“P”填充的加號(hào)“2”倒三分支“x”乘號(hào)“3”左三分支“_”水平線(xiàn)“4”右三分支8.1.2標(biāo)注與美化可以在plot()的括號(hào)中用參數(shù)color、linestyle、marker分別設(shè)置顏色、線(xiàn)型和標(biāo)記樣式。例如:color='red',linestyle='-',marker='o'表示紅色、實(shí)線(xiàn)、圓點(diǎn)標(biāo)記。也可以將顏色、標(biāo)記和線(xiàn)型寫(xiě)成一個(gè)字符串'[color][marker][line]'

做參數(shù),例如用'r-o'表示紅色實(shí)線(xiàn)圓點(diǎn)標(biāo)記。plt.plot(year,

gdp,color='red',linestyle='-',marker='o',label='GDP')

#繪制GDP曲線(xiàn)plt.plot(year,

gdp_per_capite,'g*--',label='GDPperCapite')

#繪制人均GDP曲線(xiàn)8.1.2標(biāo)注與美化legend()可以通過(guò)設(shè)置loc參數(shù)值指定標(biāo)簽放置的位置。常用的loc值有:'best'、'upperright'、'upperleft'、'lowerleft'、'lowerright'、'right'、'centerleft'、'centerright'、'lowercenter'、'uppercenter'、'center',也可以用0-10的數(shù)字指定。添加圖例plt.legend()8.1.2標(biāo)注與美化ticks

是一個(gè)類(lèi)數(shù)組對(duì)象,放置需要設(shè)置刻度的數(shù)據(jù)。labels

可以是一個(gè)列表,放置用于顯示的刻度數(shù)據(jù),例如可以用latex語(yǔ)法將之顯示為數(shù)學(xué)表示。當(dāng)刻度數(shù)據(jù)較多時(shí),可用rotation

關(guān)鍵字將標(biāo)簽旋轉(zhuǎn)一定角度。設(shè)置x軸刻度位置和標(biāo)簽plt.xticks(ticks,

labels=None,

rotation=0)

8.1.2標(biāo)注與美化標(biāo)簽相關(guān)函數(shù)函數(shù)描述函數(shù)描述title(text)為當(dāng)前繪圖添加標(biāo)題

textxlabel(s)設(shè)置x軸標(biāo)簽legend()為當(dāng)前繪圖放置圖注ylabel(s)設(shè)置y軸標(biāo)簽annotate()為指定數(shù)據(jù)點(diǎn)創(chuàng)建注釋xticks(ticks)設(shè)置x軸刻度位置和標(biāo)簽grid()顯示網(wǎng)格yticks()設(shè)置y軸刻度位置和標(biāo)簽8.2繪制國(guó)內(nèi)生產(chǎn)總值數(shù)據(jù)曲線(xiàn)實(shí)例說(shuō)明:對(duì)實(shí)例8.2的曲線(xiàn):設(shè)置國(guó)內(nèi)生產(chǎn)總值曲線(xiàn)為紅色、實(shí)線(xiàn)、數(shù)據(jù)標(biāo)識(shí)為圓點(diǎn),顯示的曲線(xiàn)標(biāo)簽為"GDP"。人均國(guó)內(nèi)生產(chǎn)總值曲線(xiàn)為綠色、破折線(xiàn)、數(shù)據(jù)標(biāo)識(shí)為星形,顯示的曲線(xiàn)標(biāo)簽為"GDPperCapite"。添加x軸標(biāo)簽為"Year",添加y軸標(biāo)簽為"GDP"。設(shè)置x軸刻度為每5的整數(shù)倍年份,傾斜45度顯示。顯示網(wǎng)格線(xiàn),圖例位于左上角顯示。實(shí)例8.2繪制國(guó)內(nèi)生產(chǎn)總值數(shù)據(jù)曲線(xiàn)實(shí)例def

draw_curves(year,

gdp,gdp_per_capite):

"""繪制GDP曲線(xiàn)"""

plt.plot(year,

gdp,color='red',linestyle='-',marker='o',label='GDP')

#繪制GDP曲線(xiàn)

plt.plot(year,

gdp_per_capite,'g*--',label='GDPperCapite')

#繪制人均GDP曲線(xiàn)

plt.title('中國(guó)GDP和人均GDP變化曲線(xiàn)',fontproperties='SimSun')

#添加標(biāo)題

plt.xlabel('年份',fontproperties='SimSun')

#添加x軸標(biāo)簽

plt.ylabel('GDP',fontproperties='SimSun')

#添加y軸標(biāo)簽

plt.xticks([x

for

x

in

range(1950,2021,5)],rotation=45)

#設(shè)置x軸刻度,傾斜45度

plt.grid()

#顯示網(wǎng)格線(xiàn)

plt.legend(loc='upperleft')

#添加圖例,置于左上角

plt.show()

#顯示圖形8.1.2標(biāo)注與美化坐標(biāo)軸相關(guān)函數(shù)函數(shù)描述xlim(xmin,xmax)設(shè)置當(dāng)前

x軸取值范圍ylim(ymin,ymax)設(shè)置當(dāng)前

y軸取值范圍函數(shù)描述axhline(x=0,ymin=0,ymax=1)繪制水平線(xiàn),y取值從

0到

1為整個(gè)區(qū)間hlines()繪制水平線(xiàn)axvline(x=0,ymin=0,ymax=1)繪制垂直線(xiàn),y取值從

0到

1為整個(gè)區(qū)間vlines()繪制垂直線(xiàn)繪制直線(xiàn)相關(guān)函數(shù)8.1.2標(biāo)注與美化函數(shù)描述axhspan()水平區(qū)域axvspan()豎直區(qū)域fill_between()填充兩條曲線(xiàn)圍起的區(qū)域,區(qū)間由橫坐標(biāo)限定fill_betweenx()填充兩條曲線(xiàn)圍起的區(qū)域,區(qū)間由縱坐標(biāo)限定填充相關(guān)函數(shù)Matplotlib內(nèi)置多個(gè)函數(shù)可實(shí)現(xiàn)各種填充效果,常用的填充函數(shù)包括填充水平區(qū)域、填充豎直區(qū)域和填充兩條曲線(xiàn)包圍的區(qū)域等。填充效果8.1.2標(biāo)注與美化函數(shù)描述savefig('文件名')保存繪制的圖像,必須置于繪制完成之后和show()之前show()顯示繪制的圖像,同時(shí)清空緩沖區(qū)保存與顯示相關(guān)函數(shù)顯示在屏幕上使用函數(shù)show(),無(wú)參數(shù)。保存圖片文件使用savefig('文件名')函數(shù),該函數(shù)依賴(lài)于pillow庫(kù)。參數(shù)是保存的文件名,savefig('文件名')語(yǔ)句必置于show()語(yǔ)句前,這是因?yàn)閟how()函數(shù)在顯示圖像的同時(shí),會(huì)清空緩沖區(qū),無(wú)法再保存成文件。顯示圖形及保存文件8.3繪制股票收盤(pán)價(jià)曲線(xiàn)實(shí)例說(shuō)明:“600066.csv”中保存著某只股票歷年交易數(shù)據(jù),繪制其成交價(jià)變化曲線(xiàn)和平均價(jià)線(xiàn),在最高價(jià)處給出標(biāo)注。思路:讀文件中的數(shù)據(jù)到列表,數(shù)據(jù)轉(zhuǎn)數(shù)字類(lèi)型,可用推導(dǎo)式實(shí)現(xiàn)。用plot()函數(shù)繪制曲線(xiàn),繪制x軸刻度,用xticks()實(shí)現(xiàn),旋轉(zhuǎn)45度用參數(shù)rotation=45實(shí)現(xiàn)。注釋用annotate()實(shí)現(xiàn),最高價(jià)可用max()獲取,對(duì)應(yīng)的日期可用index()或find()獲取。實(shí)例8.3繪制股票收盤(pán)價(jià)曲線(xiàn)import

matplotlib.pyplot

as

plt

#定義符號(hào)常量,方便索引和切片DATE

=

0HIGH

=

1LOW

=

2OPEN

=

3CLOSE

=

4VOLUME

=

5ADJCLOSE

=

6

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

=

['SimHei’]

#設(shè)置中文顯示plt.rcParams['axes.unicode_minus']

=

False

#字符顯示(接下頁(yè))實(shí)例8.3繪制股票收盤(pán)價(jià)曲線(xiàn)def

get_data_from_file(file_path):

"""從文件中讀取數(shù)據(jù),返回日期和收盤(pán)價(jià)的列表"""

with

open(file_path,

'r',

encoding='utf-8')

as

file:

data

=

[line.strip().split(',')

for

line

in

file]

#讀取文件中的數(shù)據(jù)到嵌套列表

date_ls

=

[x[DATE]

for

x

in

data[1:]]

#提取日期數(shù)據(jù)

open_ls

=

[float(x[OPEN])

for

x

in

data[1:]]

#提取收盤(pán)價(jià)數(shù)據(jù)轉(zhuǎn)為浮點(diǎn)數(shù)類(lèi)型

close_ls

=

[float(x[CLOSE])

for

x

in

data[1:]]

#提取收盤(pán)價(jià)數(shù)據(jù)轉(zhuǎn)為浮點(diǎn)數(shù)類(lèi)型

return

date_ls,

open_ls,

close_ls

#返回日期和收盤(pán)價(jià)的列表數(shù)據(jù)(接下頁(yè))實(shí)例8.3繪制股票收盤(pán)價(jià)曲線(xiàn)def

draw_curves(date_ls,

open_ls,

close_ls):

"""繪制GDP曲線(xiàn)"""

plt.plot(date_ls,

open_ls,'-',label='開(kāi)盤(pán)價(jià)')

#繪制開(kāi)盤(pán)價(jià)曲線(xiàn)

plt.plot(date_ls,

close_ls,

'-',

label='收盤(pán)價(jià)')

#繪制收盤(pán)價(jià)曲線(xiàn)

plt.xticks(date_ls[0::150],

rotation=45)

#設(shè)置x軸刻度,傾斜45度

plt.hlines(sum(close_ls)

/

len(close_ls),

date_ls[0],

date_ls[-1],

colors='r',

linestyles='--',

label='平均價(jià)格’)

#繪制y=0的水平虛線(xiàn)

plt.annotate('最高價(jià)',

xy=(date_ls[close_ls.index(max(close_ls))],

max(close_ls)),

xytext=(+30,

-10),

textcoords='offsetpoints',

fontsize=16,

arrowprops=dict(arrowstyle="->",

connectionstyle="arc3,rad=.2")) #為最高價(jià)處加注釋說(shuō)明

plt.grid()

#顯示網(wǎng)格線(xiàn)

plt.legend(loc='upperleft')

#添加圖例,置于左上角

plt.savefig('stock.png')

#保存圖形到文件

plt.show()

#顯示圖形實(shí)例8.3繪制股票收盤(pán)價(jià)曲線(xiàn)實(shí)例8.1.3繪制多子圖Matplotlib提供將同一畫(huà)布劃分成多個(gè)子區(qū)域的方法,可以將多個(gè)圖形在同一個(gè)畫(huà)布上不同區(qū)域繪制??蓱?yīng)用subplot()函數(shù)實(shí)現(xiàn),語(yǔ)法如下:plt.subplot(nrows,ncols,index,

**kwargs)nrows,ncols,index分別表示行數(shù)、列數(shù)和序號(hào)。當(dāng)前畫(huà)布被劃分為nrows×ncols個(gè)子區(qū)域,index表示當(dāng)前圖繪制在第index個(gè)子區(qū)域。當(dāng)行數(shù)、列數(shù)和序號(hào)全部小于10時(shí),也可以將三個(gè)數(shù)字合并成一個(gè)三位數(shù)字來(lái)表示。例如subplot(2,3,3)和subplot(233)都會(huì)創(chuàng)建一個(gè)2行3列的繪圖區(qū)域,當(dāng)前圖序號(hào)為3。8.1.3繪制多子圖實(shí)例8.1修改為在同一個(gè)畫(huà)布上的兩個(gè)子圖中繪制國(guó)內(nèi)生產(chǎn)總值和人均國(guó)內(nèi)生產(chǎn)總值數(shù)據(jù)曲線(xiàn)。def

draw_curves(year,

gdp,gdp_per_capite):

"""繪制GDP曲線(xiàn)"""

plt.subplot(2,

1,

1)

#分成2x2,用第1行第1列的子圖

plt.plot(year,

gdp,color='red',linestyle='-',marker='o',label='GDP')

#繪制GDP曲線(xiàn)

plt.subplot(2,

1,

2)

#分成2x2,用第1行第1列的子圖

plt.plot(year,

gdp_per_capite,'g*--',label='GDPperCapite')

#繪制人均GDP曲線(xiàn)

plt.show()

#顯示圖形8.1.4數(shù)據(jù)文件繪圖除去根據(jù)函數(shù)繪制曲線(xiàn)外,更多的應(yīng)用是根據(jù)文件中的數(shù)據(jù)繪制數(shù)據(jù)曲線(xiàn)一般的做法是打開(kāi)文件,讀取文件中的數(shù)據(jù)到列表中,再繪制數(shù)據(jù)曲線(xiàn)8.4繪制溫度曲線(xiàn)實(shí)例說(shuō)明:文件“Weatherofbeijing.csv”中保存了北京市2024年9月的天氣數(shù)據(jù),繪制9月的氣溫變化曲線(xiàn)、9月最高溫度的平均值線(xiàn)、9月最低氣溫的平均值線(xiàn)。數(shù)據(jù)格式如下:2024-09-01星期日,32℃,19℃,陰~晴,東北風(fēng)3級(jí)2024-09-02星期一,28℃,18℃,陰~晴,東南風(fēng)1級(jí)2024-09-03星期二,27℃,20℃,陰~小雨,南風(fēng)2級(jí)......2024-09-30星期一,20℃,13℃,中雨,北風(fēng)3級(jí)實(shí)例8.4繪制溫度曲線(xiàn)思路:分析數(shù)據(jù)文件,發(fā)現(xiàn)各數(shù)據(jù)項(xiàng)之間是逗號(hào)分隔的,可以根據(jù)逗號(hào)切分并轉(zhuǎn)為嵌套列表。再將日期、最高氣溫和最低氣溫分別提取到列表中,日期用切片方法取月日信息,氣溫切去最后一個(gè)表示攝氏的符號(hào)并轉(zhuǎn)為整數(shù)??煞纸鉃閮蓚€(gè)子問(wèn)題:讀取文件中的數(shù)據(jù)到列表,可以使用列表推導(dǎo)式完成,注意遍歷文件對(duì)象讀取并切分后仍是字符串,繪圖的數(shù)據(jù)需要轉(zhuǎn)為數(shù)字類(lèi)型。繪制曲線(xiàn)和設(shè)定線(xiàn)型顏色等,各定義一個(gè)函數(shù)實(shí)現(xiàn)。實(shí)例8.4繪制溫度曲線(xiàn)import

matplotlib.pyplot

as

plt

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

=

'SimHei'plt.rcParams['axes.unicode_minus']

=

False

def

get_data_from_file(file_path):

"""從文件中讀取數(shù)據(jù),返回嵌套列表"""

with

open(file_path,

'r',encoding='utf-8')

as

file:

data

=

[line.strip().split(',')

for

line

in

file]

#讀取文件中的數(shù)據(jù)到嵌套列表

day

=

[x[0][5:10]

for

x

in

data]

#提取日期

high_temp

=

[int(x[1][:-1])

for

x

in

data]

#提取高溫?cái)?shù)據(jù)轉(zhuǎn)為浮點(diǎn)數(shù)類(lèi)型

low_temp

=

[int(x[2][:-1])

for

x

in

data]

#提取低溫?cái)?shù)據(jù)轉(zhuǎn)為浮點(diǎn)數(shù)類(lèi)型

return

day,

high_temp,

low_temp

#返回日期、高溫和低溫?cái)?shù)據(jù)(接下頁(yè))實(shí)例8.4繪制溫度曲線(xiàn)def

draw_curves(day,

high_temp,

low_temp):

"""繪制GDP曲線(xiàn)"""

plt.plot(day,

high_temp,'r-o',label='最高氣溫')

#繪制高溫曲線(xiàn)

plt.plot(day,

low_temp,'g--*',label='最低氣溫')

#繪制低溫曲線(xiàn)

plt.title('2024年9月北京氣溫變化曲線(xiàn)',fontproperties='SimSun’)

#添加標(biāo)題

plt.xlabel('日期',fontproperties='SimSun')

#添加x軸標(biāo)簽

plt.ylabel('氣溫',fontproperties='SimSun')

#添加y軸標(biāo)簽

#添加水平參考線(xiàn)

plt.hlines(sum(high_temp)/len(high_temp),0,len(day),colors='red',linestyles=':')

plt.hlines(sum(low_temp)/len(low_temp),0,len(day),colors='green',linestyles=':')

plt.xticks(rotation=45)

#設(shè)置x軸刻度,傾斜45度

plt.grid()

#顯示網(wǎng)格線(xiàn)

plt.legend(loc='upperright')

#添加圖例,置于左上角

plt.show()

#顯示圖形實(shí)例8.4繪制溫度曲線(xiàn)實(shí)例8.5繪制心電圖實(shí)例說(shuō)明:文件“ecg_samples.txt”包含兩組心電數(shù)據(jù),讀取文件中的數(shù)據(jù)在兩個(gè)子圖中繪制心電圖。數(shù)據(jù)共3600行格式如下:0:00.000 -0.145 -0.0650:00.003 -0.145 -0.0650:00.006 -0.145 -0.0650:00.008 -0.145 -0.065......0:09.994 -0.400 -0.2900:09.997 -0.405 -0.285實(shí)例8.5繪制心電圖思路:對(duì)于此類(lèi)問(wèn)題,首先還是進(jìn)行分解:先用推導(dǎo)式讀文件中的數(shù)據(jù)到嵌套列表,將嵌套列表中的同系列數(shù)據(jù)提取到列表中,字符串?dāng)?shù)據(jù)轉(zhuǎn)數(shù)字類(lèi)型。用subplot()拆分子圖,用plot()繪制曲線(xiàn),用grid()添加網(wǎng)格,用show()顯示繪制結(jié)果。因代碼較少,可將問(wèn)題用兩個(gè)函數(shù)實(shí)現(xiàn):一個(gè)函數(shù)用于讀取文件中的數(shù)據(jù)到列表,以列表類(lèi)型返回各系列的數(shù)據(jù)。第二個(gè)函數(shù)用于繪制曲線(xiàn)。實(shí)例8.5繪制心電圖import

matplotlib.pyplot

as

plt

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

=

'SimHei'

#設(shè)置中文顯示plt.rcParams['axes.unicode_minus']

=

False

#正常顯示負(fù)號(hào)

def

get_data_from_file(file_path):

"""從文件中讀取數(shù)據(jù),返回嵌套列表"""

with

open(file_path,

'r',encoding='utf-8')

as

file:

data

=

[line.strip().split()

for

line

in

file]

#讀取文件中的數(shù)據(jù)到嵌套列表

time

=

[float(x[0][2:])

for

x

in

data]

#提取時(shí)間序列數(shù)據(jù)

lead1

=

[float(x[1])

for

x

in

data]

#提取lead1數(shù)據(jù)

lead2

=

[float(x[2])

for

x

in

data]

#提取lead2數(shù)據(jù)

return

time,

lead1,

lead2

#

返回時(shí)間序列數(shù)據(jù)和lead1、lead2數(shù)據(jù)(接下頁(yè))實(shí)例8.5繪制心電圖def

draw_curves(time,

lead1,

lead2):

"""在下下兩個(gè)子圖中分別繪制心電圖曲線(xiàn)"""

plt.subplot(211)

#分上下兩個(gè)子圖占用上面子圖

plt.plot(time,

lead1)

#繪制心電圖曲線(xiàn)

plt.grid(True)

#顯示網(wǎng)格

plt.subplot(212)

#分上下兩個(gè)子圖占用下面子圖

plt.plot(time,

lead2)

#繪制心電圖曲線(xiàn)

plt.grid(True)

#顯示網(wǎng)格

plt.show()

#顯示圖形

if

__name__

==

'__main__':

file_path

=

'ecg_samples.txt'

#文件名和路徑

time,

lead1,

lead2

=

get_data_from_file(file_path)

draw_curves(time,

lead1,

lead2)

#調(diào)用函數(shù)繪制心電圖曲線(xiàn)實(shí)例8.5繪制心電圖實(shí)例8.6繪制科學(xué)實(shí)驗(yàn)數(shù)據(jù)曲線(xiàn)實(shí)例說(shuō)明:有一包含多列數(shù)據(jù)的文件“PDOS.csv”,8列數(shù)據(jù)分別代表4組(x,y)坐標(biāo),利用文件中的數(shù)據(jù)繪制如下所示的數(shù)據(jù)曲線(xiàn)。在211子圖中繪制所有數(shù)據(jù)的曲線(xiàn);在223子圖中分別繪制曲線(xiàn)在(-5,5)之間的部分;在224子圖中繪制最后2列數(shù)據(jù)的曲線(xiàn)在(-5,5)之間的部分。實(shí)例8.6繪制科學(xué)實(shí)驗(yàn)數(shù)據(jù)曲線(xiàn)實(shí)例說(shuō)明:下面僅給出文件前3行和最后一行數(shù)據(jù):-58.55742805,0,-58.55742805,0,-58.55742805,0,-58.55742805,0-58.54690537,0,-58.54690537,0,-58.54690537,0,-58.54690537,0-57.47359261,0.000110663,-57.16843505,0.000112165,-57.04216296,0.000102657,-57.47359261,0.00011105……18.19495756,0.023266078,17.72143722,1.054125932,22.33036852,0,16.18512679,0.690765294實(shí)例8.6繪制科學(xué)實(shí)驗(yàn)數(shù)據(jù)曲線(xiàn)思路:目標(biāo)圖是先把繪圖區(qū)分為上下2個(gè)區(qū)使用第一個(gè),可在subplot(211)中繪制總的數(shù)據(jù)圖,再把繪圖區(qū)分為上下兩行左右兩列,使用第3、4兩個(gè)區(qū)域,即在subplot(223)和subplot(224)中繪制下面兩個(gè)圖。下半部的兩個(gè)子圖只顯示橫坐標(biāo)在(-5,5)之間且縱坐標(biāo)在(0,8)之間的區(qū)域,相當(dāng)于這部分圖的放大效果,兩個(gè)圖的區(qū)別是左下方子圖(223)是4條曲線(xiàn)的圖,右下方子圖(224)是只繪制最后兩列數(shù)據(jù)的曲線(xiàn)。因211子圖和223子圖是同一個(gè)圖畫(huà)兩次,只是顯示區(qū)域不同,所以可以把繪制所有數(shù)據(jù)曲線(xiàn)定義成一個(gè)函數(shù),重復(fù)調(diào)用兩次。實(shí)例8.6繪制科學(xué)實(shí)驗(yàn)數(shù)據(jù)曲線(xiàn)import

matplotlib.pyplot

as

plt

def

get_data_from_file(file_path):

"""從文件中讀取數(shù)據(jù),返回嵌套列表"""

with

open(file_path,

'r',

encoding='utf-8')

as

file:

data

=

[line.strip().split(',')

for

line

in

file]

#數(shù)據(jù)轉(zhuǎn)列表

return

data

def

draw_curves(data):

"""繪制數(shù)據(jù)曲線(xiàn)"""

for

i

in

range(4):

#每次循環(huán)讀相鄰兩列數(shù)據(jù)繪制一條曲線(xiàn)

x

=

[float(ls[2

*

i])

for

ls

in

data]

#生成x的數(shù)組

y

=

[float(ls[2

*

i

+

1])

for

ls

in

data]

#生成y的數(shù)組

plt.plot(x,

y)

實(shí)例8.6繪制科學(xué)實(shí)驗(yàn)數(shù)據(jù)曲線(xiàn)def

draw_subplot(data): #繪制子圖

plt.subplot(211)

#占用上方子圖

draw_curves(data)

#繪制數(shù)據(jù)曲線(xiàn)

plt.subplot(223)

#占用左下方子圖

draw_curves(data)

#繪制數(shù)據(jù)曲線(xiàn)

plt.xlim(-5,

5)

#設(shè)置x軸范圍

plt.ylim(0,

8)

#設(shè)置y軸范圍

plt.subplot(224)

#占用右下方子圖

x

=

[float(ls[6])

for

ls

in

data]

#生成x的數(shù)組

y

=

[float(ls[7])

for

ls

in

data]

#生成y的數(shù)組

plt.plot(x,

y)

#繪制一條數(shù)據(jù)曲線(xiàn)

plt.xlim(-5,

5)

#設(shè)置x軸范圍

plt.ylim(0,

8)

#設(shè)置y軸范圍

plt.show()

#顯示圖形實(shí)例8.6繪制科學(xué)實(shí)驗(yàn)數(shù)據(jù)曲線(xiàn)實(shí)例8.6繪制科學(xué)實(shí)驗(yàn)數(shù)據(jù)曲線(xiàn)def

get_data_from_file(file_path):

"""從文件中讀取數(shù)據(jù),返回二維數(shù)組"""

data

=

np.loadtxt(file_path,

delimiter=',')

#讀逗號(hào)分隔數(shù)據(jù)文件#delimiter=','表示用逗號(hào)作為分隔符自動(dòng)切分字段

return

data

#返回二維數(shù)據(jù)類(lèi)型的數(shù)據(jù)

def

draw_curves(data):

"""繪制數(shù)據(jù)曲線(xiàn)"""

for

i

in

range(4):

#每次循環(huán)讀相鄰兩列數(shù)據(jù)繪制一條曲線(xiàn)

plt.plot(data[:,

2*i],

data[:,

2*i+1])

#切片獲取兩列數(shù)據(jù)繪圖

plt.show()實(shí)例文件中的數(shù)據(jù)有多列時(shí),用NumPy和Pandas處理就更加方便。在NumPy中,使用loadtxt()

函數(shù)可以方便地讀取csv或txt文件,并將數(shù)據(jù)載入NumPy數(shù)組。8.6繪制科學(xué)實(shí)驗(yàn)數(shù)據(jù)曲線(xiàn)def

get_data_from_file(file_path):

"""從文件中讀取數(shù)據(jù),返回dataframe類(lèi)型數(shù)據(jù)"""

data_df

=

pd.read_csv(file_path,

delimiter=',')

#轉(zhuǎn)dataframe類(lèi)型

return

data_df

#返回dataframe類(lèi)型數(shù)據(jù)

def

draw_curves(data):

"""繪制數(shù)據(jù)曲線(xiàn)"""

for

i

in

range(4):

#每次循環(huán)讀相鄰兩列數(shù)據(jù)繪制一條曲線(xiàn)

plt.plot(data.iloc[:,

2*i],

data.iloc[:,

2*i+1])

#切片獲取兩列數(shù)據(jù)

plt.show()

#顯示圖形實(shí)例在Pandas庫(kù)中,使用read_csv()函數(shù)可以方便地讀取csv或txt文件,并將數(shù)據(jù)載入為dataframe

類(lèi)型。可通過(guò)列標(biāo)簽或dataframe.iloc[:,

i]

獲取其中第i列數(shù)據(jù)。8.1.5雷達(dá)圖雷達(dá)圖(RadarChart)雷達(dá)圖,也稱(chēng)為蛛網(wǎng)圖、極坐標(biāo)圖,是一種用于展示多變量數(shù)據(jù)的可視化工具。它通過(guò)多個(gè)從同一中心點(diǎn)輻射的軸,將每個(gè)軸代表的變量值連接成一個(gè)多邊形,從而形成一個(gè)類(lèi)似雷達(dá)網(wǎng)格的圖形。因此,雷達(dá)圖適合用于比較多個(gè)對(duì)象在多個(gè)維度上的表現(xiàn)。雷達(dá)圖的結(jié)構(gòu)里,用一個(gè)中心點(diǎn)表示所有變量的起點(diǎn),一般為0。每個(gè)軸表示一個(gè)變量,軸的數(shù)值從中心向外遞增。每個(gè)數(shù)據(jù)集在各個(gè)維度上的值通過(guò)線(xiàn)段連接,形成一個(gè)閉合的多邊形。多邊形的形狀能夠直觀(guān)地顯示數(shù)據(jù)的模式和特征。沿著每個(gè)軸有標(biāo)度,表示變量的取值范圍。8.1.5雷達(dá)圖雷達(dá)圖的優(yōu)勢(shì)在于能夠同時(shí)展示多個(gè)維度的數(shù)據(jù),并且能夠直觀(guān)地顯示各個(gè)對(duì)象在不同維度上的表現(xiàn),幫助用戶(hù)快速發(fā)現(xiàn)數(shù)據(jù)中的模式、差異和潛在的問(wèn)題。不過(guò),使用雷達(dá)圖時(shí)需要注意,如果維度過(guò)多,圖表可能會(huì)變得難以解讀。各個(gè)維度的尺度應(yīng)當(dāng)保持一致或經(jīng)過(guò)標(biāo)準(zhǔn)化處理,以免造成誤導(dǎo)。由于雷達(dá)圖結(jié)構(gòu)簡(jiǎn)單、直觀(guān),適合展示和比較多維數(shù)據(jù),因此廣泛應(yīng)用于市場(chǎng)分析、體育評(píng)估、教育、金融、項(xiàng)目管理等多個(gè)領(lǐng)域。8.7繪制成績(jī)雷達(dá)圖實(shí)例說(shuō)明:某學(xué)校進(jìn)行了一次考試,三個(gè)專(zhuān)業(yè)的各門(mén)課程平均成績(jī)保存在文件“score_radar.txt”中,文件中的數(shù)據(jù)如下:對(duì)這三個(gè)專(zhuān)業(yè)的整體成績(jī)做出評(píng)估,為接下來(lái)的教學(xué)計(jì)劃做出指導(dǎo),繪制雷達(dá)圖對(duì)數(shù)據(jù)進(jìn)行展示。實(shí)例專(zhuān)業(yè)C語(yǔ)言JavaPythonC#Javascript軟件工程9596856391計(jì)算機(jī)科學(xué)與技術(shù)7593668588網(wǎng)絡(luò)工程86769693678.7繪制成績(jī)雷達(dá)圖import

numpy

as

npimport

matplotlib.pyplot

as

plt

#讀取文件中的數(shù)據(jù)并附加到列表中with

open('score_radar.txt',

'r',

encoding='utf-8')

as

file:

scoreA

=

[line.strip().split('\t')

for

line

in

file]labels

=

np.array(scoreA)[0,

1:]

#序號(hào)0行中序號(hào)1后的列作標(biāo)簽dataLenth

=

5

#數(shù)據(jù)個(gè)數(shù)cl

=

['b',

'g',

'r']

#填充顏色angles

=

np.linspace(0,

2

*

np.pi,

dataLenth,

endpoint=False)angles

=

np.append(angles,

[angles[0]])

#閉合曲線(xiàn)(接下頁(yè))實(shí)例8.7繪制成績(jī)雷達(dá)圖(續(xù)上頁(yè))fig

=

plt.figure()

#創(chuàng)建畫(huà)布ax

=

fig.add_subplot(111,

polar=True)

#創(chuàng)建子圖,極坐標(biāo)for

i

in

range(1,

4):

#逐條繪制各曲線(xiàn)

scoreB

=

np.array(scoreA[i][1:]).astype(int)

#第i個(gè)專(zhuān)業(yè)成績(jī)

data

=

np.append(scoreB,

[scoreB[0]])

#使曲線(xiàn)閉合

ax.plot(angles,

data,

color=cl[i-1],

linewidth=2)

#畫(huà)線(xiàn)

ax.set_thetagrids(angles[:-1]

*

180

/

np.pi,

labels,

fontproperties="SimHei")

ax.set_title("成績(jī)雷達(dá)圖",

va='bottom',

fontproperties="SimHei")ax.set_rlim(0,

100)

#徑向刻度標(biāo)簽ax.grid(True)

#顯示網(wǎng)格線(xiàn)plt.show()實(shí)例8.7繪制成績(jī)雷達(dá)圖實(shí)例8.2餅圖8.2餅圖餅圖(PieChart)餅圖是一種部分與整體關(guān)系的可視化工具。餅圖將數(shù)據(jù)按比例劃分為不同扇形區(qū)域,整個(gè)圓表示數(shù)據(jù)的總量,每個(gè)扇形的面積表示某個(gè)類(lèi)別占整體的比例。適合于展示離散數(shù)據(jù)的組成結(jié)構(gòu),直觀(guān)易懂,適合展示少量類(lèi)別的對(duì)比,不適合展示過(guò)多的數(shù)據(jù)類(lèi)別,否則會(huì)導(dǎo)致圖表過(guò)于復(fù)雜,不易分辨。應(yīng)用范圍主要集中在市場(chǎng)分析、財(cái)務(wù)分析、人口統(tǒng)計(jì)、網(wǎng)站流量分析等領(lǐng)域,特別適合用于展示各類(lèi)別在整體中所占的比例。8.2餅圖繪制餅圖的數(shù)據(jù)要符合以下特征僅有一個(gè)要繪制的數(shù)據(jù)系列要繪制的數(shù)字沒(méi)有負(fù)值、幾乎沒(méi)有零值類(lèi)別數(shù)目無(wú)限制,各類(lèi)別分別代表整個(gè)餅圖的一部分各個(gè)部分需要標(biāo)注百分比繪制餅圖利用pie()函數(shù)實(shí)現(xiàn),該函數(shù)的主要參數(shù)與含義如下:matplotlib.pyplot.pie(x,explode=None,labels=None,autopct=None,pctdistance=0.6,shadow=False,labeldistance=1.1,startangle=None)8.2餅圖matplotlib.pyplot.pie(x,explode=None,labels=None,autopct=None,pctdistance=0.6,shadow=False,labeldistance=1.1,startangle=None)x:一維類(lèi)數(shù)組數(shù)據(jù)explode:需要突出展示的數(shù)據(jù)位置及突出量,不突出的數(shù)據(jù)取值為0,突出的數(shù)據(jù)一般用一個(gè)小數(shù)表示。labels:各部分?jǐn)?shù)據(jù)的標(biāo)簽,用列表給出。labeldistance:文本的位置離原點(diǎn)與半徑的比值,1.1指1.1倍半徑的位置。autopct:圓里面的文本格式,%2.1f%%表示整數(shù)有2位,小數(shù)有1位的浮點(diǎn)數(shù)。8.2餅圖matplotlib.pyplot.pie(x,explode=None,labels=None,autopct=None,pctdistance=0.6,shadow=False,labeldistance=1.1,startangle=None)shadow:是否有陰影,True為有陰影,F(xiàn)alse無(wú)陰影。startangle:起始角度,0表示從0開(kāi)始逆時(shí)針旋轉(zhuǎn),一般選擇從90度開(kāi)始比較好看。pctdistance:文本離圓心的距離相對(duì)半徑的百分比。legend()函數(shù)可用于給出圖例,主要參數(shù)有兩個(gè):loc,表示圖例位置,包括"upperright""upperleft""lowerright""lowerleft"等;bbox_to_anchor,表示圖例與圖形之間的距離,當(dāng)出現(xiàn)圖形與圖例重疊時(shí),可使用該參數(shù)調(diào)整圖例的位置,這個(gè)位置由兩個(gè)參數(shù)決定,第一個(gè)參數(shù)為圖例與左邊的距離,第二個(gè)參數(shù)為與下面的距離。8.8編程語(yǔ)言熱度餅圖實(shí)例說(shuō)明:Python是人工智能與大數(shù)據(jù)領(lǐng)域應(yīng)用最廣泛的程序設(shè)計(jì)語(yǔ)言,近年應(yīng)用熱度逐年提升?,F(xiàn)有2025年3月Tiobe程序設(shè)計(jì)語(yǔ)言排行榜中熱度數(shù)據(jù),請(qǐng)用餅圖對(duì)表中數(shù)據(jù)進(jìn)行可視化展示。實(shí)例年份PythonC++JavaCC#JavascriptGoSQLOther202523.8511.0810.369.534.873.462.782.5731.558.8編程語(yǔ)言熱度餅圖import

matplotlib.pyplot

as

plt

labels

=

[

'Python','C++','Java',

'C',

'C#',

'Javascript',

'Go',

'SQL',

'Other']sizes

=

[23.85,

11.08,10.36,9.53,4.87,3.46,2.78,2.57,31.55]explode

=

(0.1,

0,

0,

0,

0,

0,

0,

0,

0)

#第1個(gè)數(shù)據(jù)突出顯示plt.axes(aspect=1)

#設(shè)置參數(shù)為1使餅圖是圓的plt.pie(sizes,

explode=explode,

labels=labels,

labeldistance=1.1,

autopct='%2.1f%%',

shadow=True,

startangle=90,

pctdistance=0.8)plt.legend(loc='lowerright',

bbox_to_anchor=(1.3,

0))

#右下角圖例plt.show()實(shí)例8.3

柱狀圖8.3柱狀圖柱狀圖(BarChart)柱狀圖是一種用于表示類(lèi)別數(shù)據(jù)的可視化圖表。它通過(guò)矩形柱(條形)展示每個(gè)類(lèi)別的數(shù)據(jù)值,柱的高度(或長(zhǎng)度)表示該類(lèi)別的數(shù)值大小。通常,柱狀圖的類(lèi)別數(shù)據(jù)沿著水平軸排列,數(shù)值沿著垂直軸排列。柱狀圖的常見(jiàn)類(lèi)型包括單柱狀圖、堆疊柱狀圖、分組柱狀圖、垂直柱狀圖和水平柱狀圖等。

溫馨提示

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

評(píng)論

0/150

提交評(píng)論