Python繪制組合圖的示例
繪制組合圖:
組合圖就是將多個形狀,組合到⼀個圖形中,主要作⽤是節(jié)約作圖的空間,節(jié)省讀者的時間,從⽽提⾼
信息傳達的效率。
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)
# 設(shè)置正常顯示中文標簽
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正常顯示負號
plt.rcParams['axes.unicode_minus'] = False
# 設(shè)置字體大小
plt.rcParams.update({'font.size':16})
# 提取數(shù)據(jù)
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
"""
第一種方式:是⽤兩個不同顏⾊的柱⼦,分別展示每個⽉的實際銷售額和⽬標銷售額,
⽤折線圖展示⽬標完成率。
左邊的主坐標軸是柱形圖對應(yīng)的數(shù)據(jù),右邊的次坐標軸是折線圖對應(yīng)的
數(shù)據(jù),下邊的橫坐標軸表示細分的維度,⽐如時間、地區(qū)、渠道等。
"""
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,bar_width,label='實際銷售額')
# 設(shè)置坐標軸的取值范圍,避免柱子過高而與圖例重疊
plt.ylim(0,max(y1.max(),y2.max())*1.2)
# 設(shè)置圖例
plt.legend(loc='upper left')
# 設(shè)置橫坐標的標簽
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='目標完成率')
# 設(shè)置次坐標軸的取值范圍,避免折線圖波動過大
plt.ylim(0,1.35)
# 設(shè)置圖例
plt.legend()
# 定義顯示百分號的函數(shù)
def to_percent(number, position=0):
return '%.f' % (number * 100) + '%'
# 次坐標軸的標簽顯示百分號 FuncFormatter:自定義格式函數(shù)包
from matplotlib.ticker import FuncFormatter
plt.gca().yaxis.set_major_formatter(FuncFormatter(to_percent))
# 設(shè)置標題
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
# 設(shè)置正常顯示中⽂標簽
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正常顯示負號
plt.rcParams['axes.unicode_minus'] = False
# 設(shè)置字體⼤⼩
plt.rcParams.update({'font.size': 16})
# 從 Excel ⽂件中讀取數(shù)據(jù),第⼀列設(shè)置為索引
sale = pd.read_excel('./data/每月目標銷售額和實際銷售額.xlsx', index_col=0)
# 提取數(shù)據(jù)
# 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, y1, ls='-', lw=2, label='目標銷售額')
plt.plot(x, y2, ls='--', lw=2, label='實際銷售額')
# ⽤列表推導(dǎo)式定義柱⼦的顏⾊,綠⾊代表完成⽬標, 紅⾊代表沒有完成⽬標
color = ['g' if i > 0 else '#dc5034' for i in y3]
# 繪制柱形圖
plt.bar(x, y3, color=color, label='差額')
# 設(shè)置圖例
plt.legend(loc='upper left')
# 設(shè)置標題
title = '\n每月銷售目標達成情況\n'
plt.title(title, fontsize=36, loc='center', color='k')
plt.show()
if __name__ == '__main__':
plot_combination1()
plot_combination2()
繪制結(jié)果:
第一種

第二種:

參考書目:
數(shù)據(jù)化分析 Python 實戰(zhàn) - 林驥
以上就是Python繪制組合圖的示例的詳細內(nèi)容,更多關(guān)于Python繪制組合圖的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python機器學(xué)習(xí)理論與實戰(zhàn)(一)K近鄰法
這篇文章主要為大家詳細介紹了python機器學(xué)習(xí)理論與實戰(zhàn)第一篇,K近鄰法的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
Python+Django搭建自己的blog網(wǎng)站
一直有種想要搭建自己博客系統(tǒng)打沖動,可惜需要前端知識較多,而且還要安裝一系列軟件并配置(windows平臺),后來偶然發(fā)現(xiàn)了Django這個神器,恰巧剛學(xué)過python,于是就又裝了ubuntu(安裝各種軟件配置都方便),折騰了半天,終于搭建起來自己的第一個簡易博客。2018-03-03
tensorflow實現(xiàn)加載mnist數(shù)據(jù)集
這篇文章主要為大家詳細介紹了tensorflow實現(xiàn)加載mnist數(shù)據(jù)集,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-09
Python數(shù)據(jù)正態(tài)性檢驗實現(xiàn)過程
這篇文章主要介紹了Python數(shù)據(jù)正態(tài)性檢驗實現(xiàn)過程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04
Python2.6版本中實現(xiàn)字典推導(dǎo) PEP 274(Dict Comprehensions)
這篇文章主要介紹了Python2.6版本中實現(xiàn)字典推導(dǎo) PEP 274(Dict Comprehensions),本文給出了表達式寫法和for循環(huán)寫法兩種方法實現(xiàn)字符推導(dǎo),需要的朋友可以參考下2015-04-04

