版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年有限空間作業(yè)安全生產(chǎn)管理制度考核辦法含答案
- 2026年人工智能體育分析認(rèn)證考試題含答案
- 機(jī)械前沿技術(shù)
- 2026年劇本殺運(yùn)營(yíng)公司劇本道具采購(gòu)管理制度
- 河南省南陽(yáng)市2025-2026學(xué)年高三上學(xué)期1月期末考試政治試題(含答案)
- 中醫(yī)養(yǎng)生與保健方法
- 2025年教育培訓(xùn)行業(yè)個(gè)性化學(xué)習(xí)方案創(chuàng)新報(bào)告
- 柏鄉(xiāng)輔警面試題目及答案
- 2025-2026學(xué)年廣東深圳實(shí)驗(yàn)學(xué)校七年級(jí)(上)期中考英語(yǔ)試題含答案
- 傳染病病例登記制度
- 屈光不正診療規(guī)范
- 中藥學(xué)電子版教材
- 建設(shè)部環(huán)衛(wèi)勞動(dòng)定額
- 金蝶云星空 V7.2-產(chǎn)品培訓(xùn)-PLM領(lǐng)域-文檔管理
- GB/T 25852-20108級(jí)鏈條用鍛造起重部件
- 講奉獻(xiàn)、有作為課件
- DB32/T+4396-2022《勘察設(shè)計(jì)企業(yè)質(zhì)量管理標(biāo)準(zhǔn)》-(高清正版)
- 老年照護(hù)初級(jí)理論知識(shí)測(cè)試題庫(kù)與答案
- 二級(jí)建造師繼續(xù)教育題庫(kù)帶答案(完整版)
- 地下儲(chǔ)氣庫(kù)建設(shè)的發(fā)展趨勢(shì)
- 壓力排水管道安裝技術(shù)交底
評(píng)論
0/150
提交評(píng)論