一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Matplotlib使用(1)

 云深無(wú)際 2021-11-03

Matplotlib 是Python編程語(yǔ)言的一個(gè)繪圖庫(kù)及其數(shù)值數(shù)學(xué)擴(kuò)展 NumPy。它為利用通用的圖形用戶界面工具包,如Tkinter, wxPython, Qt或GTK+向應(yīng)用程序嵌入式繪圖提供了面向?qū)ο蟮膽?yīng)用程序接口。

fig, ax = plt.subplots() ax.plot([1, 2, 3, 4], [1, 4, 2, 3])

Matplotlib在Figures(窗口)上繪制數(shù)據(jù)圖,每個(gè)數(shù)據(jù)可以包含一個(gè)或多個(gè)Axes(即,可以根據(jù)xy坐標(biāo)(或極坐標(biāo)圖中的ther-r)指定點(diǎn)的區(qū)域) ,或3D圖中的xyz等)。使用軸創(chuàng)建圖形的最簡(jiǎn)單方法是使用,pyplot.subplots然后我們可以 Axes.plot在軸上繪制一些數(shù)據(jù):


matlab中不用畫軸,就像這樣

Matlab

m里面也有相似得用法,

接下來(lái)看看圖形要素

Figure

在整個(gè)figure。Figure跟蹤所有子Axes,少量“特殊”artists(標(biāo)題,人物傳說(shuō)等)和畫布。(不必太擔(dān)心畫布,這是至關(guān)重要的,因?yàn)樗鼘?shí)際上是繪制對(duì)象來(lái)獲得繪圖的對(duì)象,但作為用戶,您幾乎看不見它)。一個(gè)圖形可以包含任意數(shù)量的Axes,但通常至少包含一個(gè)。(機(jī)翻,有點(diǎn)鬼畜)

創(chuàng)建新圖形的最簡(jiǎn)單方法是使用pyplot:


fig = plt.figure() # an empty figure with no Axes
fig, ax = plt.subplots() # a figure with a single Axes
fig, axs = plt.subplots(2, 2) # a figure with a 2x2 grid of Axes

將軸與圖形一起創(chuàng)建很方便,但是以后也可以添加軸,以實(shí)現(xiàn)更復(fù)雜的軸布局。

Axes

這就是您認(rèn)為的“繪圖”,它是具有數(shù)據(jù)空間的圖像區(qū)域。一個(gè)給定的圖形可以包含許多Axes,但是一個(gè)給定的Axes 對(duì)象只能位于一個(gè)Figure。軸包含兩個(gè)(或3D情況下為三個(gè)) Axis對(duì)象(注意軸和Axis之間的差異),這些對(duì)象負(fù)責(zé)數(shù)據(jù)限制(也可以通過(guò)axes.Axes.set_xlim()和 axes.Axes.set_ylim()方法控制數(shù)據(jù)限制)。每個(gè)Axes都有一個(gè)標(biāo)題(通過(guò)設(shè)置set_title()),一個(gè)x標(biāo)簽(通過(guò)設(shè)置set_xlabel())和一個(gè)y 標(biāo)簽(通過(guò) 設(shè)置 set_ylabel())。

的Axes類和它的成員函數(shù)是主要的入口點(diǎn)與OO接口工作。

Axis

這些是類似數(shù)字線的對(duì)象。他們負(fù)責(zé)設(shè)置圖形限制并生成刻度(軸上的標(biāo)記)和刻度標(biāo)簽(標(biāo)記刻度的字符串)??潭鹊奈恢糜蒐ocator對(duì)象確定,刻度標(biāo)簽字符串由格式化Formatter。正確Locator和正確的組合可以Formatter很好地控制刻度線的位置和標(biāo)簽。

Artist?

基本上你可以在圖中看到的一切是一個(gè)藝術(shù)家(甚至 Figure,Axes和Axis對(duì)象)。這包括 Text對(duì)象,Line2D對(duì)象,collections對(duì)象,Patch 對(duì)象...(您明白了)。繪制圖形后,所有藝術(shù)家都被繪制到畫布上。大多數(shù)藝術(shù)家都被綁在斧頭上。這樣的藝術(shù)家不能被多個(gè)軸共享,也不能從一個(gè)軸移動(dòng)到另一個(gè)軸。

使用Matplotlib本質(zhì)上有兩種方法:

顯式創(chuàng)建圖形和軸,并在其上調(diào)用方法(“面向?qū)ο螅∣O)樣式”)。

依靠pyplot自動(dòng)創(chuàng)建和管理圖形和軸,并使用pyplot函數(shù)進(jìn)行繪圖。

所以可以做到(OO風(fēng)格)

代碼不一樣,結(jié)果一樣,體現(xiàn)了,圖包在大方向上繪圖得兩種方法

對(duì)于一些經(jīng)常要繪制得圖,可以考慮函數(shù)得方法就像這樣:

一旦圖形很復(fù)雜,這種方法是個(gè)不錯(cuò)的選擇

性能

無(wú)論是以交互方式瀏覽數(shù)據(jù)還是以編程方式保存大量繪圖,渲染性能都可能成為繪圖中的一個(gè)痛苦瓶頸。Matplotlib提供了幾種方法,以稍微改變繪制外觀(達(dá)到可設(shè)置的公差)為代價(jià),大大減少了渲染時(shí)間。減少渲染時(shí)間的可用方法取決于所創(chuàng)建繪圖的類型。

線段簡(jiǎn)化

對(duì)于具有線段的圖(例如,典型的線圖,多邊形的輪廓等),可以通過(guò)文件中的path.simplify和 path.simplify_threshold參數(shù) 來(lái)控制渲染性能matplotlibrc。該path.simplify參數(shù)是一個(gè)布爾值,指示是否完全簡(jiǎn)化了線段。該 path.simplify_threshold參數(shù)控制簡(jiǎn)化的線段數(shù)量。閾值越高,渲染越快。

以下腳本將首先顯示數(shù)據(jù)而不進(jìn)行任何簡(jiǎn)化,然后以簡(jiǎn)化方式顯示相同的數(shù)據(jù)。嘗試與他們兩個(gè)進(jìn)行交互:


import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

# Setup, and create the data to plot
y = np.random.rand(100000)
y[50000:] *= 2
y[np.logspace(1, np.log10(50000), 400).astype(int)] = -1
mpl.rcParams['path.simplify'] = True

mpl.rcParams['path.simplify_threshold'] = 0.0
plt.plot(y)
plt.show()

mpl.rcParams['path.simplify_threshold'] = 1.0
plt.plot(y)
plt.show()

Matplotlib當(dāng)前默認(rèn)為的簡(jiǎn)化閾值1/9。如果要更改默認(rèn)設(shè)置以使用其他值,則可以更改matplotlibrc 文件。另外,您可以創(chuàng)建一種新樣式(用于最大程度簡(jiǎn)化)進(jìn)行交互式繪圖,并創(chuàng)建另一種樣式(用于最小程度進(jìn)行簡(jiǎn)化)的出版物質(zhì)量繪圖,并根據(jù)需要激活它們。

通過(guò)將線段迭代合并為單個(gè)矢量,直到下一個(gè)線段到矢量的垂直距離(在顯示坐標(biāo)空間中測(cè)量)大于該path.simplify_threshold參數(shù),可以簡(jiǎn)化此工作。

標(biāo)記簡(jiǎn)化

標(biāo)記也可以簡(jiǎn)化,盡管不如線段健壯。標(biāo)記簡(jiǎn)化僅適用于Line2D對(duì)象(通過(guò) markevery屬性)。無(wú)論在哪里 Line2D傳遞構(gòu)造參數(shù)(例如 matplotlib.pyplot.plot()和) matplotlib.axes.Axes.plot(),markevery 都可以使用參數(shù):

plt.plot(x, y, markevery=10)

markevery參數(shù)允許進(jìn)行簡(jiǎn)單的二次采樣,或嘗試均勻間隔(沿x軸)采樣。

將行分成較小的塊

什么是后端,就是把你得code翻譯出來(lái)顯示在屏幕上面

如果使用的是Agg后端.則可以使用agg.path.chunksizerc參數(shù)。這使您可以指定塊的大小,并且任何大于此頂點(diǎn)的線都將被拆分為多行,每行的agg.path.chunksize 頂點(diǎn)數(shù)不超過(guò)多個(gè)。(除非agg.path.chunksize為零,否則將不進(jìn)行分塊。)對(duì)于某些類型的數(shù)據(jù),將行分塊為合理的大小可以大大減少渲染時(shí)間。

以下腳本將首先顯示沒(méi)有任何塊大小限制的數(shù)據(jù),然后顯示塊大小為10,000的相同數(shù)據(jù)。當(dāng)數(shù)字很大時(shí),最好看到最大的區(qū)別,請(qǐng)嘗試最大化GUI并與之交互:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['path.simplify_threshold'] = 1.0

# Setup, and create the data to plot
y = np.random.rand(100000)
y[50000:] *= 2
y[np.logspace(1, np.log10(50000), 400).astype(int)] = -1
mpl.rcParams['path.simplify'] = True

mpl.rcParams['agg.path.chunksize'] = 0
plt.plot(y)
plt.show()

mpl.rcParams['agg.path.chunksize'] = 10000
plt.plot(y)
plt.show()

與上面得圖一樣,但是繪制時(shí)間在主觀上面確實(shí)可以感覺(jué)到了差異

傳說(shuō)

軸的默認(rèn)圖例行為會(huì)嘗試查找覆蓋最少數(shù)據(jù)點(diǎn)(loc='best')的位置。如果有很多數(shù)據(jù)點(diǎn),這可能是非常昂貴的計(jì)算。在這種情況下,您可能需要提供一個(gè)特定的位置。

使用快速樣式

快速樣式可用于自動(dòng)設(shè)置簡(jiǎn)化和拆分參數(shù)合理設(shè)置,以加快繪制大量的數(shù)據(jù)。只需運(yùn)行以下命令即可使用它:

import matplotlib.style as mplstyle
mplstyle.use('fast')

它的重量很輕,因此可以與其他樣式很好地配合,只要確保最后應(yīng)用快速樣式即可,這樣其他樣式就不會(huì)覆蓋設(shè)置:

mplstyle.use(['dark_background', 'ggplot', 'fast'])

求關(guān)注,求轉(zhuǎn)發(fā)

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日本人妻免费一区二区三区| 青青草草免费在线视频| 国产一区二区三区四区中文| 国产欧美高清精品一区| 国产三级欧美三级日韩三级| 好吊妞视频只有这里有精品| 亚洲精品偷拍一区二区三区| 激情爱爱一区二区三区| 国产精品激情在线观看| 久久亚洲国产视频三级黄| 欧美日韩综合免费视频| 一区二区三区免费公开| 在线观看免费午夜福利| 欧美日韩国内一区二区| 国内精品美女福利av在线| 久草视频在线视频在线观看| 欧美在线观看视频免费不卡| 国产精品免费视频专区| 亚洲综合天堂一二三区| 久热久热精品视频在线观看| 国产又猛又大又长又粗| 国产麻豆一线二线三线| 国产一级特黄在线观看| 玩弄人妻少妇一区二区桃花| 果冻传媒在线观看免费高清| 日韩精品一区二区三区射精| 亚洲国产精品国自产拍社区| 激情视频在线视频在线视频| 人妻中文一区二区三区| 久久三级国外久久久三级| 国产免费一区二区三区av大片| 激情丁香激情五月婷婷| 国产精品色热综合在线| 色哟哟国产精品免费视频| 久久国产亚洲精品成人| 91亚洲精品综合久久| 国产乱久久亚洲国产精品| 男人和女人干逼的视频| 午夜精品麻豆视频91| 中文字幕日韩无套内射| 亚洲欧洲日韩综合二区|