最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Matplotlib直方圖繪制中的參數(shù)bins和rwidth的實現(xiàn)

 更新時間:2022年02月04日 10:41:46   作者:orion-orion  
本文主要介紹了Matplotlib直方圖繪制中的參數(shù)bins和rwidth的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

情景引入

我們在做機器學習相關(guān)項目時,常常會分析數(shù)據(jù)集的樣本分布,而這就需要用到直方圖的繪制。

在Python中可以很容易地調(diào)用matplotlib.pyplot的hist函數(shù)來繪制直方圖。不過,該函數(shù)參數(shù)不少,有幾個繪圖的小細節(jié)也需要注意。

首先,我們假定現(xiàn)在有個聯(lián)邦學習的項目情景。我們有一個樣本個數(shù)為15的圖片數(shù)據(jù)集,樣本標簽有4個,分別為cat, dog, car, ship。這個數(shù)據(jù)集已經(jīng)被不均衡地劃分到4個任務(wù)節(jié)點(client)上。 情境引入

我們在做機器學習相關(guān)項目時,常常會分析數(shù)據(jù)集的樣本分布,而這就需要用到直方圖的繪制。

在Python中可以很容易地調(diào)用matplotlib.pyplothist函數(shù)來繪制直方圖。不過,該函數(shù)參數(shù)不少,有幾個繪圖的小細節(jié)也需要注意。

首先,我們假定現(xiàn)在有個聯(lián)邦學習的項目情景。我們有一個樣本個數(shù)為15的圖片數(shù)據(jù)集,樣本標簽有4個,分別為cat, dog, car, ship。這個數(shù)據(jù)集已經(jīng)被不均衡地劃分到4個任務(wù)節(jié)點(client)上,如像下面表示:

N_CLIENTS = 3 
num_cls, classes = 4, ['cat', 'dog', 'car', 'ship']
train_labels = [0, 3, 2, 0, 3, 2, 1, 0, 3, 3, 1, 0, 3, 2, 2] #數(shù)據(jù)集的標簽列表

client_idcs = [slice(0, 4), slice(4, 11), slice(11, 15)]
# 數(shù)據(jù)集樣本在client上的劃分情況

我們需要可視化樣本在任務(wù)節(jié)點的分布情況。我們第一次可能會寫出如下代碼:

import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(5,3))
plt.hist([train_labels[idc]for idc in client_idcs], stacked=False, 
         bins=num_cls,
        label=["Client {}".format(i) for i in range(N_CLIENTS)])

plt.xticks(np.arange(num_cls), classes)
plt.legend()
plt.show()

此時的可視化結(jié)果如下:

這時我們會發(fā)現(xiàn),我們x軸上的標簽和上方的bar(每個圖像類別對應的3個bar合稱為1個bin)并沒有對齊,而這時劇需要我們調(diào)整bins這個參數(shù)。

bins 參數(shù)

在講述bins參數(shù)之前我們先來熟悉一下hist繪圖中bin和bar的含義。下面是它們的詮釋圖:

這里\(x_1\)、\(x_2\)是x軸對象,在hist中,默認x軸第一個對象對應刻度為0,第2個對象刻度為1,依次類圖。在這個詮釋圖上,bin(原意為垃圾箱)就是指每個x軸對象所占優(yōu)的矩形繪圖區(qū)域,bar(原意為塊)就是指每個矩形繪圖區(qū)域中的條形。 如上圖所示,x軸第一個對象對應的bin區(qū)間為[-0.5, 0.5),第2個對象對應的bin區(qū)域為[0.5, 1)(注意,hist規(guī)定一定是左閉又開)。每個對象的bin區(qū)域內(nèi)都有3個bar。

通過查閱matplotlib文檔,我們知道了bins參數(shù)的解釋如下:

bins: int or sequence or str, default: rcParams["hist.bins"] (default: 10)

If bins is an integer, it defines the number of equal-width bins in the range.

If bins is a sequence, it defines the bin edges, including the left edge of the first bin and the right edge of the last bin; in this case, bins may be unequally spaced. All but the last (righthand-most) bin is half-open. In other words, if bins is:

[1, 2, 3, 4]

then the first bin is [1, 2) (including 1, but excluding 2) and the second [2, 3). The last bin, however, is [3, 4], which includes 4.

If bins is a string, it is one of the binning strategies supported by numpy.histogram_bin_edges: 'auto', 'fd', 'doane', 'scott', 'stone', 'rice', 'sturges', or 'sqrt'.

我來概括一下,也就是說如果bins是個數(shù)字,那么它設(shè)置的是bin的個數(shù),也就是沿著x軸劃分多少個獨立的繪圖區(qū)域。我們這里有四個圖像類別,故需要設(shè)置4個繪圖區(qū)域,每個區(qū)域相對于x軸刻度的偏移采取默認設(shè)置。

不過,如果我們要設(shè)置每個區(qū)域的位置偏移,我們就需要將bins設(shè)置為一個序列。

bins序列的刻度要參照hist函數(shù)中的x坐標刻度來設(shè)置,本任務(wù)中4個分類類別對應的x軸刻度分別為[0, 1, 2, 3] 。如果我們將序列設(shè)置為[0, 1, 2, 3, 4]就表示第一個繪圖區(qū)域?qū)膮^(qū)間是[1, 2),第2個繪圖區(qū)域?qū)奈恢檬?code>[1, 2),第三個繪圖區(qū)域?qū)奈恢檬?code>[2, 3),依次類推。

就大眾審美而言,我們想讓每個區(qū)域的中心和對應x軸刻度對齊,這第一個區(qū)域的區(qū)間為[-0.5, 0.5),第二個區(qū)域的區(qū)間為[0.5, 1.5),依次類推。則最終的bins序列為[-0.5, 0.5, 1.5, 2.5, 3.5]。于是,我們將hist函數(shù)修改如下:

plt.hist([train_labels[idc]for idc in client_idcs], stacked=False, 
         bins=np.arange(-0.5, 4, 1),
        label=["Client {}".format(i) for i in range(N_CLIENTS)])

這樣,每個劃分區(qū)域和對應x軸的刻度就對齊了:

stacked參數(shù)

有時x軸的項目多了,每個x軸的對象都要設(shè)置3個bar對繪圖空間無疑是一個巨大的占用。在這個情況下我們?nèi)绾螇嚎s空間的使用呢?這個時候參數(shù)stacked就派上了用場,我們將參數(shù)stacked設(shè)置為True:

plt.hist([train_labels[idc]for idc in client_idcs],stacked=True 
         bins=np.arange(-0.5, 4, 1),
        label=["Client {}".format(i) for i in range(N_CLIENTS)])

可以看到每個x軸對象的bar都“疊加”起來了:

不過,新的問題又出來了,這樣每x軸對象的bar之間完全沒有距離了,顯得十分“擁擠”,我們可否修改bins參數(shù)以設(shè)置區(qū)域bin之間的間距呢?答案是不行,因為我們前面提到過,bins參數(shù)中只能將區(qū)域設(shè)置為連續(xù)排布的。

換一個思路,我們設(shè)置每個bin內(nèi)的bar和bin邊界之間的間距。此時,我們需要修改r_width參數(shù)。

rwidth 參數(shù)

我們看文檔中對rwidth參數(shù)的解釋:

rwidth float or None, default: None

The relative width of the bars as a fraction of the bin width. If None, automatically compute the width.

Ignored if histtype is 'step' or 'stepfilled'.

翻譯一下,rwidth用于設(shè)置每個bin中的bar相對bin的大小。這里我們不妨修改為0.5:

plt.hist([train_labels[idc]for idc in client_idcs],stacked=True, 
         bins=np.arange(-0.5, 4, 1), rwidth=0.5, 
        label=["Client {}".format(i) for i in range(N_CLIENTS)])

修改之后的圖表如下:

可以看到每個x軸元素內(nèi)的bar正好占對應bin的寬度的二分之一。

引用

[1] https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.hist.html

到此這篇關(guān)于Matplotlib直方圖繪制中的參數(shù)bins和rwidth的實現(xiàn)的文章就介紹到這了,更多相關(guān)Matplotlib bins rwidth內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中閉包和自由變量的使用與注意事項

    Python中閉包和自由變量的使用與注意事項

    這篇文章主要給大家介紹了關(guān)于Python中閉包和自由變量的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 基于Python實現(xiàn)電影售票系統(tǒng)

    基于Python實現(xiàn)電影售票系統(tǒng)

    這篇文章主要介紹了通過Python實現(xiàn)一個簡單的電影售票系統(tǒng),文中的示例代碼對我們學習Python有一定的幫助,感興趣的小伙伴可以跟隨小編一起學習一下
    2021-12-12
  • python如何提取英語pdf內(nèi)容并翻譯

    python如何提取英語pdf內(nèi)容并翻譯

    這篇文章主要為大家詳細介紹了python如何提取英語pdf內(nèi)容并翻譯,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python使用APScheduler實現(xiàn)定時任務(wù)過程解析

    Python使用APScheduler實現(xiàn)定時任務(wù)過程解析

    這篇文章主要介紹了Python使用APScheduler實現(xiàn)定時任務(wù)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • pymysql模塊的操作實例

    pymysql模塊的操作實例

    在本篇文章里小編給大家分享的是關(guān)于pymysql模塊的簡單操作,有需要的朋友們可以參考下。
    2019-12-12
  • django中的HTML控件及參數(shù)傳遞方法

    django中的HTML控件及參數(shù)傳遞方法

    下面小編就為大家分享一篇django中的HTML控件及參數(shù)傳遞方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • python編程嵌套函數(shù)實例代碼

    python編程嵌套函數(shù)實例代碼

    這篇文章主要介紹了python編程嵌套函數(shù)實例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 詳解JavaScript編程中的window與window.screen對象

    詳解JavaScript編程中的window與window.screen對象

    這篇文章主要介紹了JavaScript編程中的window與window.screen對象,是JS在瀏覽器中視圖編程的基礎(chǔ),需要的朋友可以參考下
    2015-10-10
  • python單例模式的應用場景實例講解

    python單例模式的應用場景實例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于python單例模式的應用場景實例講解內(nèi)容,有興趣的朋友們可以學習下。
    2021-02-02
  • C3 線性化算法與 MRO之Python中的多繼承

    C3 線性化算法與 MRO之Python中的多繼承

    Python 中的方法解析順序(Method Resolution Order, MRO)定義了多繼承存在時 Python 解釋器查找函數(shù)解析的正確方式。這篇文章給大家介紹了Python中的多繼承,感興趣的朋友一起看看吧
    2021-10-10

最新評論

新民市| 竹北市| 福州市| 滨州市| 兴化市| 全州县| 肥东县| 汉寿县| 纳雍县| 财经| 遂昌县| 泸西县| 大港区| 常熟市| 金山区| 南靖县| 南丹县| 贵德县| 积石山| 南开区| 昌吉市| 邯郸市| 长兴县| 嫩江县| 承德县| 中西区| 曲松县| 信阳市| 界首市| 无极县| 六枝特区| 丰原市| 江陵县| 乌兰察布市| 天长市| 稷山县| 宜宾县| 宁国市| 元阳县| 景东| 隆安县|