老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

如何使用Python創建一個瀑布圖

今天小編給大家分享一下如何使用Python創建一個瀑布圖的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

成都創新互聯公司成都網站建設按需規劃網站,是成都網站營銷推廣公司,為成都搬家公司提供網站建設服務,有成熟的網站定制合作流程,提供網站定制設計服務:原型圖制作、網站創意設計、前端HTML5制作、后臺程序開發等。成都網站推廣熱線:13518219792

創建圖表

首先,執行標準的輸入,并確保IPython能顯示matplot圖。

import numpy as np import pandas as pd import matplotlib.pyplot as plt
%matplotlib inline

設置我們想畫出瀑布圖的數據,并將其加載到數據幀(DataFrame)中。

數據需要以你的起始值開始,但是你需要給出最終的總數。我們將在下面計算它。

index = ['sales','returns','credit fees','rebates','late charges','shipping'] data = {'amount': [350000,-30000,-7500,-25000,95000,-7000]} trans = pd.DataFrame(data=data,index=index)

我使用了IPython中便捷的display函數來更簡單地控制我要顯示的內容。

  1. from IPython.display import display 

  2. display(trans)

首先,我們得到累積和。

display(trans.amount.cumsum())  sales 350000  returns 320000  credit fees 312500  rebates 287500  late charges 382500  shipping 375500  Name: amount, dtype: int64

這看起來不錯,但我們需要將一個地方的數據轉移到右邊。

  1. blank=trans.amount.cumsum().shift(1).fillna(0) 

  2.  

  3. display(blank)

sales 0  returns 350000  credit fees 320000  rebates 312500  late charges 287500  shipping 382500  Name: amount, dtype: float64

我們需要向trans和blank數據幀中添加一個凈總量。

total = trans.sum().amount  trans.loc["net"] = total  blank.loc["net"] = total  display(trans)  display(blank)
sales 0  returns 350000  credit fees 320000  rebates 312500  late charges 287500  shipping 382500  net 375500  Name: amount, dtype: float64

創建我們用來顯示變化的步驟。

  1. step = blank.reset_index(drop=True).repeat(3).shift(-1) 

  2.  

  3. step[1::3] = np.nan 

  4.  

  5. display(step)

0 0  0 NaN  0 350000  1 350000  1 NaN  1 320000  2 320000  2 NaN  2 312500  3 312500  3 NaN  3 287500  4 287500  4 NaN  4 382500  5 382500  5 NaN  5 375500  6 375500  6 NaN  6 NaN  Name: amount, dtype: float64

對于“net”行,為了不使堆疊加倍,我們需要確保blank值為0。

blank.loc["net"] = 0

然后,將其畫圖,看一下什么樣子。

  1. my_plot = trans.plot(kind='bar', stacked=True, bottom=blank,legend=None, title="2014 Sales Waterfall") 

  2. my_plot.plot(step.index, step.values,'k')

看起來相當不錯,但是讓我們試著格式化Y軸,以使其更具有可讀性。為此,我們使用FuncFormatter和一些Python2.7+的語法來截斷小數并向格式中添加一個逗號。

  1. def money(x, pos): 

  2.  

  3. 'The two args are the value and tick position' 

  4.  

  5. return "${:,.0f}".format(x)

from matplotlib.ticker import FuncFormatter formatter = FuncFormatter(money)

然后,將其組合在一起。

  1. my_plot = trans.plot(kind='bar', stacked=True, bottom=blank,legend=None, title="2014 Sales Waterfall") 

  2.  

  3. my_plot.plot(step.index, step.values,'k') 

  4.  

  5. my_plot.set_xlabel("Transaction Types") 

  6.  

  7. my_plot.yaxis.set_major_formatter(formatter)

完整腳本

基本圖形能夠正常工作,但是我想添加一些標簽,并做一些小的格式修改。下面是我最終的腳本:

import numpy as np  import pandas as pd  import matplotlib.pyplot as plt  from matplotlib.ticker import FuncFormatter     #Use python 2.7+ syntax to format currency  def money(x, pos):  'The two args are the value and tick position'  return "${:,.0f}".format(x)  formatter = FuncFormatter(money)     #Data to plot. Do not include a total, it will be calculated  index = ['sales','returns','credit fees','rebates','late charges','shipping']  data = {'amount': [350000,-30000,-7500,-25000,95000,-7000]}     #Store data and create a blank series to use for the waterfall  trans = pd.DataFrame(data=data,index=index)  blank = trans.amount.cumsum().shift(1).fillna(0)     #Get the net total number for the final element in the waterfall  total = trans.sum().amount  trans.loc["net"]= total  blank.loc["net"] = total     #The steps graphically show the levels as well as used for label placement  step = blank.reset_index(drop=True).repeat(3).shift(-1)  step[1::3] = np.nan     #When plotting the last element, we want to show the full bar,  #Set the blank to 0  blank.loc["net"] = 0     #Plot and label  my_plot = trans.plot(kind='bar', stacked=True, bottom=blank,legend=None, figsize=(10, 5), title="2014 Sales Waterfall")  my_plot.plot(step.index, step.values,'k')  my_plot.set_xlabel("Transaction Types")     #Format the axis for dollars  my_plot.yaxis.set_major_formatter(formatter)     #Get the y-axis position for the labels  y_height = trans.amount.cumsum().shift(1).fillna(0)     #Get an offset so labels don't sit right on top of the bar  max = trans.max()  neg_offset = max / 25  pos_offset = max / 50  plot_offset = int(max / 15)     #Start label loop  loop = 0  for index, row in trans.iterrows():  # For the last item in the list, we don't want to double count  if row['amount'] == total:  y = y_height[loop]  else:  y = y_height[loop] + row['amount']  # Determine if we want a neg or pos offset if row['amount'] > 0:  y += pos_offset  else:  y -= neg_offset  my_plot.annotate("{:,.0f}".format(row['amount']),(loop,y),ha="center")  loop+=1     #Scale up the y axis so there is room for the labels  my_plot.set_ylim(0,blank.max()+int(plot_offset))  #Rotate the labels  my_plot.set_xticklabels(trans.index,rotation=0)  my_plot.get_figure().savefig("waterfall.png",dpi=200,bbox_inches='tight')

以上就是“如何使用Python創建一個瀑布圖”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注創新互聯行業資訊頻道。


網頁標題:如何使用Python創建一個瀑布圖
網頁網址:http://www.xueling.net.cn/article/ihodhd.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 国产免费亚洲 | 中文字幕无码肉感爆乳在线 | 亚洲AV福利天堂一区二区三 | 美女让男人桶爽免费视频 | 久久久久久亚洲精品美女 | 丁香五月AV在线播放 | 野花社区www在线视频 | 无码亲近乱子伦免费视频在线观看 | 欧美黑人激情性久久 | 九色PORNY真实丨国产18 | 国产精品无码久久av | 美女张开腿露出尿口与奶头的照片 | 伦伦影院午夜理论片 | 国产在线第一区 | 巨大垂乳日本熟妇 | 色婷婷综合久色 | 国产亚洲精品久久久久久老妇 | 国内久久 | 99久久夜色精品国产亚洲狼 | 亚洲男女视频在线观看 | 1024国产精品永远免费 | 五月婷婷狠狠干 | 精品国产偷窥一区二区 | 国产午夜成人AV在线播放 | 精品国产一区二区三区香蕉 | 国产一区二区二区 | 色噜噜狠狠成人中文综合 | www.69视频 | 色妞视频男女视频 | 日本大片免a费观看视频 | 日日日综合网 | 极品美女大尺度私房写真 | 国产系列视频二区 | av北条麻妃在线 | 国产人妖在线播放网址 | 五月婷六月婷婷俺也去 | 人人妻人人澡AV天堂香蕉 | 久久日韩粉嫩一区二区三区 | 午夜寂寞福利视频 | WC女厕撒尿TV女厕偷拍 | av网站不卡 |