32、python繪製柱形圖、單個、多個、堆積、雙向柱形圖
阿新 • • 發佈:2018-12-07
目錄
柱形圖:一種長方形的單位長度,根據資料大小回繪製的統計圖,用來比較兩個或以上的資料(時間或類別)
一、繪圖函式
bar(left,right,width,color,bottom)
barh(bottom,width,height,color)
引數說明:
left:x軸的位置序列(一般用arrange產生一個序列)
height:y軸的資料序列
width:柱形圖的寬度
color:柱形圖填充顏色
bar(left, height, width=0.8, bottom=None, hold=None, **kwargs)
# 繪製柱形圖
# left:柱形圖的x座標
# height柱形圖的高度,以0.0為基準
# width:柱形圖的寬度,預設0.8
# facecolor:顏色
# edgecolor:邊框顏色n
# bottom:表示底部從y軸的哪個刻度開始畫
# yerr:應該是對應的資料的誤差範圍,加上這個引數,柱狀圖頭部會有一個藍色的範圍標識,標出允許的誤差範圍,在水平柱狀圖中這個引數為xerr
二、案例
第一、單個柱形圖
import pandas import numpy import matplotlib import matplotlib.pyplot as plt import matplotlib.font_manager as font_manager # %matplotlib qt # 設定不在互動命令列繪圖,在彈出新的視窗進行繪圖 data=pandas.read_csv( 'D:\\DATA\\pycase\\6.3\\data.csv' ) # 根據通訊品牌進行分組,去掉索引 result=data.groupby( by=['手機品牌'], as_index=False )['月消費(元)'].agg({ '月消費':numpy.sum }) # 字型設定 fontprop=font_manager.FontProperties( fname='C:\\windows\\Fonts\\msyh.ttF' ) font={ 'family':fontprop.get_name(), 'size':10 } matplotlib.rc('font',**font) # 繪製柱狀圖 # 定義柱狀圖的序列,從資料框中用size函式獲取 index=numpy.arange( result.月消費.size ) plt.bar(index,result['月消費']) # 優化點1,配置顏色 maincolor=(1,0,0,1) plt.bar( index, result['月消費'], color=maincolor ) # 配置x周刻度 plt.xticks(index,result.手機品牌) # 優化點 3,對資料排序後再進行繪圖 sgb=result.sort_values( by='月消費', ascending=False ) plt.bar( index, sgb.月消費, color=maincolor ) plt.xticks(index,sgb.手機品牌) # 橫向柱形圖 plt.barh( index, sgb.月消費, color=(0,0,1,1) ) plt.yticks(index,sgb.手機品牌)
第二個、多個柱形圖
import pandas import numpy import matplotlib import matplotlib.pyplot as plt import matplotlib.font_manager as font_manager # %matplotlib qt # 設定不在互動命令列繪圖,在彈出新的視窗進行繪圖 data=pandas.read_csv( 'D:\\DATA\\pycase\\6.3\\data.csv' ) # 根據通訊品牌進行分組,去掉索引 result=data.pivot_table( values='月消費(元)', index='手機品牌', columns='通訊品牌', aggfunc=numpy.sum ) # 字型設定 fontprop=font_manager.FontProperties( fname='C:\\windows\\Fonts\\msyh.ttF' ) font={ 'family':fontprop.get_name(), 'size':10 } matplotlib.rc('font',**font) # 繪製柱狀圖 # 定義柱狀圖的序列,從資料框中用size函式獲取 index=numpy.arange(len(result)) # 多種顏色區分 minColor=(0.2,0.4,0.7,0.3) midColor=(0.2,0.4,0.7,0.6) maxColor=(0.2,0.4,0.7,0.9) # 對資料框中的內容進行排序 result=result.sort_values( by="神州行", ascending=False ) # 繪製多維陣列條形圖,把陣列排列放好,即為多為條形圖 # 通過INdex和width,進行設定柱形圖的橫座標 plt.bar( index, result['神州行'], color=minColor, width=1/4 ) plt.bar( index+1/4, result['動感地帶'], color=midColor, width=1/4 ) plt.bar( index+2/4, result['全球通'], color=maxColor, width=1/4 ) # 設定x座標軸以及標籤 plt.xticks(index+1/3,result.index) # 標註類別標籤,順序對應,上邊的顏色表示 plt.legend(['全球通','動感地帶','神州行'])
第三、堆積柱形圖
import pandas
import numpy
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
# %matplotlib qt
# 設定不在互動命令列繪圖,在彈出新的視窗進行繪圖
data=pandas.read_csv(
'D:\\DATA\\pycase\\6.3\\data.csv'
)
# 根據通訊品牌進行分組,去掉索引
result=data.pivot_table(
values='月消費(元)',
index='手機品牌',
columns='通訊品牌',
aggfunc=numpy.sum
)
# 字型設定
fontprop=font_manager.FontProperties(
fname='C:\\windows\\Fonts\\msyh.ttF' )
font={
'family':fontprop.get_name(),
'size':10
}
matplotlib.rc('font',**font)
# 繪製柱狀圖
# 定義柱狀圖的序列,從資料框中用size函式獲取
index=numpy.arange(len(result))
# 多種顏色區分
minColor=(0,0,0.7,1)
midColor=(0.7,0,0,1)
maxColor=(0,0.7,0,1)
# 對資料框中的內容進行排序
result=result.sort_values(
by="神州行",
ascending=False
)
# 使用排列的方式,把資料堆疊放好
plt.bar(
index,
result['神州行'],
bottom=0,
color=maxColor
)
plt.bar(
index,
result['動感地帶'],
bottom=result['神州行'],
color=midColor
)
plt.bar(
index,
result['全球通'],
bottom=result['動感地帶']+result['神州行'],
color=minColor
)
# 設定x座標軸以及標籤
plt.xticks(index+1/3,result.index)
# 標註類別標籤,順序對應,上邊的顏色表示
plt.legend(['全球通','動感地帶','神州行'])
第四、雙向柱形圖
# -*- coding: utf-8 -*-
"""
Created on Tue Nov 6 17:49:00 2018
@author: admin
"""
import pandas
import numpy
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
# %matplotlib qt
# 設定不在互動命令列繪圖,在彈出新的視窗進行繪圖
data=pandas.read_csv(
'D:\\DATA\\pycase\\6.3\\data.csv'
)
# 根據通訊品牌進行分組,去掉索引
result=data.pivot_table(
values='月消費(元)',
index='手機品牌',
columns='通訊品牌',
aggfunc=numpy.sum
)
# 字型設定
fontprop=font_manager.FontProperties(
fname='C:\\windows\\Fonts\\msyh.ttF' )
font={
'family':fontprop.get_name(),
'size':10
}
matplotlib.rc('font',**font)
# 繪製柱狀圖
# 定義柱狀圖的序列,從資料框中用size函式獲取
index=numpy.arange(len(result))
# 多種顏色區分
minColor=(0,0,0.7,1)
midColor=(0.7,0,0,1)
maxColor=(0,0.7,0,1)
# 對資料框中的內容進行排序
result=result.sort_values(
by="神州行",
ascending=False
)
# 使用排列的方式,barh設定雙向柱形圖
plt.barh(
index,
result['動感地帶'],
color=minColor
)
plt.barh(
index,
-result['神州行'],
color=maxColor
)
# 設定x座標軸以及標籤
plt.yticks(index,result.index)
# 標註類別標籤,順序對應,上邊的顏色表示
plt.legend(['全球通','動感地帶','神州行'])