?python用matplotlib可視化繪圖詳解
1、Matplotlib 簡(jiǎn)介
Matplotlib 簡(jiǎn)介:
Matplotlib
是一個(gè)python的 2D繪圖庫(kù),它以各種硬拷貝格式和跨平臺(tái)的交互式環(huán)境生成出版質(zhì)量級(jí)別的圖形,matplotlib 對(duì)于圖像美化方面比較完善,可以自定義線條的顏色和樣式,可以在一張繪圖紙上繪制多張小圖,也可以在一張圖上繪制多條線,可以很方便地將數(shù)據(jù)可視化并對(duì)比分析。- 同Excel繪制相關(guān)圖標(biāo)相比,使用
Matplotlib
繪制自由度更高,并且能解決excel無(wú)法繪制數(shù)據(jù)量較大、維度較多的圖表問(wèn)題。
如何使用Matplotlib:
python 環(huán)境下 :
pip install matplotlib
jupyter notebook 中:
!pip install matplotlib
(強(qiáng)烈建議安裝anaconda,一些常用的包就不用在單獨(dú)安裝了)安裝了anaconda了,直接導(dǎo)包就行
import matplotlib.pyplot as plt #plt是別名
Matplotlib繪制圖形:
折線圖 | plot |
柱狀圖 | bar |
條形圖 | barh |
餅圖 | pie |
散點(diǎn)圖 | scatter |
直方圖 | hist |
箱形圖 | boxplot |
子圖 | subplot |
2、Matplotlib圖形繪制
1)折線圖
折線圖(line chart
)是一種將數(shù)據(jù)點(diǎn)按照順序連接起來(lái)的圖形,折線圖是排列在工作表的列或行中的數(shù)據(jù)可以繪制到折線圖中,折線圖可以顯示隨時(shí)間(根據(jù)常用比例設(shè)置)而變化的連續(xù)數(shù)據(jù),因此非常適用于顯示在相等時(shí)間間隔下數(shù)據(jù)的趨勢(shì)。
plt.figure(figsize=(10,6))#調(diào)整畫(huà)布大小 plt.plot(data["日期"],data["自配送銷(xiāo)售額"],color='y')#通過(guò)color調(diào)整顏色 plt.xticks(rotation=45)#x軸傾斜的角度 plt.show()
其中顏色可以設(shè)置成很多,下表為部分:
'r' | 紅色 |
'g' | 綠色 |
'b' | 藍(lán)色 |
'c' | 青色 |
'm' | 品紅 |
'y' | 黃色 |
'k' | 黑色 |
'w' | 白色 |
淺粉紅 | #FFB6C1 |
猩紅 | #DC143C |
最底下為rgb顏色值,可以查看RGB顏色值與十六進(jìn)制顏色碼轉(zhuǎn)換工具里邊比較詳細(xì)
plt.figure(figsize=(10,5)) plt.plot(data["日期"],data["總銷(xiāo)售額"],color='r',linewidth=0.5,marker="*",linestyle='-.') plt.plot(data["日期"],data["FBA銷(xiāo)售額"],color='g',linewidth=0.5,marker="2",linestyle='-') plt.plot(data["日期"],data["自配送銷(xiāo)售額"],color='y',linewidth=0.5,marker="s",linestyle='--') plt.xticks(rotation=45)#旋轉(zhuǎn)x軸標(biāo)注 font = { ? ? "family":"kaiti", ?# ?設(shè)置字體的樣式 ? ? "size":"20" ?# ?設(shè)置字體的大小 } ? plt.rc("font",**font) #設(shè)置X軸標(biāo)簽 plt.xlabel("時(shí)間") #設(shè)置y軸標(biāo)簽 plt.ylabel("數(shù)額") plt.show() #linewidth是設(shè)置線的寬度? #marker是設(shè)置線的拐點(diǎn)標(biāo)記樣式
常用字體名稱(chēng):
楷體 | kaiti |
黑體 | SimHei |
微軟雅黑 | Microsoft YaHei |
新宋體 | NSimSun |
仿宋_GB2312 | FangSong_GB2312 |
楷體_GB2312 | KaiTi_GB2312 |
常用線型:
實(shí)線 | '-' |
點(diǎn)虛線 | ':' |
破折線 | '--' |
點(diǎn)劃線 | '-.' |
不畫(huà)線 | '' 或 ' ' |
用標(biāo)記:
點(diǎn) | "." |
上三角 | "^" |
上三叉 | "2" |
正方形 | "s" |
星號(hào) | "*" |
菱形 | "D" |
渲染指定的字符。例如 "$f$" 以字母 f 為標(biāo)記。 | '$...$' |
2)柱狀圖
柱形圖,又稱(chēng)長(zhǎng)條圖、柱狀統(tǒng)計(jì)圖(德文: Säulendiagramm
、英文:bar chart、西班牙文: diagrama de barras)亦稱(chēng)條圖、條狀圖、棒形圖,是一種以長(zhǎng)方形的長(zhǎng)度為變量的統(tǒng)計(jì)圖表。長(zhǎng)條圖用來(lái)比較兩個(gè)或以上的價(jià)值(不同時(shí)間或者不同條件),只有一個(gè)變量,通常利用于較小的數(shù)據(jù)集分析。長(zhǎng)條圖亦可橫向排列,或用多維方式表達(dá)。
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
參數(shù)說(shuō)明:
x
:浮點(diǎn)型數(shù)組,柱形圖的 x 軸數(shù)據(jù)。height
:浮點(diǎn)型數(shù)組,柱形圖的高度。width
:浮點(diǎn)型數(shù)組,柱形圖的寬度。bottom
:浮點(diǎn)型數(shù)組,底座的 y 坐標(biāo),默認(rèn) 0。align
:柱形圖與 x 坐標(biāo)的對(duì)齊方式,'center' 以 x 位置為中心,這是默認(rèn)值。 'edge':將柱形圖的左邊緣與 x 位置對(duì)齊。要對(duì)齊右邊緣的條形,可以傳遞負(fù)數(shù)的寬度值及 align='edge'。
**kwargs::其他參數(shù)。
plt.figure(figsize=(10,5)) plt.bar(data["排序"],data["銷(xiāo)量"]) ##調(diào)整畫(huà)布外框顏色 上:top 下: bottom 左:left 右:right ax=plt.gca() ax.spines["top"].set_color("w") ax.spines["bottom"].set_color("r") ax.spines["left"].set_color("r") ax.spines["right"].set_color("w") ##調(diào)整x、y軸刻度 plt.xlim(data.index.values[0],data.index.values[-1]) #x軸從0開(kāi)始到最后一個(gè) 0第一個(gè) -1最后一個(gè) plt.ylim(np.min(data["銷(xiāo)量"]),np.max(data["銷(xiāo)量"])) ?#最小到最大 plt.show()
3)條形圖
條形圖(bar chart)是用寬度相同的條形的高度或長(zhǎng)短來(lái)表示數(shù)據(jù)多少的圖形。條形圖可以橫置或縱置,縱置時(shí)也稱(chēng)為柱形圖(column chart
)。此外,條形圖有簡(jiǎn)單條形圖、復(fù)式條形圖等形式。
plt.figure(figsize=(10,5)) plt.barh(data["排序"],data["銷(xiāo)量"]) ##調(diào)整畫(huà)布外框顏色 上:top 下: bottom 左:left 右:right ax=plt.gca() ax.spines["top"].set_color("w") ax.spines["bottom"].set_color("r") ax.spines["left"].set_color("r") ax.spines["right"].set_color("w") ##調(diào)整x、y軸刻度 plt.xlim(np.min(data["銷(xiāo)量"]),np.max(data["銷(xiāo)量"])) ?#x軸從0開(kāi)始到最后一個(gè) 0第一個(gè) -1最后一個(gè) plt.ylim(data.index.values[0],data.index.values[-1]) #最小到最大 plt.show()
條形圖就是把柱狀圖放倒,調(diào)整X、Y軸即可
3)餅圖
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)[source]
參數(shù)說(shuō)明:
x:浮點(diǎn)型數(shù)組,表示每個(gè)扇形的面積。
explode:數(shù)組,表示各個(gè)扇形之間的間隔,默認(rèn)值為0。
labels:列表,各個(gè)扇形的標(biāo)簽,默認(rèn)值為 None。
colors:數(shù)組,表示各個(gè)扇形的顏色,默認(rèn)值為 None。
autopct:設(shè)置餅圖內(nèi)各個(gè)扇形百分比顯示格式,%d%% 整數(shù)百分比,%0.1f 一位小數(shù), %0.1f%% 一位小數(shù)百分比, %0.2f%% 兩位小數(shù)百分比。
labeldistance:標(biāo)簽標(biāo)記的繪制位置,相對(duì)于半徑的比例,默認(rèn)值為 1.1,如 <1則繪制在餅圖內(nèi)側(cè)。
pctdistance::類(lèi)似于 labeldistance,指定 autopct 的位置刻度,默認(rèn)值為 0.6。
shadow::布爾值 True 或 False,設(shè)置餅圖的陰影,默認(rèn)為 False,不設(shè)置陰影。
radius::設(shè)置餅圖的半徑,默認(rèn)為 1。
startangle::起始繪制餅圖的角度,默認(rèn)為從 x 軸正方向逆時(shí)針畫(huà)起,如設(shè)定 =90 則從 y 軸正方向畫(huà)起。
counterclock:布爾值,設(shè)置指針?lè)较?,默認(rèn)為 True,即逆時(shí)針,F(xiàn)alse 為順時(shí)針。
wedgeprops :字典類(lèi)型,默認(rèn)值 None。參數(shù)字典傳遞給 wedge 對(duì)象用來(lái)畫(huà)一個(gè)餅圖。例如:wedgeprops={'linewidth':5} 設(shè)置 wedge 線寬為5。
textprops :字典類(lèi)型,默認(rèn)值為:None。傳遞給 text 對(duì)象的字典參數(shù),用于設(shè)置標(biāo)簽(labels)和比例文字的格式。
center :浮點(diǎn)類(lèi)型的列表,默認(rèn)值:(0,0)。用于設(shè)置圖標(biāo)中心位置。
frame :布爾類(lèi)型,默認(rèn)值:False。如果是 True,繪制帶有表的軸框架。
rotatelabels :布爾類(lèi)型,默認(rèn)為 False。如果為 True,旋轉(zhuǎn)每個(gè) label 到指定的角度。
plt.figure(figsize=(10,5)) sum_sale=np.sum(data["總銷(xiāo)售額"]) font={ ? ? "family":"kaiti" ,"size":"15" } ? plt.rc("font",**font) fba_sale=np.sum(data["FBA銷(xiāo)售額"]) self_sale=np.sum(data["自配送銷(xiāo)售額"]) plt.pie([sum_sale,fba_sale,self_sale] ? ? ? ?,labels=["總銷(xiāo)售額","FBA銷(xiāo)售額","自配送銷(xiāo)售額"] ? ? ? ?,colors=["m","b","g"] #設(shè)置餅圖顏色 ? ? ? ?,shadow=True ? ? ? ? ?#是否設(shè)置陰影 ? ? ? ? ,labeldistance=1.2 ? #標(biāo)簽距圖表的距離 ? ? ? ? ,autopct="%.2f%%" ?##設(shè)置顯示數(shù)字樣式 ? ? ? ? ,startangle=60 ?##旋轉(zhuǎn)角度 ? ? ? ? ,explode=[0.1,0,0] ? ? ? ?) plt.title("統(tǒng)計(jì)",loc="center")#center中間 ? ? ? ? plt.show()
4)散點(diǎn)圖
散點(diǎn)圖是指在回歸分析中,數(shù)據(jù)點(diǎn)在直角坐標(biāo)系平面上的分布圖,散點(diǎn)圖表示因變量隨自變量而變化的大致趨勢(shì),據(jù)此可以選擇合適的函數(shù)對(duì)數(shù)據(jù)點(diǎn)進(jìn)行擬合。用兩組數(shù)據(jù)構(gòu)成多個(gè)坐標(biāo)點(diǎn),考察坐標(biāo)點(diǎn)的分布,判斷兩變量之間是否存在某種關(guān)聯(lián)或總結(jié)坐標(biāo)點(diǎn)的分布模式。散點(diǎn)圖將序列顯示為一組點(diǎn)。值由點(diǎn)在圖表中的位置表示。類(lèi)別由圖表中的不同標(biāo)記表示。散點(diǎn)圖通常用于比較跨類(lèi)別的聚合數(shù)據(jù)。
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)
參數(shù)說(shuō)明:
x,y:長(zhǎng)度相同的數(shù)組,也就是我們即將繪制散點(diǎn)圖的數(shù)據(jù)點(diǎn),輸入數(shù)據(jù)。
s:點(diǎn)的大小,默認(rèn) 20,也可以是個(gè)數(shù)組,數(shù)組每個(gè)參數(shù)為對(duì)應(yīng)點(diǎn)的大小。
c:點(diǎn)的顏色,默認(rèn)藍(lán)色 'b',也可以是個(gè) RGB 或 RGBA 二維行數(shù)組。
marker:點(diǎn)的樣式,默認(rèn)小圓圈 'o'。
cmap:Colormap,默認(rèn) None,標(biāo)量或者是一個(gè) colormap 的名字,只有 c 是一個(gè)浮點(diǎn)數(shù)數(shù)組的時(shí)才使用。如果沒(méi)有申明就是 image.cmap。
norm:Normalize,默認(rèn) None,數(shù)據(jù)亮度在 0-1 之間,只有 c 是一個(gè)浮點(diǎn)數(shù)的數(shù)組的時(shí)才使用。
vmin,vmax::亮度設(shè)置,在 norm 參數(shù)存在時(shí)會(huì)忽略。
alpha::透明度設(shè)置,0-1 之間,默認(rèn) None,即不透明。
linewidths::標(biāo)記點(diǎn)的長(zhǎng)度。
edgecolors::顏色或顏色序列,默認(rèn)為 'face',可選值有 'face', 'none', None。
plotnonfinite::布爾值,設(shè)置是否使用非限定的 c ( inf, -inf 或 nan) 繪制點(diǎn)。
**kwargs::其他參數(shù)。
plt.scatter(data["平均單個(gè)訂單成本"],data["訂單額"] ? ? ? ? ? ? , color=("red","green","black","orange","purple","beige","cyan","magenta","cyan","magenta")#設(shè)置球的顏色 ? ? ? ? ? ?,s=data["訂單額"]#設(shè)置球的大小 ? ? ? ? ? ?,marker="h"#設(shè)置球的形狀 ? ? ? ? ? ?,linewidths=4#設(shè)置球邊界的寬度 ? ? ? ? ? ?,edgecolors='b'#設(shè)置邊界的顏色 ? ? ? ? ,alpha=0.5#設(shè)置透明度 ? ? ? ? ? ?)#設(shè)置球的形狀 plt.xlabel("訂單成本") plt.ylabel("訂單額") plt.show()
5)直方圖
直方圖(Histogram
),又稱(chēng)質(zhì)量分布圖,是一種統(tǒng)計(jì)報(bào)告圖,由一系列高度不等的縱向條紋或線段表示數(shù)據(jù)分布的情況。 一般用橫軸表示數(shù)據(jù)類(lèi)型,縱軸表示分布情況。
plt.figure(figsize=(20,5)) data1 = data[data["數(shù)量"]>20] plt.hist(data1["數(shù)量"], ? ? ? ? bins=data1.index.values[-1] #xz軸上展示多少 ? ? ? ? ? ,align = "mid"? ? ? ? ? , density=True#頻率頻數(shù)設(shè)置 ? ? ? ? ) plt.xlim(10) plt.show()
6)箱型圖
箱形圖(Box-plot)又稱(chēng)為盒須圖、盒式圖或箱線圖,是一種用作顯示一組數(shù)據(jù)分散情況資料的統(tǒng)計(jì)圖。因形狀如箱子而得名。在各種領(lǐng)域也經(jīng)常被使用,常見(jiàn)于品質(zhì)管理。它主要用于反映原始數(shù)據(jù)分布的特征,還可以進(jìn)行多組數(shù)據(jù)分布特征的比較。箱線圖的繪制方法是:先找出一組數(shù)據(jù)的上邊緣、下邊緣、中位數(shù)和兩個(gè)四分位數(shù);然后, 連接兩個(gè)四分位數(shù)畫(huà)出箱體;再將上邊緣和下邊緣與箱體相連接,中位數(shù)在箱體中間。
plt.boxplot(data[data["銷(xiāo)量"]<3000]["銷(xiāo)量"]) plt.show()
橫線上邊的可以看做是異常值,也叫離群點(diǎn) ,橫線是上限值,依次往下是上4分位、中位數(shù)、下4分位數(shù)、下限
- 上4分位數(shù)的意思是全部數(shù)據(jù)中有4分之一的數(shù)據(jù)比它大
-下4分位數(shù)的意思是全部數(shù)據(jù)中有4分之一的數(shù)據(jù)比它小
- 中位數(shù)的意思就是位于中間的數(shù)據(jù)
-上4分位減去下4分位數(shù)代表著4分位的間距,那么異常值(離群點(diǎn))就是大于 (上四分位 + 1.5 * 四分位間距) 或小于(下4分位 - 1.5*四分位間距)的數(shù)字
- 上限值就是等于(上4分位 + 1.5 * 四分位間距)的值
多個(gè)箱型圖繪制
dataa = [data[data["銷(xiāo)量"]<2000]["銷(xiāo)量"],data[data["銷(xiāo)量"]<3000]["銷(xiāo)量"]] plt.boxplot(dataa ?# dataa中包含多少元素 就會(huì)繪制幾個(gè)箱型圖 ? ? ? ? ? ?,notch=True ?# 是否展示凹口 ? ? ? ? ? ?,sym="*" # 設(shè)置異形點(diǎn)的形狀 ? ? ? ? ? ?,vert=False # 箱型圖的擺放方式,True就是垂直,F(xiàn)alse就是橫著 ? ? ? ? ? ? ,whis=2 ?# 定義異常,默認(rèn)是1.5這個(gè)參數(shù)也就是上下四分位距離的倍數(shù) ? ? ? ? ? ? ,labels=["箱型圖a","箱型圖b"] # 說(shuō)明 ? ? ? ? ? ? ,showmeans=True ? # 展示平均值 ? ? ? ? ? ? ,meanline=True ?# 以線的形式來(lái)展示平均值,前提是showmeans=True ? ? ? ? ? ? ,showfliers=True ?# 是否顯示異常值 ? ? ? ? ? ? ,meanprops=dict(markerfacecolor="r", marker="s") ? ? ? ? ? ? ,widths=0.5 ? ? ? ? ? ?) plt.show()
7)子圖
我們可以使用 pyplot
中的subplot()
和 subplots()
方法來(lái)繪制多個(gè)子圖。
subplot()
方法在繪圖時(shí)需要指定位置,subplots()
方法可以一次生成多個(gè),在調(diào)用時(shí)只需要調(diào)用生成對(duì)象的 ax
subplots() 方法語(yǔ)法格式如下:
matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
rows:默認(rèn)為 1,設(shè)置圖表的行數(shù)。
ncols:默認(rèn)為 1,設(shè)置圖表的列數(shù)。
sharex、sharey:設(shè)置 x、y 軸是否共享屬性,默認(rèn)為 false,可設(shè)置為 'none'、'all'、'row' 或 'col'。 False 或 none 每個(gè)子圖的 x 軸或 y 軸都是獨(dú)立的,True 或 'all':所有子圖共享 x 軸或 y 軸,'row' 設(shè)置每個(gè)子圖行共享一個(gè) x 軸或 y 軸,'col':設(shè)置每個(gè)子圖列共享一個(gè) x 軸或 y 軸。
squeeze:布爾值,默認(rèn)為 True,表示額外的維度從返回的 Axes(軸)對(duì)象中擠出,對(duì)于 N*1 或 1*N 個(gè)子圖,返回一個(gè) 1 維數(shù)組,對(duì)于 N*M,N>1 和 M>1 返回一個(gè) 2 維數(shù)組。如果設(shè)置為 False,則不進(jìn)行擠壓操作,返回一個(gè)元素為 Axes 實(shí)例的2維數(shù)組,即使它最終是1x1。
subplot_kw:可選,字典類(lèi)型。把字典的關(guān)鍵字傳遞給 add_subplot() 來(lái)創(chuàng)建每個(gè)子圖。
gridspec_kw:可選,字典類(lèi)型。把字典的關(guān)鍵字傳遞給 GridSpec 構(gòu)造函數(shù)創(chuàng)建子圖放在網(wǎng)格里(grid)。
**fig_kw:把詳細(xì)的關(guān)鍵字參數(shù)傳給 figure() 函數(shù)。
plt.figure(figsize=(10,5))#設(shè)置畫(huà)布大小 x=np.arange(1,200) plt.subplot(221)#在第一個(gè)位置畫(huà)折線圖 plt.plot(x,x+x) plt.subplot(222)#第二個(gè)位置繪制散點(diǎn)圖 plt.scatter(np.arange(0,20),np.random.rand(20)) plt.subplot(223)#第三個(gè)位置繪制餅圖 plt.pie(x=[1,2,3,4],labels=['a','b','c','d']) plt.subplot(224)#第四個(gè)位置繪制柱狀圖 plt.bar(x=[1,2,3,4],height=[2,3,6,5]) plt.show()
到此這篇關(guān)于 python用matplotlib可視化繪圖詳解的文章就介紹到這了,更多相關(guān)matplotlib可視化繪圖詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django入門(mén)優(yōu)缺點(diǎn)及環(huán)境搭建流程
這篇文章主要為大家介紹了Django入門(mén)優(yōu)缺點(diǎn)及環(huán)境搭建流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11minpy使用GPU加速Numpy科學(xué)計(jì)算方式
這篇文章主要介紹了minpy使用GPU加速Numpy科學(xué)計(jì)算方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01Pytest?fixture及conftest相關(guān)詳解
這篇文章主要介紹了Pytest?fixture及conftest相關(guān)詳解,fixture是在測(cè)試函數(shù)運(yùn)行前后,由pytest執(zhí)行的外殼函數(shù),更多相關(guān)內(nèi)容需要的朋友可以參考一下2022-09-09python內(nèi)置函數(shù)之slice案例詳解
這篇文章主要介紹了python內(nèi)置函數(shù)之slice案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09Python之tkinter面板PanedWindow的使用
這篇文章主要介紹了Python之tkinter面板PanedWindow的使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05