Matplotlib入門

最近開(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步:

  1. 創(chuàng)建一個(gè)圖紙(figure)
  2. 在圖紙上創(chuàng)建一個(gè)或多個(gè)繪圖(plotting)區(qū)域(坐標(biāo)系/軸,axes)
  3. 在plotting區(qū)域上描繪點(diǎn)房官、線等
  4. 為plotting添加修飾標(biāo)簽(繪圖線上的或坐標(biāo)軸上的)
  5. 其他各種DIY

在上面的過(guò)程中趾徽,主要就是下面三個(gè)元素:

  1. 變量
  2. 函數(shù)
  3. 圖紙(figure)和坐標(biāo)軸(axes)

其中,變量和函數(shù)通過(guò)改變figure和axes中的元素(例如:title,label,點(diǎn)和線等等)一起描述figure和axes翰守,也就是在畫布上繪圖孵奶。圖片結(jié)構(gòu)如下所示:

Matplotlib繪出圖片結(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清酥。
xticksyticks: 為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()

散點(diǎn)圖

餅圖

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()

柱狀圖實(shí)現(xiàn)的直方圖
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()
3D圖

總的來(lái)說(shuō) matplotlib 其實(shí)不難帚屉,難的是方法谜诫,參數(shù)太多,難記住攻旦,不能記住就不能用好喻旷,不過(guò)好在源碼中注釋還算詳細(xì),所以在使用matplotlib畫圖的時(shí)候要好好的把源碼利用起來(lái)牢屋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末且预,一起剝皮案震驚了整個(gè)濱河市牺陶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辣之,老刑警劉巖掰伸,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異怀估,居然都是意外死亡狮鸭,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門多搀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)歧蕉,“玉大人,你說(shuō)我怎么就攤上這事康铭」咄耍” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵从藤,是天一觀的道長(zhǎng)催跪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)夷野,這世上最難降的妖魔是什么懊蒸? 我笑而不...
    開(kāi)封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮悯搔,結(jié)果婚禮上骑丸,老公的妹妹穿的比我還像新娘。我一直安慰自己妒貌,他們只是感情好通危,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著灌曙,像睡著了一般菊碟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上平匈,一...
    開(kāi)封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天框沟,我揣著相機(jī)與錄音藏古,去河邊找鬼增炭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拧晕,可吹牛的內(nèi)容都是我干的隙姿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼厂捞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼输玷!你這毒婦竟也來(lái)了队丝?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤欲鹏,失蹤者是張志新(化名)和其女友劉穎机久,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體赔嚎,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡膘盖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了尤误。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侠畔。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖损晤,靈堂內(nèi)的尸體忽然破棺而出软棺,到底是詐尸還是另有隱情,我是刑警寧澤尤勋,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布喘落,位于F島的核電站,受9級(jí)特大地震影響最冰,放射性物質(zhì)發(fā)生泄漏揖盘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一锌奴、第九天 我趴在偏房一處隱蔽的房頂上張望兽狭。 院中可真熱鬧,春花似錦鹿蜀、人聲如沸箕慧。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)颠焦。三九已至,卻和暖如春往枣,著一層夾襖步出監(jiān)牢的瞬間伐庭,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工分冈, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留圾另,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓雕沉,卻偏偏與公主長(zhǎng)得像集乔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坡椒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348