Python|Matplotlib - 柱状图、直方图、条形图 bar() & barh() 所有用法详解

目录
基本用法
多个直方图并列显示
【Python|Matplotlib - 柱状图、直方图、条形图 bar() & barh() 所有用法详解】显示直方图上的数值
多个直方图堆叠显示
水平直方图
相较散点图和折线图,柱状图(直方图、条形图)、饼图、箱线图是另外 3 种数据分析常用的图形,主要用于分析数据内部的分布状态或分散状态。
柱状图(直方图、条形图)主要用于查看各分组数据的数量分布,以及各个分组数据之间的数量比较。
Matplotlib 中绘制柱状图(直方图、条形图)的函数为 bar() ,使用语法如下:
atplotlib.pyplot.bar(left, height, width=0.8, bottom=None, hold=None, data=https://www.it610.com/article/None, **kwargs)
常用参数及说明:

参数 接收值 说明 默认值
left array x 轴;
height array 柱形图的高度,也就是y轴的数值;
alpha 数值 柱形图的颜色透明度 ; 1
width 数值 柱形图的宽度; 0.8
color(facecolor) string 柱形图填充的颜色; 随机色
edgecolor string 图形边缘颜色 None
label string 解释每个图像代表的含义
linewidth(linewidths / lw) 数值 边缘or线的宽度 1
bar() 其他参数请参考文档:https://matplotlib.org/api/pyplot_api.html
基本用法
import pandas as pd import matplotlib.pyplot as plt#读取数据 datafile = u'D:\\pythondata\\learn\\matplotlib.xlsx' data = https://www.it610.com/article/pd.read_excel(datafile)plt.figure(figsize=(10,5))#设置画布的尺寸 plt.title('Examples of Histogram',fontsize=20)#标题,并设定字号大小 plt.xlabel(u'x-year',fontsize=14)#设置x轴,并设定字号大小 plt.ylabel(u'y-income',fontsize=14)#设置y轴,并设定字号大小#alpha:透明度;width:柱子的宽度;facecolor:柱子填充色;edgecolor:柱子轮廓色;lw:柱子轮廓的宽度;label:图例; plt.bar(data['时间'],data['收入_Jay'], alpha=0.6,width = 0.8,facecolor = 'deeppink', edgecolor = 'darkblue', lw=1, label='Jay income')plt.legend(loc=2)#图例展示位置,数字代表第几象限 plt.show()#显示图像

Python|Matplotlib - 柱状图、直方图、条形图 bar() & barh() 所有用法详解
文章图片

多个直方图并列显示
通过bar() 中的width 参数来调节:
import pandas as pd import matplotlib.pyplot as plt#读取数据 datafile = u'D:\\pythondata\\learn\\matplotlib.xlsx' data = https://www.it610.com/article/pd.read_excel(datafile)plt.figure(figsize=(10,5))#设置画布的尺寸 plt.title('Examples of Histogram',fontsize=20)#标题,并设定字号大小 plt.xlabel(u'x-year',fontsize=14)#设置x轴,并设定字号大小 plt.ylabel(u'y-income',fontsize=14)#设置y轴,并设定字号大小width_val = 0.4 #若显示 n 个柱状图,则width_val的值需小于1/n ,否则柱形图会有重合#alpha:透明度;width:柱子的宽度;facecolor:柱子填充色;edgecolor:柱子轮廓色;lw:柱子轮廓的宽度;label:图例; plt.bar(data['时间'],data['收入_Jay'], alpha=0.6,width = width_val,facecolor = 'deeppink', edgecolor = 'deeppink', lw=1, label='Jay income') plt.bar(data['时间']+width_val,data['收入_JJ'], alpha=0.6,width = width_val,facecolor = 'darkblue', edgecolor = 'darkblue', lw=1, label='JJ income')plt.legend(loc=2)#图例展示位置,数字代表第几象限 plt.show()#显示图像

Python|Matplotlib - 柱状图、直方图、条形图 bar() & barh() 所有用法详解
文章图片

显示直方图上的数值
import pandas as pd import matplotlib.pyplot as plt#读取数据 datafile = u'D:\\pythondata\\learn\\matplotlib.xlsx' data = https://www.it610.com/article/pd.read_excel(datafile)plt.figure(figsize=(10,5))#设置画布的尺寸 plt.title('Examples of Histogram',fontsize=20)#标题,并设定字号大小 plt.xlabel(u'x-year',fontsize=14)#设置x轴,并设定字号大小 plt.ylabel(u'y-income',fontsize=14)#设置y轴,并设定字号大小width_val = 0.4 #若显示 n 个柱状图,则width_val的值需小于1/n ,否则柱形图会有重合 #alpha:透明度;width:柱子的宽度;facecolor:柱子填充色;edgecolor:柱子轮廓色;lw:柱子轮廓的宽度;label:图例; rects_Jay = plt.bar(data['时间'],data['收入_Jay'], alpha=0.6,width = width_val, facecolor = 'deeppink', label='Jay income') rects_JJ = plt.bar(data['时间']+width_val,data['收入_JJ'], alpha=0.6,width = width_val, facecolor = 'darkblue',label='JJ income')# 添加数据标签 就是矩形上面的数值 def add_labels(rects): for rect in rects: height = rect.get_height() plt.text(rect.get_x() + rect.get_width()/2, height, height, ha='center', va='bottom') rect.set_edgecolor('white')add_labels(rects_Jay) add_labels(rects_JJ)plt.legend(loc=2)#图例展示位置,数字代表第几象限 plt.show()#显示图像

Python|Matplotlib - 柱状图、直方图、条形图 bar() & barh() 所有用法详解
文章图片

多个直方图堆叠显示
通过bar() 中的bottom 参数来调节:
import pandas as pd import matplotlib.pyplot as plt#读取数据 datafile = u'D:\\pythondata\\learn\\matplotlib.xlsx' data = https://www.it610.com/article/pd.read_excel(datafile)plt.figure(figsize=(10,5))#设置画布的尺寸 plt.title('Examples of Histogram',fontsize=20)#标题,并设定字号大小 plt.xlabel(u'x-year',fontsize=14)#设置x轴,并设定字号大小 plt.ylabel(u'y-income',fontsize=14)#设置y轴,并设定字号大小#通过bottom使得两个柱状图堆叠显示,且没有交叉 #alpha:透明度;width:柱子的宽度;facecolor:柱子填充色;edgecolor:柱子轮廓色;lw:柱子轮廓的宽度;label:图例; plt.bar(data['时间'],data['收入_Jay'], alpha=0.6,width = width_val,facecolor = 'deeppink', edgecolor = 'deeppink', lw=1, label='Jay income') plt.bar(data['时间'],data['收入_JJ'], bottom=data['收入_Jay'], alpha=0.6,width = width_val,facecolor = 'darkblue', edgecolor = 'darkblue', lw=1, label='JJ income')plt.legend(loc=2)#图例展示位置,数字代表第几象限 plt.show()#显示图像

Python|Matplotlib - 柱状图、直方图、条形图 bar() & barh() 所有用法详解
文章图片

水平直方图
通过 barh() 函数实现,与 bar() 函数的主要区别是:在 bar() 函数中,width 这一参数代表的是柱子的宽度(胖瘦),而在 barh() 函数中 width 这一参数代表的是横向柱子的长度(长短),在下面代码中,width = data['收入_Jay']。
Matplotlib 中绘制水平柱状图(直方图、条形图)的函数为 barh() ,使用语法如下:
matplotlib.pyplot.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
参数请参考文档:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.barh.html?highlight=barh#matplotlib.pyplot.barh
import pandas as pd import matplotlib.pyplot as plt#读取数据 datafile = u'D:\\pythondata\\learn\\matplotlib.xlsx' data = https://www.it610.com/article/pd.read_excel(datafile)plt.figure(figsize=(10,5))#设置画布的尺寸 plt.title('Examples of Histogram',fontsize=20)#标题,并设定字号大小 plt.xlabel(u'x-year',fontsize=14)#设置x轴,并设定字号大小 plt.ylabel(u'y-income',fontsize=14)#设置y轴,并设定字号大小#alpha:透明度;facecolor:柱子填充色;edgecolor:柱子轮廓色;lw:柱子轮廓的宽度;label:图例; plt.barh(data['时间'],data['收入_Jay'], alpha=0.6, facecolor = 'deeppink', edgecolor = 'deeppink', label='Jay income')plt.legend(loc=4)#图例展示位置,数字代表第几象限 plt.show()#显示图像

Python|Matplotlib - 柱状图、直方图、条形图 bar() & barh() 所有用法详解
文章图片


如果还有直方图的其他花样,欢迎留言,我们一起探讨。

    推荐阅读