最近開(kāi)始學(xué)習(xí)大數(shù)據(jù)分析相關(guān)的知識(shí),剛開(kāi)始學(xué)習(xí)matplotlib的內(nèi)容,為了防止后面遺忘到處查資料,顧將最近學(xué)的matplotlib的基礎(chǔ)入門的東西保留下來(lái)以便后期使用查找用。
Matplotlib概述
matplotlib是受MATLAB的啟發(fā)構(gòu)建的沛鸵。MATLAB是數(shù)據(jù)繪圖領(lǐng)域廣泛使用的語(yǔ)言和工具。MATLAB語(yǔ)言是面向過(guò)程的缆八。利用函數(shù)的調(diào)用曲掰,MATLAB中可以輕松的利用一行命令來(lái)繪制直線,然后再用一系列的函數(shù)調(diào)整結(jié)果奈辰。
matplotlib有一套完全仿照MATLAB的函數(shù)形式的繪圖接口蜈缤,在matplotlib.pyplot模塊中。這套函數(shù)接口方便MATLAB用戶過(guò)度到matplotlib包
使用matplotlib庫(kù)繪圖冯挎,原理很簡(jiǎn)單底哥,如下5步:
- 創(chuàng)建一個(gè)圖紙(figure)
- 在圖紙上創(chuàng)建一個(gè)或多個(gè)繪圖(plotting)區(qū)域(坐標(biāo)系/軸,axes)
- 在plotting區(qū)域上描繪點(diǎn)房官、線等
- 為plotting添加修飾標(biāo)簽(繪圖線上的或坐標(biāo)軸上的)
- 其他各種DIY
在上面的過(guò)程中趾徽,主要就是下面三個(gè)元素:
- 變量
- 函數(shù)
- 圖紙(figure)和坐標(biāo)軸(axes)
其中,變量和函數(shù)通過(guò)改變figure和axes中的元素(例如:title,label,點(diǎn)和線等等)一起描述figure和axes翰守,也就是在畫布上繪圖孵奶。圖片結(jié)構(gòu)如下所示:
如上圖所示,一張圖紙(figure)中有坐標(biāo)軸(axes)蜡峰,title為圖像標(biāo)題了袁,axis為坐標(biāo)軸,label為坐標(biāo)軸標(biāo)注湿颅,tick為刻度線载绿,tick label為刻度注釋。
在繪圖結(jié)構(gòu)中油航,figure創(chuàng)建窗口崭庸,subplot創(chuàng)建子圖。所有的繪畫只能在子圖上進(jìn)行。plt表示當(dāng)前子圖怕享,若沒(méi)有就創(chuàng)建一個(gè)子圖执赡。所有你會(huì)看到一些教程中使用plt進(jìn)行設(shè)置,一些教程使用子圖屬性進(jìn)行設(shè)置函筋。他們往往存在對(duì)應(yīng)功能函數(shù)沙合。
官網(wǎng):http://matplotlib.org/
官網(wǎng)可是個(gè)好東西,在Matplotlib官網(wǎng)中就像Echarts官網(wǎng)一樣提供了很多的示例跌帐,可以供我們參考和使用灌诅。
Matplotlib 介紹
引用庫(kù)
from matplotlib import pyplot as plt
通常我們引用matplotlib畫圖都是通過(guò)上面這種形式導(dǎo)包的。
常用繪制方法
幾個(gè)常見(jiàn)的matplotlib圖形繪制方法
?畫一個(gè)折線圖:
plt.plot()
?畫一個(gè)柱狀圖:plt.bar()
?畫一個(gè)條形圖:plt.barh()
?畫一個(gè)直方圖:plt.hist()
?畫一個(gè)餅圖:plt.pie()
?畫一個(gè)散點(diǎn)圖:plt.scatter()
?畫一個(gè)堆疊圖:plt. stackplot()
面板
Figure
:面板(圖)含末,matplotlib中的所有圖像都是位于figure對(duì)象中,一個(gè)圖像只能有一個(gè)figure對(duì)象即舌。
Subplot
:子圖佣盒,figure對(duì)象下創(chuàng)建一個(gè)或多個(gè)subplot對(duì)象(即axes)用于繪制圖像。
配置參數(shù):
axex
: 設(shè)置坐標(biāo)軸邊界和表面的顏色顽聂、坐標(biāo)刻度值大小和網(wǎng)格的顯示
figure
: 控制dpi(dpi
)肥惭、邊界顏色(color
)、圖形大小(figsize
)紊搪、和子區(qū)( subplot)設(shè)置
font
: 字體集(font family)蜜葱、字體大小和樣式設(shè)置
grid
: 設(shè)置網(wǎng)格顏色和線性
legend
: 設(shè)置圖例和其中的文本的顯示
line
: 設(shè)置線條(顏色、線型耀石、寬度等)和標(biāo)記
patch
: 是填充2D空間的圖形對(duì)象牵囤,如多邊形和圓≈臀埃控制線寬揭鳞、顏色和抗鋸齒設(shè)置等。
savefig
: 可以對(duì)保存的圖形進(jìn)行單獨(dú)設(shè)置梆奈。例如野崇,設(shè)置渲染的文件的背景為白色。
verbose
: 設(shè)置matplotlib在執(zhí)行期間信息輸出亩钟,如silent乓梨、helpful、debug和debug-annoying清酥。
xticks
和yticks
: 為x,y軸的主刻度和次刻度設(shè)置顏色扶镀、大小、方向焰轻,以及標(biāo)簽大小狈惫。
線條相關(guān)屬性標(biāo)記設(shè)置
線條風(fēng)格linestyle或ls | 描述 |
---|---|
‘-‘ | 實(shí)線 |
‘:’ | 虛線 |
‘–’ | 破折線 |
‘None’,’ ‘,’’ | 什么都不畫 |
‘-.’ | 點(diǎn)劃線 |
線條標(biāo)記
標(biāo)記maker 描述
‘o’ 圓圈
‘.’ 點(diǎn)
‘D’ 菱形
‘s’ 正方形
‘h’ 六邊形1
‘*’ 星號(hào)
‘H’ 六邊形2
‘d’ 小菱形
‘_’ 水平線
‘v’ 一角朝下的三角形
‘8’ 八邊形
‘<’ 一角朝左的三角形
‘p’ 五邊形
‘>’ 一角朝右的三角形
‘,’ 像素
‘^’ 一角朝上的三角形
‘+’ 加號(hào)
‘\ ‘ 豎線
‘None’,’’,’ ‘ 無(wú)
‘x’ X
顏色
別名 顏色
b 藍(lán)色
g 綠色
r 紅色
y 黃色
c 青色
k 黑色
m 洋紅色
w 白色
如果這兩種顏色不夠用,還可以通過(guò)兩種其他方式來(lái)定義顏色值:
1、使用HTML十六進(jìn)制字符串 color=’#123456’
使用合法的HTML顏色名字(’red’
,’chartreuse’
等)胧谈。
2忆肾、也可以傳入一個(gè) 歸一化 到[0,1]
的RGB元祖。 color=(0.3,0.3,0.4)
背景色
通過(guò)向如matplotlib.pyplot.axes()或者matplotlib.pyplot.subplot()這樣的方法提供一個(gè)axisbg參數(shù)菱肖,可以指定坐標(biāo)這的背景色客冈。
subplot(111,axisbg=(0.1843,0.3098,0.3098))
摘錄 - 繪圖操作步驟(以點(diǎn)圖、線圖為例)
#使用numpy產(chǎn)生數(shù)據(jù)
x=np.arange(-5,5,0.1)
y=x*3
#創(chuàng)建窗口稳强、子圖
#方法1:先創(chuàng)建窗口场仲,再創(chuàng)建子圖。(一定繪制)
fig = plt.figure(num=1, figsize=(15, 8),dpi=80) #開(kāi)啟一個(gè)窗口退疫,同時(shí)設(shè)置大小渠缕,分辨率
ax1 = fig.add_subplot(2,1,1) #通過(guò)fig添加子圖,參數(shù):行數(shù)褒繁,列數(shù)亦鳞,第幾個(gè)。
ax2 = fig.add_subplot(2,1,2) #通過(guò)fig添加子圖棒坏,參數(shù):行數(shù)燕差,列數(shù),第幾個(gè)坝冕。
print(fig,ax1,ax2)
#方法2:一次性創(chuàng)建窗口和多個(gè)子圖徒探。(空白不繪制)
fig,axarr = plt.subplots(4,1) #開(kāi)一個(gè)新窗口,并添加4個(gè)子圖喂窟,返回子圖數(shù)組
ax1 = axarr[0] #通過(guò)子圖數(shù)組獲取一個(gè)子圖
print(fig,ax1)
#方法3:一次性創(chuàng)建窗口和一個(gè)子圖测暗。(空白不繪制)
ax1 = plt.subplot(1,1,1,facecolor='white') #開(kāi)一個(gè)新窗口,創(chuàng)建1個(gè)子圖磨澡。facecolor設(shè)置背景顏色
print(ax1)
#獲取對(duì)窗口的引用偷溺,適用于上面三種方法
# fig = plt.gcf() #獲得當(dāng)前figure
# fig=ax1.figure #獲得指定子圖所屬窗口
# fig.subplots_adjust(left=0) #設(shè)置窗口左內(nèi)邊距為0,即左邊留白為0钱贯。
#設(shè)置子圖的基本元素
ax1.set_title('python-drawing') #設(shè)置圖體挫掏,plt.title
ax1.set_xlabel('x-name') #設(shè)置x軸名稱,plt.xlabel
ax1.set_ylabel('y-name') #設(shè)置y軸名稱,plt.ylabel
plt.axis([-6,6,-10,10]) #設(shè)置橫縱坐標(biāo)軸范圍,這個(gè)在子圖中被分解為下面兩個(gè)函數(shù)
ax1.set_xlim(-5,5) #設(shè)置橫軸范圍秩命,會(huì)覆蓋上面的橫坐標(biāo),plt.xlim
ax1.set_ylim(-10,10) #設(shè)置縱軸范圍尉共,會(huì)覆蓋上面的縱坐標(biāo),plt.ylim
xmajorLocator = MultipleLocator(2) #定義橫向主刻度標(biāo)簽的刻度差為2的倍數(shù)。就是隔幾個(gè)刻度才顯示一個(gè)標(biāo)簽文本
ymajorLocator = MultipleLocator(3) #定義縱向主刻度標(biāo)簽的刻度差為3的倍數(shù)弃锐。就是隔幾個(gè)刻度才顯示一個(gè)標(biāo)簽文本
ax1.xaxis.set_major_locator(xmajorLocator) #x軸 應(yīng)用定義的橫向主刻度格式袄友。如果不應(yīng)用將采用默認(rèn)刻度格式
ax1.yaxis.set_major_locator(ymajorLocator) #y軸 應(yīng)用定義的縱向主刻度格式。如果不應(yīng)用將采用默認(rèn)刻度格式
ax1.xaxis.grid(True, which='major') #x坐標(biāo)軸的網(wǎng)格使用定義的主刻度格式
ax1.yaxis.grid(True, which='major') #x坐標(biāo)軸的網(wǎng)格使用定義的主刻度格式
ax1.set_xticks([]) #去除坐標(biāo)軸刻度
ax1.set_xticks((-5,-3,-1,1,3,5)) #設(shè)置坐標(biāo)軸刻度
ax1.set_xticklabels(labels=['x1','x2','x3','x4','x5'],rotation=-30,fontsize='small') #設(shè)置刻度的顯示文本霹菊,rotation旋轉(zhuǎn)角度剧蚣,fontsize字體大小
plot1=ax1.plot(x,y,marker='o',color='g',label='legend1') #點(diǎn)圖:marker圖標(biāo)
plot2=ax1.plot(x,y,linestyle='--',alpha=0.5,color='r',label='legend2') #線圖:linestyle線性支竹,alpha透明度,color顏色鸠按,label圖例文本
ax1.legend(loc='upper left') #顯示圖例,plt.legend()
ax1.text(2.8, 7, r'y=3*x') #指定位置顯示文字,plt.text()
ax1.annotate('important point', xy=(2, 6), xytext=(3, 1.5), #添加標(biāo)注礼搁,參數(shù):注釋文本、指向點(diǎn)目尖、文字位置馒吴、箭頭屬性
arrowprops=dict(facecolor='black', shrink=0.05),
)
#顯示網(wǎng)格。which參數(shù)的值為major(只繪制大刻度)瑟曲、minor(只繪制小刻度)饮戳、both,默認(rèn)值為major洞拨。axis為'x','y','both'
ax1.grid(b=True,which='major',axis='both',alpha= 0.5,color='skyblue',linestyle='--',linewidth=2)
axes1 = plt.axes([.2, .3, .1, .1], facecolor='y') #在當(dāng)前窗口添加一個(gè)子圖扯罐,rect=[左, 下, 寬, 高],是使用的絕對(duì)布局烦衣,不和以存在窗口擠占空間
axes1.plot(x,y) #在子圖上畫圖
plt.savefig('aa.jpg',dpi=400,bbox_inches='tight') #savefig保存圖片歹河,dpi分辨率,bbox_inches子圖周邊白色空間的大小
plt.show() #打開(kāi)窗口琉挖,對(duì)于方法1創(chuàng)建在窗口一定繪制,對(duì)于方法2方法3創(chuàng)建的窗口涣脚,若坐標(biāo)系全部空白示辈,則不繪制
plot時(shí)可以設(shè)置的屬性包括如下:
屬性 值類型
alpha 浮點(diǎn)值
animated [True / False]
antialiased or aa [True / False]
clip_box matplotlib.transform.Bbox 實(shí)例
clip_on [True / False]
clip_path Path 實(shí)例, Transform遣蚀,以及Patch實(shí)例
color or c 任何 matplotlib 顏色
contains 命中測(cè)試函數(shù)
dash_capstyle ['butt' / 'round' / 'projecting']
dash_joinstyle ['miter' / 'round' / 'bevel']
dashes 以點(diǎn)為單位的連接/斷開(kāi)墨水序列
data (np.array xdata, np.array ydata)
figure matplotlib.figure.Figure 實(shí)例
label 任何字符串
linestyle or ls [ '-' / '--' / '-.' / ':' / 'steps' / ...]
linewidth or lw 以點(diǎn)為單位的浮點(diǎn)值
lod [True / False]
marker [ '+' / ',' / '.' / '1' / '2' / '3' / '4' ]
markeredgecolor or mec 任何 matplotlib 顏色
markeredgewidth or mew 以點(diǎn)為單位的浮點(diǎn)值
markerfacecolor or mfc 任何 matplotlib 顏色
markersize or ms 浮點(diǎn)值
markevery [ None / 整數(shù)值 / (startind, stride) ]
picker 用于交互式線條選擇
pickradius 線條的拾取選擇半徑
solid_capstyle ['butt' / 'round' / 'projecting']
solid_joinstyle ['miter' / 'round' / 'bevel']
transform matplotlib.transforms.Transform 實(shí)例
visible [True / False]
xdata np.array
ydata np.array
zorder 任何數(shù)值
繪圖實(shí)例
折線圖
import random
from matplotlib import pyplot as plt
from matplotlib import font_manager
# 指定中文字體
my_font = font_manager.FontProperties(fname=r"D:\pytest\untitled1\data_learn\msyh.ttc")
# 指定x的值
x = [i for i in range(50)]
y_1 = [random.randint(10, 100) for _ in range(50)]
y_2 = [random.randint(30, 80) for _ in range(50)]
# 指定畫圖的大小
plt.figure(figsize=(20, 8), dpi=80)
# 畫圖
plt.plot(x, y_2, label='測(cè)試數(shù)據(jù)', c='orange')
plt.plot(x, y_1, label='測(cè)試數(shù)據(jù)', color='#a81878', ls=':') # c=color 也可以使用'#a81878'
# x軸轉(zhuǎn)換為中文顯示矾麻,并旋轉(zhuǎn)90度
plt.xticks(x[::3], ['測(cè)試點(diǎn){}'.format(i+1) for i in range(50)][::3], color='r',fontproperties=my_font, rotation=30)
plt.yticks([x for x in range(0, 101, 2)][::5], ['高度{}'.format(i) for i in range(0, 101, 2)][::5], color='g',fontproperties=my_font)
plt.title('折線圖測(cè)試', fontproperties=my_font, fontsize=20)
# 設(shè)置X軸,Y軸顯示標(biāo)題
plt.xlabel('X軸', fontproperties=my_font, fontsize=14, color='r')
plt.ylabel('Y軸', fontproperties=my_font, fontsize=14, color='g')
# 繪制網(wǎng)格alpha表示透明度芭梯,ls=linestyle表示線條風(fēng)格
plt.grid(alpha=0.5, ls='-.')
# 添加圖例
plt.legend(prop=my_font, loc='upper right')
# plt.legend(prop=my_font, loc=5) # 位置也可以用數(shù)字代替
# 顯示圖片
plt.show()
散點(diǎn)圖
plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs)
參數(shù)說(shuō)明:
x险耀,y:array_like,shape(n玖喘,)
輸入數(shù)據(jù)
s:標(biāo)量或array_like甩牺,shape(n,)累奈,可選
大小以點(diǎn)數(shù)^ 2贬派。默認(rèn)是`rcParams ['lines.markersize'] ** 2`。
c:顏色澎媒,順序或顏色順序搞乏,可選,默認(rèn):'b'
`c`可以是單個(gè)顏色格式的字符串戒努,也可以是一系列顏色
規(guī)范的長(zhǎng)度為`N`请敦,或一系列`N`數(shù)字
使用通過(guò)kwargs指定的`cmap`和`norm`映射到顏色
(見(jiàn)下文)。請(qǐng)注意,`c`不應(yīng)該是單個(gè)數(shù)字RGB或
RGBA序列侍筛,因?yàn)檫@與數(shù)組無(wú)法區(qū)分
值將被彩色映射萤皂。 `c`可以是一個(gè)二維數(shù)組,其中的
行是RGB或RGBA勾笆,但是敌蚜,包括單個(gè)的情況
行為所有點(diǎn)指定相同的顏色。
marker:`?matplotlib.markers.MarkerStyle`窝爪,可選弛车,默認(rèn)值:'o'
請(qǐng)參閱`?matplotlib.markers`以獲取有關(guān)不同的更多信息
標(biāo)記分散支持的樣式。 `marker`可以是
該類的實(shí)例或特定文本的簡(jiǎn)寫
標(biāo)記蒲每。
cmap:`?matplotlib.colors.Colormap`纷跛,可選,默認(rèn):無(wú)
一個(gè)`?matplotlib.colors.Colormap`實(shí)例或注冊(cè)名稱邀杏。
`cmap`僅在`c`是浮點(diǎn)數(shù)組時(shí)使用贫奠。如果沒(méi)有,
默認(rèn)為rc`image.cmap`望蜡。
norm:`?matplotlib.colors.Normalize`唤崭,可選,默認(rèn):無(wú)
`?matplotlib.colors.Normalize`實(shí)例用于縮放
亮度數(shù)據(jù)為0,1脖律。`norm`只有在`c`是一個(gè)數(shù)組時(shí)才被使用
彩車谢肾。如果`None',則使用默認(rèn)值:func:`normalize`小泉。
vmin芦疏,vmax:標(biāo)量,可選微姊,默認(rèn)值:無(wú)
`vmin`和`vmax`與`norm`結(jié)合使用來(lái)標(biāo)準(zhǔn)化
亮度數(shù)據(jù)酸茴。如果其中任何一個(gè)都是`無(wú)',那么最小和最大的
使用顏色數(shù)組兢交。請(qǐng)注意薪捍,如果你通過(guò)一個(gè)“規(guī)范”實(shí)例,你的
`vmin`和`vmax`的設(shè)置將被忽略配喳。
alpha:標(biāo)量飘诗,可選,默認(rèn)值:無(wú)
alpha混合值界逛,介于0(透明)和1(不透明)之間昆稿,
linewidths:標(biāo)量或array_like,可選息拜,默認(rèn)值:無(wú)
如果無(wú)溉潭,則默認(rèn)為(lines.linewidth净响,)。
verts:(x喳瓣,y)的序列馋贤,可選
如果`marker`為None,這些頂點(diǎn)將用于
構(gòu)建標(biāo)記畏陕。標(biāo)記的中心位于
在(0,0)為標(biāo)準(zhǔn)化單位配乓。整體標(biāo)記重新調(diào)整
由``s``完成。
edgecolors :顏色或顏色順序惠毁,可選犹芹,默認(rèn)值:無(wú)
如果無(wú),則默認(rèn)為'face'
如果'face'鞠绰,邊緣顏色將永遠(yuǎn)是相同的
臉色腰埂。
如果它是'none',補(bǔ)丁邊界不會(huì)
被畫下來(lái)蜈膨。
對(duì)于未填充的標(biāo)記上荡,“edgecolors”kwarg
被忽視并被迫在內(nèi)部“面對(duì)”绽左。
實(shí)例:
import random
from matplotlib import pyplot as plt
from matplotlib import font_manager
# 指定中文字體
my_font = font_manager.FontProperties(fname=r"D:\pytest\untitled1\data_learn\msyh.ttc")
# 指定x的值
x = [i for i in range(50)]
y_1 = [random.randint(10, 100) for _ in range(50)]
y_2 = [random.randint(30, 80) for _ in range(50)]
# 指定畫圖的大小
plt.figure(figsize=(20, 8), dpi=80)
# 繪制第一個(gè)圖 參數(shù)代表:行數(shù),列數(shù)惠呼,第幾個(gè)
plt.subplot(1, 2, 1)
# 畫圖
plt.scatter(x, y_2, label='測(cè)試數(shù)據(jù)', c='orange')
plt.scatter(x, y_1, label='測(cè)試數(shù)據(jù)', color='#a81878', cmap=plt.cm.Blues, edgecolor='none', s=40) # c=color 也可以使用'#a81878'
# x軸轉(zhuǎn)換為中文顯示啤呼,并旋轉(zhuǎn)90度
plt.xticks(x[::3], ['測(cè)試點(diǎn){}'.format(i + 1) for i in range(50)][::3], color='r', fontproperties=my_font, rotation=30)
plt.yticks([x for x in range(0, 101, 2)][::5], ['高度{}'.format(i) for i in range(0, 101, 2)][::5], color='g',
fontproperties=my_font)
plt.title('折線圖測(cè)試', fontproperties=my_font, fontsize=20)
# 設(shè)置X軸址芯,Y軸顯示標(biāo)題
plt.xlabel('X軸', fontproperties=my_font, fontsize=14, color='r')
plt.ylabel('Y軸', fontproperties=my_font, fontsize=14, color='g')
# 繪制網(wǎng)格alpha表示透明度陕靠,ls=linestyle表示線條風(fēng)格
plt.grid(alpha=0.5, ls='--')
plt.legend(prop=my_font, loc=1)
# 繪制第二個(gè)圖 參數(shù)代表:行數(shù)涤浇,列數(shù),第幾個(gè)
plt.subplot(1, 2, 2)
x_values = range(-1000, 1001)
y_values = [x ** 2 for x in x_values]
y_values1 = [x * (x + x) for x in x_values]
plt.scatter(x_values, y_values, c=y_values, label='測(cè)試一', cmap=plt.cm.Blues, edgecolor='none', s=10)
plt.scatter(x_values, y_values1, c=y_values1, label='測(cè)試二', cmap=plt.cm.Reds, edgecolor='none', s=40)
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
plt.tick_params(axis='both', which='major', labelsize=14)
# 繪制網(wǎng)格alpha表示透明度例朱,ls=linestyle表示線條風(fēng)格
plt.grid(alpha=0.5, ls='-.')
# 添加圖例
# plt.legend(prop=my_font, loc='upper right')
plt.legend(prop=my_font, loc=5) # 位置也可以用數(shù)字代替
# 顯示圖片
plt.show()
餅圖
plt.pie(x, explode=None, labels=None,colors=(‘b’, ‘g’, ‘r’, ‘c’, ‘m’, ‘y’, ‘k’, ‘w’),autopct=None, pctdistance=0.6, shadow=False,labeldistance=1.1, startangle=None, radius=None,counterclock=True, wedgeprops=None, textprops=None,center = (0, 0), frame = False, hold = None, data = None )
參數(shù)說(shuō)明:
x :(每一塊)的比例孝情,如果sum(x) > 1會(huì)使用sum(x)歸一化鱼蝉;
labels :(每一塊)餅圖外側(cè)顯示的說(shuō)明文字洒嗤;
explode :(每一塊)離開(kāi)中心距離;
startangle :起始繪制角度,默認(rèn)圖是從x軸正方向逆時(shí)針畫起,如設(shè)定=90則從y軸正方向畫起魁亦;
shadow :在餅圖下面畫一個(gè)陰影渔隶。默認(rèn)值:False,即不畫陰影洁奈;
labeldistance :label標(biāo)記的繪制位置,相對(duì)于半徑的比例间唉,默認(rèn)值為1.1, 如<1則繪制在餅圖內(nèi)側(cè);
autopct :控制餅圖內(nèi)百分比設(shè)置,可以使用format字符串或者format function
'%1.1f'指小數(shù)點(diǎn)前后位數(shù)(沒(méi)有用空格補(bǔ)齊)利术;
pctdistance :類似于labeldistance,指定autopct的位置刻度,默認(rèn)值為0.6呈野;
radius :控制餅圖半徑,默認(rèn)值為1印叁;
counterclock :指定指針?lè)较虮幻埃徊紶栔稻啵蛇x參數(shù),默認(rèn)為:True昨悼,即逆時(shí)針蝗锥。將值改為False即可改為順時(shí)針。
wedgeprops :字典類型率触,可選參數(shù)终议,默認(rèn)值:None。參數(shù)字典傳遞給wedge對(duì)象用來(lái)畫一個(gè)餅圖葱蝗。例如:wedgeprops={'linewidth':3}設(shè)置wedge線寬為3穴张。
textprops :設(shè)置標(biāo)簽(labels)和比例文字的格式;字典類型垒玲,可選參數(shù)陆馁,默認(rèn)值為:None。傳遞給text對(duì)象的字典參數(shù)合愈。
center :浮點(diǎn)類型的列表叮贩,可選參數(shù),默認(rèn)值:(0,0)佛析。圖標(biāo)中心位置益老。
frame :布爾類型,可選參數(shù)寸莫,默認(rèn)值:False捺萌。如果是true,繪制帶有表的軸框架膘茎。
rotatelabels :布爾類型桃纯,可選參數(shù),默認(rèn)為:False披坏。如果為True态坦,旋轉(zhuǎn)每個(gè)label到指定的角度。
實(shí)例:
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 將圖表內(nèi)容字體設(shè)置為黑體棒拂,可以正常顯示中文
ratios = [0.1, 0.2, 0.15, 0.15, 0.4] # 存放比例列表
colors = ['peru', 'coral', 'salmon', 'yellow', 'grey'] # 存放顏色列表伞梯,與比例相匹配
labels = ["流行", 'classic', 'pop', '純音樂(lè)', 'blue'] # 存放各類元素標(biāo)簽
explode = (0, 0.1, 0, 0, 0.08)
plt.pie(ratios, explode=explode, colors=colors, labels=labels) # 繪制餅圖
plt.title('歌單音樂(lè)種類百分比')
plt.axis('equal') # 將餅圖顯示為正圓形
plt.show()
柱狀圖
plt.bar(left, height, alpha=1, width=0.8, color=, edgecolor=, label=, lw=3)
參數(shù)說(shuō)明:
x : sequence of scalars 數(shù)據(jù)源
height : scalar or sequence of scalars bar的高度
width : scalar or array-like, optional bar的寬度,默認(rèn)0.8
bottom : scalar or array-like, optional y軸的基準(zhǔn),默認(rèn)0
align : {‘center’, ‘edge’}, optional, default: ‘center’ x軸的位置,默認(rèn)中間,edge表示將bar的左邊與x對(duì)齊
color : scalar or array-like, optional bar顏色
edgecolor : scalar or array-like, optional 邊顏色
linewidth : scalar or array-like, optional 邊的寬度,0表示無(wú)邊框
tick_label : string or array-like, optional 標(biāo)簽,默認(rèn)無(wú),使用數(shù)字標(biāo)簽
xerr, yerr : scalar or array-like of shape(N,) or shape(2,N), optional : 誤差線
ecolor : scalar or array-like, optional, default: ‘black’ 誤差線的顏色,默認(rèn)黑
capsize : scalar, optional 誤差線的長(zhǎng)度,默認(rèn)無(wú),自動(dòng)獲取
error_kw : dict, optional 通過(guò)字典項(xiàng)傳遞錯(cuò)誤bar
log : bool, optional, default: False 為真表示y軸以log對(duì)象做刻度,默認(rèn)假
orientation : {‘vertical’, ‘horizontal’}, optional 垂直還是水平,默認(rèn)垂直
實(shí)例:
# -*- coding: utf-8 -*-
# @Time : 2019/10/25 15:30
# @Author :
# @Site :
# @File : bar1.py
# @Software: PyCharm
import random
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(20, 8), dpi=80)
plt.subplot(1, 2, 1)
x_value = range(20)
y_value = [random.randint(10, 50) for _ in x_value]
plt.bar(x_value, y_value, label="測(cè)試數(shù)據(jù)一", width=0.8, lw=0, color='b')
plt.xticks(x_value, range(1, 21))
plt.title('豎向柱狀圖')
plt.grid(alpha=0.5)
plt.legend(loc='upper right')
plt.subplot(1, 2, 2)
x_value = range(20)
y_value = [random.randint(10, 50) for _ in x_value]
plt.barh(x_value, y_value, label="測(cè)試數(shù)據(jù)二", height=0.5, lw=0, color='g')
plt.yticks(x_value, range(1, 21))
plt.title('橫向柱狀圖')
plt.grid(alpha=0.5)
plt.legend(loc='upper right')
plt.show()
直方圖
plt.hist (x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype=’bar’, align=’mid’, orientation=’vertical’, rwidth=None, log=False, color=None, label=None, stacked=False, hold=None, data=None, **kwargs)
參數(shù)說(shuō)明:
x : (n,) array or sequence of (n,) arrays 數(shù)據(jù)源
bins : integer or array_like 分塊數(shù),默認(rèn)10
range : tuple or None, optional 畫圖范圍,接收元組
normed : boolean, optional 概率分布,是否正則化
weights : (n, ) array_like or None, optional 均一化相關(guān)
cumulative : boolean, optional 每一列累加
bottom : array_like, scalar, or None bin的基線
histtype : {‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}, optional 畫圖的形狀,默認(rèn)是bar
align : {‘left’, ‘mid’, ‘right’}, optional bar中心位置,默認(rèn)中間
orientation : {‘horizontal’, ‘vertical’},optional 水平或垂直,默認(rèn)垂直
rwidth : scalar or None, optional bar的寬度
log : boolean, optional 是否啟用對(duì)數(shù)作為刻度
color : color or array_like of colors or None, optional 表示bar的顏色
label : string or None, optional bar的標(biāo)簽;也可以在圖例中寫plt.legend()
stacked : boolean, optional 是否接收多個(gè)輸入源
實(shí)例:
from matplotlib import pyplot as plt, font_manager
my_font = font_manager.FontProperties(fname=r"D:\pytest\untitled1\data_learn\msyh.ttc")
plt.figure(figsize=(20, 8), dpi=80)
time = [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130,
124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111, 78, 132, 124, 113, 150, 110,
117, 86, 95, 144, 105, 126, 130, 126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136, 123, 117, 119,
105, 137, 123, 128, 125, 104, 109, 134, 125, 127, 105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120,
114, 105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134, 156, 106, 117, 127, 144, 139, 139, 119,
140, 83, 110, 102, 123, 107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133, 112, 114, 122, 109,
106, 123, 116, 131, 127, 115, 118, 112, 135, 115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154,
136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141, 120, 117, 106, 149, 122, 122, 110, 118, 127,
121, 114, 125, 126, 114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92, 121, 112, 146, 97, 137, 105,
98, 117, 112, 81, 97, 139, 113, 134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110, 105, 129, 137,
112, 120, 113, 133, 112, 83, 94, 146, 133, 101, 131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,
111, 133, 150]
bins = 2
group = int((max(time) - min(time)) / bins)
# plt.hist(time, group, normed=1)
plt.hist(time, group)
# 指定刻度的范圍以及時(shí)長(zhǎng)
plt.xticks(list(range(min(time), max(time)))[::2])
plt.xlabel("電影時(shí)長(zhǎng)大小", fontproperties=my_font)
plt.ylabel("電影的數(shù)據(jù)量", fontproperties=my_font)
# 表格中的網(wǎng)狀線
plt.grid(True, linestyle='--', alpha=0.8)
plt.show()
柱狀圖實(shí)現(xiàn)的直方圖
import random
from matplotlib import pyplot as plt
bar_with = 1
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(20, 8), dpi=80)
x_value = range(50)
y_value = [random.randint(10, 50) for _ in x_value]
plt.bar(x_value, y_value, width=bar_with)
plt.xticks(
[i - bar_with / 2 for i in range(0, 51)],
range(0, 51)
)
plt.title('bar實(shí)現(xiàn)的直方圖', fontsize=20)
plt.show()
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import axes3d
n = 1000
x, y = np.meshgrid(np.linspace(-3, 3, n), np.linspace(-3, 3, n))
z = (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)
plt.figure('3D 裝逼圖', figsize=(10, 10), dpi=80, facecolor='lightgray')
plt.title('3D 裝逼圖', fontsize=18)
plt.grid(linestyle=":")
ax3d = plt.gca(projection='3d')
ax3d.set_xlabel('X', fontsize=12)
ax3d.set_ylabel('y', fontsize=12)
ax3d.set_zlabel('z', fontsize=12)
ax3d.plot_wireframe(x, y, z, rstride=30, cstride=30, linewidth=0.5, cmap='jet')
plt.show()
總的來(lái)說(shuō) matplotlib 其實(shí)不難帚屉,難的是方法谜诫,參數(shù)太多,難記住攻旦,不能記住就不能用好喻旷,不過(guò)好在源碼中注釋還算詳細(xì),所以在使用matplotlib畫圖的時(shí)候要好好的把源碼利用起來(lái)牢屋。