python數(shù)據(jù)分析中的多種圖形繪制示例(折線圖、柱狀圖、餅狀圖、散點(diǎn)圖、熱力圖)
前言
數(shù)據(jù)可視化是指利用圖形、表格、圖表等方式將數(shù)據(jù)展示出來,使得數(shù)據(jù)更加清晰、易于理解和分析。圖形繪制是數(shù)據(jù)可視化的基礎(chǔ),通過繪制各種圖形呈現(xiàn)數(shù)據(jù),可以更加直觀地了解數(shù)據(jù)之間的關(guān)系和趨勢(shì)。
如果畫圖過程中出現(xiàn)
FutureWaring問題
import warning
warnings.filterwarnings('ignore')
針對(duì)中文不顯示
plt.rcParams['font.family'] = ['sans-serif'] plt.rcParams['font.sans-serif'] = ['SimHei']
在當(dāng)今數(shù)字化時(shí)代,數(shù)據(jù)分析已成為各行各業(yè)中不可或缺的一環(huán)。Python,作為數(shù)據(jù)分析領(lǐng)域的明星語言,憑借其強(qiáng)大的數(shù)據(jù)處理能力和豐富的庫資源,正逐漸受到越來越多數(shù)據(jù)分析師的青睞。而在數(shù)據(jù)分析的過程中,數(shù)據(jù)可視化作為直觀展示數(shù)據(jù)特征和規(guī)律的重要手段,更是不可或缺。
Python中,有許多專門用于數(shù)據(jù)可視化的庫,其中最為著名的莫過于Matplotlib和Seaborn。Matplotlib作為Python中最早的數(shù)據(jù)可視化庫,提供了豐富的繪圖函數(shù)和靈活的配置選項(xiàng),可以滿足大部分基本的繪圖需求。而Seaborn則是在Matplotlib的基礎(chǔ)上,進(jìn)一步封裝和優(yōu)化,提供了更加美觀和高級(jí)的繪圖接口。
在圖形繪制基礎(chǔ)方面,我們需要掌握幾個(gè)核心概念,包括坐標(biāo)軸、圖例、標(biāo)題、標(biāo)簽等。坐標(biāo)軸是圖表的基礎(chǔ),用于展示數(shù)據(jù)的分布情況;圖例用于區(qū)分不同系列的數(shù)據(jù);標(biāo)題和標(biāo)簽則用于說明圖表的主題和內(nèi)容。
接下來,我們通過幾個(gè)簡(jiǎn)單的例子來演示如何使用Matplotlib進(jìn)行基本的圖形繪制。
我們使用Matplotlib來繪制一個(gè)簡(jiǎn)單的折線圖。假設(shè)我們有一組關(guān)于某公司股票價(jià)格的數(shù)據(jù),我們可以通過折線圖來展示股票價(jià)格的走勢(shì)。在Matplotlib中,我們可以使用plot()函數(shù)來繪制折線圖,通過設(shè)置x軸和y軸的數(shù)據(jù),以及圖表的標(biāo)題、坐標(biāo)軸標(biāo)簽等參數(shù),就可以生成一個(gè)基本的折線圖。
當(dāng)然,除了折線圖和箱線圖之外,還有許多其他類型的圖形可以用于數(shù)據(jù)可視化,如柱狀圖、散點(diǎn)圖、餅圖等。每種圖形都有其適用的場(chǎng)景和優(yōu)缺點(diǎn),需要根據(jù)具體的數(shù)據(jù)特征和需求來選擇合適的圖形類型。
一、圖形繪制基礎(chǔ)
Matplotlib簡(jiǎn)介
Matplotlib是目前應(yīng)用最為廣泛的python擴(kuò)展繪圖模塊庫,是Python中最受歡迎的數(shù)據(jù)可視化軟件包之一。Matplotlib支持跨平臺(tái)運(yùn)行,能讓使用者很輕松地將數(shù)據(jù)轉(zhuǎn)化為高質(zhì)量圖形,并且提供了多樣化的輸出格式,常用于繪制2D圖形,同時(shí)也提供了一部分3D繪圖接口。
Matplotlib提供了類似于MATLAB的繪圖函數(shù),對(duì)于熟悉MATLAB的使用者來說,可以很容易的使用它。Matplotlib通常與NumPy和pandas擴(kuò)展包一起使用,最常見的使用方式是根據(jù)NumPy庫的N維數(shù)組類型ndarray來繪制2D圖像,使用簡(jiǎn)單、代碼清晰易懂,深受廣大技術(shù)愛好者的喜愛,是數(shù)據(jù)分析中不可或缺的重要工具之一。
使用過程
使用pylab或pyplot繪圖時(shí)一般過程為:首先讀入數(shù)據(jù),然后根據(jù)實(shí)際需要繪制折線圖、散點(diǎn)圖、柱狀圖、餅狀圖、雷達(dá)圖或三維曲線和曲面,接下來設(shè)置軸和圖形屬性,最后顯示或保存繪圖結(jié)果。
sin函數(shù)示例
【例7.1】請(qǐng)利用python繪制正弦函數(shù)曲線。
關(guān)鍵技術(shù):采用Matplotlib包Pyplot模塊的plot函數(shù)繪制曲線圖。
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
import math
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
x = np.arange(0,math.pi*2,0.05)
y = np.sin(x)
plt.plot(x,y)
plt.xlabel("angle")
plt.ylabel("sine")
plt.title("sine curve")
plt.show()


二、常用圖形繪制
折線圖的繪制
折線圖是最基本的圖表類型,是用點(diǎn)和點(diǎn)之間連線的上升或下降表示指標(biāo)的連續(xù)變化趨勢(shì)。折線圖反映了一段時(shí)間內(nèi)事物連續(xù)的動(dòng)態(tài)變化規(guī)律,適用于描述一個(gè)變量隨另一個(gè)變量變化的趨勢(shì),通常用于繪制連續(xù)數(shù)據(jù),適合數(shù)據(jù)點(diǎn)較多的情況。
plot
matplotlib是一個(gè)用于繪制圖形的Python庫,其中的plot函數(shù)用于繪制線條圖。下面是matplotlib中plot函數(shù)的詳細(xì)解釋:
plot(x, y, label, linestyle, color, linewidth, marker)
參數(shù)說明:
x:表示x軸上的數(shù)據(jù)序列,可以是一個(gè)列表、數(shù)組或Series類型的數(shù)據(jù),也可以是一個(gè)數(shù)字,此時(shí)表示生成從0到該數(shù)字的等間隔的數(shù)據(jù)序列。y:表示y軸上的數(shù)據(jù)序列,要求與x軸上的數(shù)據(jù)序列長(zhǎng)度相同。label:給繪制的線條指定一個(gè)標(biāo)簽,可以在繪制圖例時(shí)使用。linestyle:線條的樣式,可以是實(shí)線(‘solid’)、虛線(‘dashed’)、點(diǎn)線(‘dotted’)等,默認(rèn)為實(shí)線。color:線條的顏色,可以是一個(gè)關(guān)鍵字字符串(如’red’、'blue’等),也可以是一個(gè)RGB元組表示的顏色(如(0.1, 0.2, 0.3)),默認(rèn)為藍(lán)色。linewidth:線條的寬度,可以是一個(gè)數(shù)字,默認(rèn)為1。marker:線條上的標(biāo)記點(diǎn)的樣式,可以是一個(gè)關(guān)鍵字字符串(如’+'、‘o’等),也可以是一個(gè)標(biāo)記字符(如’x’、's’等),默認(rèn)為沒有標(biāo)記點(diǎn)。
使用plot函數(shù)可以繪制不同樣式的線條圖,可以通過設(shè)置不同的參數(shù)來定制線條的樣式、顏色、寬度、標(biāo)記點(diǎn)等。在繪制完所有的線條后,可以使用plt.legend()函數(shù)來添加圖例,使得不同線條對(duì)應(yīng)的標(biāo)簽在圖中顯示出來。
示例
【例7.4】請(qǐng)根據(jù)給定的兩組數(shù)據(jù)x和y,分別代表某城鎮(zhèn)居民消費(fèi)水平增長(zhǎng)率和對(duì)應(yīng)的年份,利用Python繪制城鎮(zhèn)居民消費(fèi)水平增長(zhǎng)率折線圖。
關(guān)鍵技術(shù):利用matplotlib包的plot方法進(jìn)行折線圖的繪制。
y = [8.07,6.42,9.79,8.20,7.69,6.02,7.86,6.93,6.84,9.04,10.06]
x= [2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020]
plt.plot(x,y,'g',lw = 4,label = '城鎮(zhèn)居民消費(fèi)水平增長(zhǎng)率')
plt.legend(loc = 5)
plt.grid(True)
plt.xlabel("年")
plt.ylabel('增長(zhǎng)率')
plt.title("我國歷年城鎮(zhèn)消費(fèi)水平增長(zhǎng)率")


散點(diǎn)圖的繪制
散點(diǎn)圖是以直角坐標(biāo)系中各點(diǎn)的密集程度和變化趨勢(shì)來表示兩種現(xiàn)象間的相關(guān)關(guān)系,常用于顯示和比較數(shù)值。當(dāng)要在不考慮時(shí)間的情況下比較大量數(shù)據(jù)點(diǎn)時(shí),使用散點(diǎn)圖比較數(shù)據(jù)方便直觀。散點(diǎn)圖將序列顯示為一組點(diǎn),其中每個(gè)散點(diǎn)值都由該點(diǎn)在圖表中的坐標(biāo)位置表示。對(duì)于不同類別的點(diǎn),則由圖表中不同形狀或顏色的標(biāo)記符表示。同時(shí),也可以設(shè)置標(biāo)記符的顏色或大小。
scatter()
scatter是matplotlib庫中用于繪制散點(diǎn)圖的函數(shù)。散點(diǎn)圖是一種用于展示兩個(gè)變量之間關(guān)系的圖形,其中每個(gè)點(diǎn)代表一個(gè)數(shù)據(jù)樣本。
scatter函數(shù)可以接受一系列的x和y坐標(biāo)作為輸入,然后將這些坐標(biāo)在圖中繪制成散點(diǎn)。
下面是scatter函數(shù)的基本用法:
import matplotlib.pyplot as plt # 準(zhǔn)備散點(diǎn)的x和y坐標(biāo) x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] # 繪制散點(diǎn)圖 plt.scatter(x, y) # 顯示圖形 plt.show()
這段代碼會(huì)生成一個(gè)簡(jiǎn)單的散點(diǎn)圖,其中x坐標(biāo)為1, 2, 3, 4, 5,y坐標(biāo)為2, 4, 6, 8, 10。
scatter函數(shù)還可以接受一些常用的參數(shù),用于調(diào)整散點(diǎn)圖的樣式和外觀,例如:
s:設(shè)置散點(diǎn)的大小。可以傳入一個(gè)常數(shù),表示所有散點(diǎn)的大小;也可以傳入一個(gè)數(shù)組,表示每個(gè)散點(diǎn)的大小。c:設(shè)置散點(diǎn)的顏色。可以傳入一個(gè)常數(shù),表示所有散點(diǎn)的顏色;也可以傳入一個(gè)數(shù)組,表示每個(gè)散點(diǎn)的顏色。marker:設(shè)置散點(diǎn)的形狀??梢詡魅胍粋€(gè)字符,表示所有散點(diǎn)的形狀;也可以傳入一個(gè)數(shù)組,表示每個(gè)散點(diǎn)的形狀。alpha:設(shè)置散點(diǎn)的透明度。
下面是一個(gè)示例代碼,展示了如何使用這些參數(shù)調(diào)整散點(diǎn)圖的樣式:
import matplotlib.pyplot as plt import numpy as np # 生成隨機(jī)數(shù)據(jù) np.random.seed(0) x = np.random.randn(100) y = np.random.randn(100) # 繪制散點(diǎn)圖,設(shè)置散點(diǎn)的大小、顏色和形狀 plt.scatter(x, y, s=50, c='r', marker='o', alpha=0.5) # 顯示圖形 plt.show()
這段代碼會(huì)生成一個(gè)具有隨機(jī)數(shù)據(jù)的散點(diǎn)圖,散點(diǎn)的大小為50,顏色為紅色,形狀為圓形,透明度為0.5。
除了基本的用法和常用參數(shù),scatter函數(shù)還有其他一些參數(shù),用于進(jìn)一步控制散點(diǎn)圖的樣式和外觀,例如:
edgecolors:設(shè)置散點(diǎn)邊緣的顏色。linewidths:設(shè)置散點(diǎn)邊緣的寬度。cmap:設(shè)置顏色映射,用于根據(jù)數(shù)值變化為散點(diǎn)著色。norm:設(shè)置歸一化器,用于歸一化數(shù)值。label:設(shè)置散點(diǎn)圖的標(biāo)簽,用于圖例顯示。
可以參考Matplotlib官方文檔獲取更多關(guān)于scatter函數(shù)的詳細(xì)說明和示例代碼。
示例
【例7.5】對(duì)于給定的兩個(gè)市場(chǎng)收益率的波動(dòng)情況數(shù)據(jù)x和y,請(qǐng)利用Python繪制散點(diǎn)圖來反映兩個(gè)市場(chǎng)的波動(dòng)率情況。
關(guān)鍵技術(shù):利用matplotlib包的plot函數(shù)進(jìn)行散點(diǎn)圖的繪制,與繪制折線圖相比,繪制散點(diǎn)圖只用到一組數(shù)據(jù),而繪制折線圖需要用到兩組對(duì)應(yīng)的數(shù)據(jù)。
x = np.random.randint(0,5,10)
y = np.random.randint(0,5,10)
plt.figure(figsize = (10,10))
plt.subplot(121)
plt.ylim((-5,5))
plt.plot(x,'ro',label = '第一組')
plt.grid(True)
plt.title('第一組市場(chǎng)波動(dòng)情況')
plt.subplot(122)
plt.ylim((-5,5))
plt.plot(y,'b*',label = '第二組')
plt.grid(True)
plt.title('第二組市場(chǎng)波動(dòng)情況')
plt.savefig('test',dpi = 600)
plt.show()



柱狀圖的繪制
bar
matplotlib的bar函數(shù)用于繪制柱狀圖,它是一個(gè)非常常用的數(shù)據(jù)可視化工具。
下面是bar函數(shù)的詳細(xì)介紹:
語法:
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, align='center', data=None, **kwargs)
參數(shù):
x:柱狀圖的x軸位置,可以是一個(gè)數(shù)值或者一個(gè)數(shù)組,表示每個(gè)柱狀圖的位置。height:柱狀圖的高度,可以是一個(gè)數(shù)值或者一個(gè)數(shù)組,表示每個(gè)柱狀圖的高度。width:柱狀圖的寬度,默認(rèn)值為0.8。bottom:柱狀圖的底部位置,默認(rèn)為None,表示從0開始繪制柱狀圖。align:柱狀圖的對(duì)齊方式,默認(rèn)為’center’,表示柱狀圖的中心與給定位置對(duì)齊。data:傳入一個(gè)DataFrame或者一個(gè)類似結(jié)構(gòu)的數(shù)據(jù)集,x和height參數(shù)可以直接從data中獲取。
其他常用參數(shù):
color:柱狀圖的顏色,可以是一個(gè)字符串,表示柱狀圖顏色的名稱,也可以是一個(gè)列表,表示每個(gè)柱狀圖的顏色。edgecolor:柱狀圖的邊框顏色,默認(rèn)為None,表示不顯示邊框。label:柱狀圖的標(biāo)簽,可以在圖例中顯示。tick_label:柱狀圖的刻度標(biāo)簽,可以在x軸上顯示。alpha:柱狀圖的透明度,取值范圍為0到1。
用例:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(5)
y = [1, 4, 3, 2, 5]
plt.bar(x, y, color='blue', align='center')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Bar Chart')
plt.show()
此代碼將繪制一個(gè)簡(jiǎn)單的柱狀圖,x軸是0到4,y軸是給定的數(shù)組y的值。柱狀圖的顏色為藍(lán)色,對(duì)齊方式為居中。在圖像的x軸標(biāo)簽、y軸標(biāo)簽和標(biāo)題上顯示對(duì)應(yīng)的文字。最后調(diào)用plt.show()來顯示圖像。
以上提供了matplotlib的bar函數(shù)的詳細(xì)介紹和一個(gè)簡(jiǎn)單的用例。通過使用不同的參數(shù)和組合,您可以根據(jù)自己的需求繪制出各種類型的柱狀圖。
示例
【例7.7】對(duì)于給定的2020年9月至2021年3月期間某基金產(chǎn)品發(fā)行數(shù)量的數(shù)據(jù),該數(shù)據(jù)以字典形式存儲(chǔ),形式如下所示。請(qǐng)利用Python將其以柱狀圖的形式繪制出來。
{'202009': 2324,'202010': 2814,'202011': 2525,'202012':2946,'202101': 3019,'202102': 2087,'202103': 3398}
關(guān)鍵技術(shù):可以利用Python的matplotlib包的bar方法進(jìn)行柱狀圖繪制。
dict = {'202009': 2324,'202010': 2814,'202011': 2525,'202012': 2946,'202101': 3019,'202102': 2087,'202103': 3398}
plt.figure (figsize= (9,5) )
plt.bar (dict.keys (),dict.values (),width=0.3, align='center' , label=' funds')
plt.grid (True)
plt.legend (loc=1)
plt.xlabel ('月')
plt.ylabel('發(fā)行數(shù)量')
plt.title('基金產(chǎn)品發(fā)行數(shù)量')
plt.savefig ( 'test', dpi=600)


箱型圖繪制
plot.box
plot.box是matplotlib庫中的一個(gè)函數(shù),用于繪制箱線圖。箱線圖是一種統(tǒng)計(jì)圖表,用于展示一組數(shù)據(jù)的分布情況。它顯示了數(shù)據(jù)的中位數(shù)、上下四分位數(shù)、最小值和最大值,以及異常值。
箱線圖可以幫助我們了解數(shù)據(jù)的偏態(tài)、離散度和異常值情況。
plot.box的基本語法為:
matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=False, showmeans=False, showcaps=True, showbox=True, showfliers=True, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_xticks=True, autorange=False, zorder=None)
參數(shù)說明:
x:要繪制箱線圖的數(shù)據(jù),可以是一個(gè)一維數(shù)組或一個(gè)二維數(shù)組。notch:箱線圖的缺口,默認(rèn)為None。sym:異常值的標(biāo)記,默認(rèn)為None。vert:箱線圖的方向,默認(rèn)為True(垂直方向),設(shè)置為False可以繪制水平方向的箱線圖。whis:決定繪制箱線圖上下邊界的位置,默認(rèn)為1.5。boxprops:箱線圖的屬性設(shè)置,包括顏色、線寬等,默認(rèn)為None。flierprops:異常值的屬性設(shè)置,默認(rèn)為None。medianprops:中位數(shù)的屬性設(shè)置,默認(rèn)為None。meanprops:均值的屬性設(shè)置,默認(rèn)為None。capprops:邊界線的屬性設(shè)置,默認(rèn)為None。whiskerprops:whisker的屬性設(shè)置,默認(rèn)為None。manage_xticks:是否自動(dòng)管理x軸的刻度,默認(rèn)為True。autorange:是否自動(dòng)確定y軸的范圍,默認(rèn)為False。zorder:圖層順序,默認(rèn)為None。
除了以上參數(shù),plot.box還可以接受一些其他參數(shù),用于設(shè)置標(biāo)題、坐標(biāo)軸標(biāo)簽、圖例等。詳細(xì)的參數(shù)說明可以參考matplotlib官方文檔。
下面是一個(gè)簡(jiǎn)單的示例代碼,演示如何使用plot.box繪制箱線圖:
import matplotlib.pyplot as plt
import numpy as np
# 生成一組隨機(jī)數(shù)據(jù)
np.random.seed(123)
data = np.random.normal(0, 1, 100)
# 繪制箱線圖
plt.boxplot(data)
# 添加標(biāo)題和坐標(biāo)軸標(biāo)簽
plt.title('Box Plot')
plt.xlabel('Data')
# 顯示圖形
plt.show()
運(yùn)行以上代碼,會(huì)生成一個(gè)簡(jiǎn)單的箱線圖,顯示了隨機(jī)數(shù)據(jù)的中位數(shù)、上下四分位數(shù)、最小值和最大值,以及異常值(如果有)。
除了上述的示例代碼,plot.box還可以接受一維或二維的數(shù)據(jù)作為參數(shù),用于繪制多組數(shù)據(jù)的箱線圖。可以通過設(shè)置參數(shù)來修改箱線圖的樣式,如顏色、線寬等。此外,還可以使用matplotlib的其他函數(shù)和方法來進(jìn)一步自定義繪圖。
示例
【例7.8】下面給定的數(shù)據(jù)是某公司產(chǎn)品在各個(gè)國家用戶的消費(fèi)分布圖,請(qǐng)根據(jù)以下數(shù)據(jù)利用Python繪制箱型圖。
'Japan': [1200, 1300, 1500, 1400, 1600, 1600, 1800, 1800, 1900, 2400], 'USA': [1200, 1350, 1400, 1500, 1660, 1800, 1700, 1900, 2100, 2000], 'Russia': [1100, 1200, 1200, 1400, 1300, 1600, 1700, 1900, 1900, 1800], "Korean": [1200, 1100, 1000, 1300, 1200, 1500, 1600, 1700, 1800, 1800]
關(guān)鍵技術(shù):可以利用Python的plot.box繪制箱型圖。
data = {'Japan': [1200,1300,1500,1400,1600,1600,1800,1800,1900,2400],
'USA': [1200, 1350, 1400, 1500, 1660, 1800, 1700, 1900, 2100, 2000],
'Russia': [1100, 1200, 1200, 1400, 1300, 1600, 1700, 1900, 1900, 1800],
"Korean": [1200, 1100, 1000, 1300, 1200, 1500, 1600, 1700, 1800, 1800]}
df = pd.DataFrame(data)
df.plot.box(title = "某公司產(chǎn)品各個(gè)國家用戶消費(fèi)分布圖")
plt.grid(linestyle = '--',alpha = 0.3)
plt.savefig('test',dpi = 600)
plt.show()


餅狀圖的繪制
pie
在matplotlib中,可以使用pie函數(shù)繪制餅圖。餅圖用于展示各類別的占比關(guān)系,適用于數(shù)據(jù)的相對(duì)比較。下面是使用pie函數(shù)繪制餅圖的詳細(xì)步驟和參數(shù)說明。
導(dǎo)入庫:
import matplotlib.pyplot as plt
準(zhǔn)備數(shù)據(jù):
labels = ['A', 'B', 'C', 'D'] sizes = [15, 30, 45, 10]
繪制餅圖:
plt.pie(sizes, labels=labels) plt.show()
繪制餅圖時(shí),主要使用了兩個(gè)參數(shù):
sizes:代表各類別的占比值,要求是一個(gè)一維數(shù)組或列表。labels:代表各類別的標(biāo)簽,要求是一個(gè)與sizes長(zhǎng)度相同的一維數(shù)組或列表??蛇x參數(shù),默認(rèn)值為None。
除此之外,還可以使用其他一些參數(shù)進(jìn)行餅圖的個(gè)性化設(shè)置,比如:
autopct:控制餅圖中百分比的顯示方式。可選參數(shù),默認(rèn)值為None??梢允褂米址袷娇刂骑@示,例如'%.1f%%'表示保留一位小數(shù)的百分比。explode:控制各類別之間的間隔??蛇x參數(shù),默認(rèn)值為None??梢允褂靡痪S數(shù)組或列表來指定各類別的偏移量,例如[0, 0.1, 0, 0]表示第二個(gè)類別偏移0.1。colors:控制各類別的顏色??蛇x參數(shù),默認(rèn)值為None??梢允褂靡痪S數(shù)組或列表來指定顏色,例如['red', 'blue', 'green', 'yellow']。startangle:控制餅圖的起始角度,逆時(shí)針方向??蛇x參數(shù),默認(rèn)值為0。shadow:控制是否顯示陰影。可選參數(shù),默認(rèn)值為False。
下面是一個(gè)綜合使用了上述參數(shù)的例子:
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
explode = [0, 0.1, 0, 0]
colors = ['red', 'blue', 'green', 'yellow']
plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%.1f%%', startangle=90, shadow=True)
plt.axis('equal')
plt.show()
通過調(diào)整上述參數(shù),可以根據(jù)具體需求繪制出個(gè)性化的餅圖。
示例
【例7.9】某公司有A、B、C、D、E五種商品,每種商品占有的市場(chǎng)份額分別為15%、30%、30%、10%和15%,請(qǐng)利用Python的餅狀圖繪制上述數(shù)據(jù)的分布圖。
關(guān)鍵技術(shù):可以利用Python的matplotlib包中的pie函數(shù)繪制餅狀圖。
import pandas as pd
import matplotlib.pyplot as plt
labels = ['A', 'B', 'C', 'D', 'E']
x = [15,30,30,10,15]
plt.pie(x, labels=labels)
plt.savefig('test',dpi=600)
plt.show ()


三、圖形繪制的組合情況
多個(gè)折線圖的組合繪制
示例
【例7.10】給定時(shí)間范圍在2009年至2017年間兩種商品的市場(chǎng)銷售價(jià)格增長(zhǎng)率數(shù)據(jù)集data1, data2。請(qǐng)利用Python的折線圖將兩種商品價(jià)格的增長(zhǎng)率信息進(jìn)行繪制,反映到圖上。
關(guān)鍵技術(shù):可以利用matplotlib包的plot函數(shù)進(jìn)行多折線圖的繪制。
data1 = np.random.randint(0,20,9)
data2 = np.random.randint(0,20,9)
year=[2009,2010,2011,2012,2013,2014,2015,2016,2017]
plt.plot(year,data1,lw=3,label='sales price increase rate')
plt.plot(year,data2,'r--',lw=3,label='construction costs increase rate')
plt.legend(loc=0)
plt.grid(True)
plt.xlabel('Year')
plt.ylabel('Percentage')
plt.title('sales price/construction costs increase rates')


折線圖和散點(diǎn)圖的組合繪制
示例
【例7.11】給定某只股票從2021年12月31日到2022年1月11日的收盤價(jià)格,請(qǐng)利用Python的折線圖和散點(diǎn)圖組合圖形式進(jìn)行數(shù)據(jù)的繪制。
關(guān)鍵技術(shù):可以利用Python的plot函數(shù)進(jìn)行繪制。
data = np.random.randint(10,20,7)
date = ['12/31/2021','04/01/2022','05/01/2022','06/01/2022','07/01/2022','10/01/2022','11/01/2022']
plt.figure(figsize=(7,4))
plt.plot(date,data,'b',label='stock xxxxxx')
plt.plot(date,data,'ro')
plt.grid(True)
plt.legend(loc=0)
plt.xlabel('日期')
plt.ylabel('收盤價(jià)')
plt.title('close price of stock xxxxx')


柱狀圖與折線圖的組合繪制
示例
【例7.11】 【例7.12】已知給定的某股票在2021年12月14日至2021年12月28日的收盤價(jià)格和交易量,請(qǐng)利用Python繪制雙坐標(biāo)軸圖,其中左坐標(biāo)軸反映交易量,以柱狀圖表示;右坐標(biāo)軸反映成交價(jià)格,以折線圖表示。
close=[22.23,22.59,22.36,22.47,22.85,22.79,22.76,23.82,23.97,
5.38,25.5]
date=['12/14/2021','12/15/2021','12/16/2021','12/17/2021','12/21/2021',
'12/22/2021','12/23/2021','12/24/2021','12/25/2021','12/26/2021','12/21/2021']
vol=[34711261,35634241,40123423,39043212,45983023,429012,37584231,30029832,4039221,5023281,5598231]
fig,ax1=plt.subplots()
plt.bar(date,vol,width=0.3,label='交易量')
plt.legend(loc=1)
plt.xlabel('日 期')
plt.ylabel('交易量')
plt.title('stock xxxxxx')
plt.xticks(rotation = 60)
ax2=ax1.twinx()
plt.plot(close,'r',lw=2,label='收盤價(jià)')
plt.grid(True)
plt.legend(loc=8)
plt.ylabel('收盤價(jià)')
plt.savefig('test', dpi=600 , pad_inches='tight')


四、拓展
熱力圖
熱力圖是一種可視化數(shù)據(jù)的圖表方式,通過不同顏色的區(qū)塊來表示數(shù)據(jù)的密度或強(qiáng)度。熱力圖通常用于顯示熱點(diǎn)、密度分布或者數(shù)據(jù)趨勢(shì)。
在熱力圖中,顏色的深淺表示數(shù)據(jù)的強(qiáng)度或頻率,通常深色表示高強(qiáng)度或高頻率,淺色表示低強(qiáng)度或低頻率。通過觀察熱力圖的顏色變化,可以直觀地發(fā)現(xiàn)數(shù)據(jù)的分布情況或趨勢(shì)。
熱力圖可以用于各種領(lǐng)域,例如地理信息系統(tǒng)(GIS)、流量分析、市場(chǎng)研究等。在地理信息系統(tǒng)中,熱力圖可以用來顯示人口密度、空氣質(zhì)量、交通流量等信息。在流量分析中,熱力圖可以用來顯示用戶活躍度、點(diǎn)擊量等數(shù)據(jù)。在市場(chǎng)研究中,熱力圖可以用來顯示產(chǎn)品銷售熱點(diǎn)、用戶偏好等信息。
繪制熱力圖可以使用各種工具和編程語言,例如Python的matplotlib庫、R語言的ggplot2包等。這些工具提供了豐富的功能和選項(xiàng),可以根據(jù)具體需求進(jìn)行定制。
heatmap
seaborn是一個(gè)基于matplotlib的數(shù)據(jù)可視化庫,它提供了許多簡(jiǎn)潔而美觀的繪圖函數(shù)。seaborn中的heatmap()函數(shù)用于繪制熱力圖,熱力圖可以用來可視化矩陣或數(shù)據(jù)表中數(shù)值的大小和分布。
下面是一個(gè)使用heatmap()函數(shù)繪制熱力圖的示例代碼:
import seaborn as sns
from matplotlib import pyplot as plt
# 創(chuàng)建矩陣或數(shù)據(jù)表
data = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
# 繪制熱力圖
sns.heatmap(data)
# 顯示圖表
plt.show()

運(yùn)行代碼后,將會(huì)彈出一個(gè)窗口顯示繪制的熱力圖。默認(rèn)情況下,heatmap()函數(shù)將根據(jù)數(shù)據(jù)的值自動(dòng)選擇顏色漸變,并在圖表中顯示顏色條以表示值的大小。你還可以通過設(shè)置參數(shù)來自定義熱力圖的樣式和屬性,例如調(diào)整顏色映射、添加標(biāo)簽、設(shè)置標(biāo)題等。具體的參數(shù)設(shè)置可以參考seaborn的官方文檔。
改變數(shù)據(jù)采樣頻率
resample
在matplotlib中,resample是一個(gè)用于改變數(shù)據(jù)采樣頻率的函數(shù)。它可以用于將數(shù)據(jù)從高頻率采樣轉(zhuǎn)換為低頻率采樣,或者從低頻率采樣轉(zhuǎn)換為高頻率采樣。這個(gè)函數(shù)可以用于處理時(shí)間序列數(shù)據(jù),通過平均、求和等方式來對(duì)數(shù)據(jù)進(jìn)行采樣。
resample函數(shù)的基本語法如下:
resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, limit=None, kind=None, convention=None)
其中,rule參數(shù)用于指定新的采樣頻率,可以是字符串形式的時(shí)間間隔,比如’1D’代表每天采樣一次,'1H’代表每小時(shí)采樣一次,也可以是整數(shù)形式的數(shù)字,代表每個(gè)指定數(shù)量的樣本進(jìn)行一次采樣。
how參數(shù)用于指定進(jìn)行采樣時(shí)使用的聚合函數(shù),比如’mean’代表計(jì)算均值,'sum’代表計(jì)算總和。axis參數(shù)用于指定進(jìn)行采樣的軸,默認(rèn)是0,表示對(duì)行進(jìn)行采樣。fill_method參數(shù)用于指定進(jìn)行采樣時(shí)缺失數(shù)據(jù)的填充方式。closed和label參數(shù)用于指定進(jìn)行采樣時(shí)邊界的處理方式。limit參數(shù)用于指定進(jìn)行采樣時(shí)最大允許的缺失樣本數(shù)量。kind參數(shù)用于指定進(jìn)行采樣時(shí)的插值方式。convention參數(shù)用于指定進(jìn)行采樣時(shí)的約定方式。
示例
下面是一個(gè)使用resample函數(shù)對(duì)時(shí)間序列數(shù)據(jù)進(jìn)行重新采樣的例子:
import matplotlib.pyplot as plt
import pandas as pd
# 創(chuàng)建一個(gè)DataFrame對(duì)象,包含時(shí)間序列數(shù)據(jù)
data = pd.DataFrame({'value': [1, 2, 3, 4, 5]}, index=pd.date_range(start='2022-01-01', periods=5, freq='D'))
# 將數(shù)據(jù)從每天采樣一次轉(zhuǎn)換為每?jī)商觳蓸右淮?
resampled_data = data.resample('2D').mean()
# 打印結(jié)果
print(resampled_data)
執(zhí)行上述代碼,將會(huì)得到如下輸出:
value 2022-01-01 1.5 2022-01-03 4.5
這里使用了resample函數(shù)將每天采樣一次的數(shù)據(jù)轉(zhuǎn)換為每?jī)商觳蓸右淮蔚臄?shù)據(jù),并使用均值方式進(jìn)行采樣。所以結(jié)果中的第一個(gè)值為前兩天的數(shù)據(jù)的均值((1+2)/2=1.5),第二個(gè)值為后兩天的數(shù)據(jù)的均值((4+5)/2=4.5)。
創(chuàng)建多個(gè)子圖
subplots()
matplotlib.pyplot.subplots函數(shù)是用于創(chuàng)建多個(gè)子圖的工具。它返回一個(gè)包含所有子圖的Figure對(duì)象和一個(gè)包含所有子圖軸對(duì)象的Axes對(duì)象數(shù)組。
subplots函數(shù)的一般語法如下:
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=None, ...)
參數(shù)說明:
nrows:子圖的行數(shù)。ncols:子圖的列數(shù)。figsize:一個(gè)元組,指定圖形的寬度和高度。
例如,如果我們要?jiǎng)?chuàng)建一個(gè)包含兩行兩列的子圖,可以這樣做:
import matplotlib.pyplot as plt fig, axes = plt.subplots(nrows=2, ncols=2)
然后,我們可以使用axes數(shù)組中的元素來操作每個(gè)子圖軸對(duì)象。例如,可以使用axes[0, 0]表示第一個(gè)子圖的軸對(duì)象。
以下是一個(gè)完整的示例:
import numpy as np import matplotlib.pyplot as plt # 創(chuàng)建一個(gè)包含兩行兩列的子圖 fig, axes = plt.subplots(nrows=2, ncols=2) # 生成一些隨機(jī)數(shù)據(jù) x = np.linspace(0, 2*np.pi, 100) y1 = np.sin(x) y2 = np.cos(x) y3 = np.tan(x) y4 = np.exp(x) # 在每個(gè)子圖中繪制不同的函數(shù) axes[0, 0].plot(x, y1) axes[0, 1].plot(x, y2) axes[1, 0].plot(x, y3) axes[1, 1].plot(x, y4) plt.show()
上述代碼將創(chuàng)建一個(gè)2x2的子圖網(wǎng)格,并在每個(gè)子圖中繪制不同的函數(shù)。
調(diào)整子圖之間的間距
subplots_adjust
subplots_adjust是matplotlib中的一個(gè)函數(shù),用于調(diào)整子圖之間的間距。它可以用于調(diào)整子圖布局,使得子圖之間的間距更合適。
函數(shù)的語法如下:
matplotlib.pyplot.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
參數(shù)說明如下:
left:左邊界的位置。默認(rèn)為0.125。bottom:底邊界的位置。默認(rèn)為0.1。right:右邊界的位置。默認(rèn)為0.9。top:頂邊界的位置。默認(rèn)為0.9。wspace:子圖之間的寬度間距。默認(rèn)為0.2。hspace:子圖之間的高度間距。默認(rèn)為0.2。
調(diào)用subplots_adjust函數(shù)后,可以通過調(diào)整上述參數(shù)的值來達(dá)到調(diào)整子圖布局的效果。
決策樹
plot_tree
plot_tree是scikit-learn庫中DecisionTreeClassifier和DecisionTreeRegressor類的一個(gè)方法,用于繪制決策樹模型的樹形圖。
使用plot_tree需要先對(duì)DecisionTreeClassifier或DecisionTreeRegressor類進(jìn)行訓(xùn)練,然后傳入已經(jīng)訓(xùn)練好的模型對(duì)象,以及需要繪制的樹形圖的配置參數(shù)。
下面是plot_tree的常用參數(shù):
decision_tree:訓(xùn)練好的決策樹模型對(duì)象。feature_names:特征的名稱列表。class_names:類別的名稱列表。filled:是否給節(jié)點(diǎn)填充顏色,默認(rèn)為False。rounded:是否將節(jié)點(diǎn)的框圓角化,默認(rèn)為False。special_characters:是否使用特殊字符,默認(rèn)為False。
使用示例:
from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier from sklearn.tree import plot_tree # 加載數(shù)據(jù)集 iris = datasets.load_iris() X, y = iris.data, iris.target # 劃分訓(xùn)練集和測(cè)試集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # 創(chuàng)建決策樹分類器并訓(xùn)練 clf = DecisionTreeClassifier() clf.fit(X_train, y_train) # 繪制決策樹模型的樹形圖 plot_tree(clf, filled=True, rounded=True, feature_names=iris.feature_names, class_names=iris.target_names)
上述代碼將會(huì)繪制出一個(gè)決策樹模型的樹形圖,其中每個(gè)節(jié)點(diǎn)代表一個(gè)判斷條件,通過樹形圖可以清晰地了解決策樹的結(jié)構(gòu)和特征的重要性。
總結(jié)
本文介紹了數(shù)據(jù)可視化的基礎(chǔ)和Python中常用的Matplotlib和Seaborn庫,通過實(shí)例演示了如何使用Matplotlib繪制折線圖、散點(diǎn)圖、柱狀圖、箱線圖和餅狀圖,并展示了如何組合這些圖形。
到此這篇關(guān)于python數(shù)據(jù)分析中的多種圖形繪制示例(折線圖、柱狀圖、餅狀圖、散點(diǎn)圖、熱力圖)的文章就介紹到這了,更多相關(guān)python實(shí)現(xiàn)多種圖形繪制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python數(shù)據(jù)分析之Matplotlib數(shù)據(jù)可視化
- Python數(shù)據(jù)分析應(yīng)用之Matplotlib數(shù)據(jù)可視化詳情
- Python數(shù)據(jù)分析進(jìn)階之構(gòu)建可復(fù)用的數(shù)據(jù)處理類與模塊化腳本
- Python?Pandas數(shù)據(jù)分析的使用完整教學(xué)
- Python項(xiàng)目實(shí)戰(zhàn):電商平臺(tái)銷售數(shù)據(jù)分析
- 使用Python對(duì)MySQL進(jìn)行數(shù)據(jù)分析
- Python對(duì)時(shí)間序列進(jìn)行數(shù)據(jù)分析與可視化的實(shí)戰(zhàn)指南
- Python數(shù)據(jù)分析必備的12種數(shù)據(jù)清洗技術(shù)分享
- Python進(jìn)行數(shù)據(jù)分析的全流程指南
- Python進(jìn)行數(shù)據(jù)分析的5大常見錯(cuò)誤與解決
- Python分析寶馬全球銷售數(shù)據(jù)?實(shí)戰(zhàn)項(xiàng)目教你掌握數(shù)據(jù)清洗與可視化
相關(guān)文章
python 爬蟲之selenium可視化爬蟲的實(shí)現(xiàn)
這篇文章主要介紹了python 爬蟲之selenium可視化爬蟲的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Python?copy()與deepcopy()方法之間有什么區(qū)別
這篇文章主要介紹了Python中的copy()和deepcopy(),下面詳細(xì)介紹該內(nèi)容并附上詳細(xì)代碼,需要的朋友可以參考一下文章的具體內(nèi)容,希望對(duì)你有所幫助2022-10-10
Python使用Matplotlib模塊的pie()函數(shù)實(shí)現(xiàn)繪制餅形圖
這篇文章主要為大家詳細(xì)介紹了 Python 如何使用 Matplotlib 模塊的pie()函數(shù)繪制餅形圖,文中有詳細(xì)的代碼講解,對(duì)大家學(xué)習(xí)或工作有一定的幫助,感興趣的可以了解一下2023-11-11
Python使用單例模式創(chuàng)建類的實(shí)現(xiàn)示例
本文詳細(xì)介紹了Python中實(shí)現(xiàn)單例模式的多種方式,包括元類、threading.Lock、模塊、importlib、__new__方法和裝飾器等,感興趣的可以了解一下2024-12-12
python實(shí)現(xiàn)多進(jìn)程代碼示例
Python中大部分情況下都需要使用多進(jìn)程,Python中提供了multiprocessing這個(gè)包實(shí)現(xiàn)多進(jìn)程。multiprocessing支持子進(jìn)程、進(jìn)程間的同步與通信,本文就詳細(xì)的介紹一下2018-10-10
python飛機(jī)大戰(zhàn) pygame游戲創(chuàng)建快速入門詳解
這篇文章主要介紹了python飛機(jī)大戰(zhàn) pygame游戲創(chuàng)建,結(jié)合實(shí)例形式詳細(xì)分析了Python使用pygame創(chuàng)建飛機(jī)大戰(zhàn)游戲的具體步驟與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-12-12

