乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      在Python Matplotlib中制作瀑布圖

       hercules028 2022-05-24 發(fā)布于四川
      excelperfect

      標(biāo)簽:Python,Matplotlib,瀑布圖
       
      我們將用Python制作瀑布圖,特別是使用matplotlib庫。瀑布圖顯示了運(yùn)行總數(shù)以及增減,這對(duì)于屬性分析來說是很好的選擇。
       
      Matplotlib沒有像“waterfall_chart()”這樣的神奇函數(shù),使我們能夠用一行代碼就繪制瀑布圖。然而,可以使用一點(diǎn)小小的技巧在Python中自定義自己的瀑布圖。
       
      1.創(chuàng)建標(biāo)準(zhǔn)的條形圖。
       
      2.創(chuàng)建另一個(gè)條形圖并將其放在第一個(gè)條形圖的頂部,然后將新條形圖的顏色設(shè)置為與背景色相同的顏色,以隱藏第一個(gè)條形圖的底部。
       
      實(shí)際上,因?yàn)槲覀兛床坏降诙M條形圖,所以我們可以使用它們來“隱藏”另一組條形圖。
       
      import pandas as pd
      import matplotlib.pyplot as plt
      import numpy as np
       
      df= pd.DataFrame({'category':['Sales','Service','Expenses','Taxes','Interest'],
                         'num':[100,10,-20,-30,60]})
       
      代碼運(yùn)行結(jié)果如下圖1所示。
      圖片
      1
       
      任務(wù)現(xiàn)在變成創(chuàng)建兩個(gè)條形圖,其中一個(gè)應(yīng)該記錄運(yùn)行總數(shù),另一個(gè)只是運(yùn)行總數(shù)的變化,我們稍后就會(huì)看到。
       
      可以使用cumsum()方法計(jì)算一個(gè)運(yùn)行總數(shù),然后將其下移1行。這兩個(gè)新的列tottot1為我們提供了每個(gè)瀑布條的起點(diǎn)和終點(diǎn)。例如,在第2Expenses(費(fèi)用)中,起點(diǎn)是110,終點(diǎn)是90。
      df['tot']= df['num'].cumsum()
      df['tot1']= df['tot'].shift(1).fillna(0)
       
      代碼運(yùn)行結(jié)果如下圖2所示。
      圖片
      2
       
      由于起點(diǎn)和終點(diǎn)可以位于兩個(gè)新列中的任意一列(取決于值的符號(hào)),因此我們可以再創(chuàng)建兩列來捕獲upper點(diǎn)和lower點(diǎn):
      lower= df[['tot','tot1']].min(axis=1)
      upper= df[['tot','tot1']].max(axis=1)
       
      我們使用upper點(diǎn)繪制第一組條形圖。注意,這些條形的顏色與背景顏色不同。然后,我們使用lower點(diǎn)繪制第二組條形圖,并將顏色設(shè)置為與背景顏色相同,默認(rèn)情況下為白色。
      fig,ax= plt.subplots()
      ax.bar(x=df['category'],height=upper,)
      ax.bar(x=df['category'],height=lower,color='white')
       
      現(xiàn)在我們得到一個(gè)類似下面圖3所示的圖表。基本上,由于與背景顏色相同,高度為“lower點(diǎn)”的條形圖是不可見的。
      圖片
      3
       
      現(xiàn)在,我們有了一個(gè)基本的瀑布圖,再給它添加一些顏色。這里使用綠色表示增加,紅色表示減少。
       
      數(shù)據(jù)在num列中隨時(shí)可用,讓我們創(chuàng)建一個(gè)新的color列來存儲(chǔ)每個(gè)類別的適當(dāng)顏色。
      df.loc[df['num']>= 0, 'color'] = 'green'
      df.loc[df['num']< 0, 'color'] = 'red'
       
      使用新顏色重新繪制條形圖,如下所示:
      ax.bar(x=df['category'],height=upper,color= df['color'])
       
      運(yùn)行結(jié)果如下圖4所示。
      圖片
      4
       
      瀑布圖顯示了每個(gè)類別對(duì)總數(shù)的貢獻(xiàn),因此可在每個(gè)條形的中間添加標(biāo)簽信息。也可以添加“連接符”,將上一個(gè)條形的起點(diǎn)和終點(diǎn)連接到下一個(gè)條形。
       
      下面將完整的瀑布圖代碼轉(zhuǎn)換為一個(gè)方便的Python函數(shù),以便以后可以重用它。該函數(shù)接受三個(gè)參數(shù):包含數(shù)據(jù)的數(shù)據(jù)框架、要放置為x軸的數(shù)據(jù)列的名稱以及要用作y軸的數(shù)據(jù)列的名稱。
      def waterfall(df, x, y):
       
          # 計(jì)算運(yùn)行總數(shù)
          df['tot'] = df[y].cumsum()
          df['tot1']=df['tot'].shift(1).fillna(0)
       
          # 條形圖的lower點(diǎn)和upper點(diǎn)
          lower = df[['tot','tot1']].min(axis=1)
          upper = df[['tot','tot1']].max(axis=1)
       
          # 為標(biāo)簽位置的中間點(diǎn)
          mid = (lower + upper)/2
       
          # 正數(shù)顯示綠色, 負(fù)數(shù)顯示紅色
          df.loc[df[y] >= 0, 'color'] = 'green'
          df.loc[df[y] < 0, 'color'] = 'red'
       
          # 計(jì)算連接點(diǎn)
          connect= df['tot1'].repeat(3).shift(-1)
          connect[1::3] = np.nan
       
          fig,ax = plt.subplots()
       
          # 繪制具有顏色的第一個(gè)條形
          bars = ax.bar(x=df[x],height=upper, color=df['color'])
       
       
          # 繪制第二個(gè)條形 - 不可見
          plt.bar(x=df[x],height=lower,color='white')
       
          # 繪制連接線
          plt.plot(connect.index,connect.values, 'k')
       
          # 繪制條形標(biāo)簽
          for i, v in enumerate(upper):
              plt.text(i-.15, mid[i],f'{df[y][i]:,.0f}')
       
      waterfall(df,'category','num')
       
      代碼運(yùn)行的結(jié)果如下圖5所示。
      圖片
      5

      注:本文學(xué)習(xí)整理自pythoninoffice.com,供有興趣的朋友參考。
      歡迎在下面留言,完善本文內(nèi)容,讓更多的人學(xué)到更完美的知識(shí)。
      歡迎到知識(shí)星球:完美Excel社群,進(jìn)行技術(shù)交流和提問,獲取更多電子資料,并通過社群加入專門的微信討論群,更方便交流。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

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

        類似文章 更多