1. 程式人生 > 程式設計 >Python繪製組合圖的示例

Python繪製組合圖的示例

繪製組合圖:

組合圖就是將多個形狀,組合到⼀個圖形中,主要作⽤是節約作圖的空間,節省讀者的時間,從⽽提⾼
資訊傳達的效率。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def plot_combination1():
  sale = pd.read_excel('./data/每月目標銷售額和實際銷售額.xlsx',header=0,index_col=0)
  # 設定正常顯示中文標籤
  plt.rcParams['font.sans-serif'] = ['SimHei']
  # 正常顯示負號
  plt.rcParams['axes.unicode_minus'] = False
  # 設定字型大小
  plt.rcParams.update({'font.size':16})

  # 提取資料
  x = np.arange(12)+1
  y1 = sale.目標銷售額
  y2 = sale.實際銷售額

  # 計算目標完成率
  y3 = y2/y1 # float
  # print(y3) 1月   1.120000 2月   0.887500 3月   1.118182 4月   1.150000
  """
  第一種方式:是⽤兩個不同顏⾊的柱⼦,分別展示每個⽉的實際銷售額和⽬標銷售額,
  ⽤折線圖展示⽬標完成率。
  左邊的主座標軸是柱形圖對應的資料,右邊的次座標軸是折線圖對應的
  資料,下邊的橫座標軸表示細分的維度,⽐如時間、地區、渠道等。
  """
  plt.figure(figsize=(16,8))
  plt.subplot(111)

  # 柱形寬度
  bar_width = 0.35

  # 在主座標軸繪製柱形圖
  plt.bar(x,y1,bar_width,label='目標銷售額')
  plt.bar(x+bar_width,y2,label='實際銷售額')

  # 設定座標軸的取值範圍,避免柱子過高而與圖例重疊
  plt.ylim(0,max(y1.max(),y2.max())*1.2)

  # 設定圖例
  plt.legend(loc='upper left')

  # 設定橫座標的標籤
  plt.xticks(x)
  # plt.set_xticklabels(sale.index)

  # 在次座標軸上繪製折線圖
  plt.twinx()
  # ls:線的型別,lw:寬度,o:在頂點處實心圈
  plt.plot(x,y3,ls='-',lw=2,color='r',marker='o',label='目標完成率')

  # 設定次座標軸的取值範圍,避免折線圖波動過大
  plt.ylim(0,1.35)

  # 設定圖例
  plt.legend()

  # 定義顯示百分號的函式
  def to_percent(number,position=0):
    return '%.f' % (number * 100) + '%'

  # 次座標軸的標籤顯示百分號 FuncFormatter:自定義格式函式包
  from matplotlib.ticker import FuncFormatter
  plt.gca().yaxis.set_major_formatter(FuncFormatter(to_percent))

  # 設定標題
  plt.title('\n每月銷售目標達成情況\n',fontsize=36,loc='center',color = 'k')
  plt.show()



def plot_combination2():
  """
  第二種方式:是⽤兩條不同顏⾊的折線,分別展示每個⽉的實際銷售額和⽬標銷售額,再⽤兩種不同顏
  ⾊的柱形圖展示實際與⽬標的差額,綠⾊代表完成⽬標,紅⾊代表沒有完成⽬標,
  這種組合圖不需要⽤到兩個縱座標軸,
  """
  import pandas as pd
  import numpy as np
  import matplotlib.pyplot as plt

  # 設定正常顯示中⽂標籤
  plt.rcParams['font.sans-serif'] = ['SimHei']

  # 正常顯示負號
  plt.rcParams['axes.unicode_minus'] = False

  # 設定字型⼤⼩
  plt.rcParams.update({'font.size': 16})

  # 從 Excel ⽂件中讀取資料,第⼀列設定為索引
  sale = pd.read_excel('./data/每月目標銷售額和實際銷售額.xlsx',index_col=0)
  # 提取資料
  # print('index')
  x = sale.index # Index(['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'],dtype='object',name='month')
  # print(x)
  y1 = sale.目標銷售額
  y2 = sale.實際銷售額
  # 計算差額
  y3 = y2 - y1
  # 繪製折線圖
  plt.figure(figsize=(16,8))
  plt.subplot(111)
  plt.plot(x,label='目標銷售額')
  plt.plot(x,ls='--',label='實際銷售額')
  # ⽤列表推導式定義柱⼦的顏⾊,綠⾊代表完成⽬標, 紅⾊代表沒有完成⽬標
  color = ['g' if i > 0 else '#dc5034' for i in y3]

  # 繪製柱形圖
  plt.bar(x,color=color,label='差額')
  # 設定圖例
  plt.legend(loc='upper left')
  # 設定標題
  title = '\n每月銷售目標達成情況\n'
  plt.title(title,color='k')
  plt.show()

if __name__ == '__main__':
  plot_combination1()
  plot_combination2()

繪製結果:

第一種

Python繪製組合圖的示例

第二種:

Python繪製組合圖的示例

參考書目:

資料化分析 Python 實戰 - 林驥

以上就是Python繪製組合圖的示例的詳細內容,更多關於Python繪製組合圖的資料請關注我們其它相關文章!