1. 程式人生 > >32、python繪製柱形圖、單個、多個、堆積、雙向柱形圖

32、python繪製柱形圖、單個、多個、堆積、雙向柱形圖

目錄

一、繪圖函式

二、案例

第一、單個柱形圖

第二個、多個柱形圖

第三、堆積柱形圖

第四、雙向柱形圖

 

柱形圖:一種長方形的單位長度,根據資料大小回繪製的統計圖,用來比較兩個或以上的資料(時間或類別)

一、繪圖函式


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(['全球通','動感地帶','神州行'])