第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > Python 数据分析三剑客之 Matplotlib(六):直方图 / 柱状图 / 条形图的绘制

Python 数据分析三剑客之 Matplotlib(六):直方图 / 柱状图 / 条形图的绘制

时间:2021-10-02 12:57:21

相关推荐

Python 数据分析三剑客之 Matplotlib(六):直方图 / 柱状图 / 条形图的绘制

CSDN 课程推荐:《Python 数据分析与挖掘》,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个企业级项目。

Matplotlib 系列文章:

Python 数据分析三剑客之 Matplotlib(一):初识 Matplotlib 与其 matplotibrc 配置文件Python 数据分析三剑客之 Matplotlib(二):文本描述 / 中文支持 / 画布 / 网格等基本图像属性Python 数据分析三剑客之 Matplotlib(三):图例 / LaTeX / 刻度 / 子图 / 补丁等基本图像属性Python 数据分析三剑客之 Matplotlib(四):线性图的绘制Python 数据分析三剑客之 Matplotlib(五):散点图的绘制Python 数据分析三剑客之 Matplotlib(六):直方图 / 柱状图 / 条形图的绘制Python 数据分析三剑客之 Matplotlib(七):饼状图的绘制Python 数据分析三剑客之 Matplotlib(八):等高线 / 等值线图的绘制Python 数据分析三剑客之 Matplotlib(九):极区图 / 极坐标图 / 雷达图的绘制Python 数据分析三剑客之 Matplotlib(十):3D 图的绘制Python 数据分析三剑客之 Matplotlib(十一):最热门最常用的 50 个图表【译文】

另有 NumPy、Pandas 系列文章已更新完毕,欢迎关注:

NumPy 系列文章:https://itrhx./category_9780393.htmlPandas 系列文章:https://itrhx./category_9780397.html

推荐学习资料与网站(博主参与部分文档翻译):

NumPy 官方中文网:.cn/Pandas 官方中文网:/Matplotlib 官方中文网:.cn/NumPy、Matplotlib、Pandas 速查表:/TRHX/Python-quick-reference-table

文章目录

【1x00】直方图 / 柱状图 / 条形图的区别【2x00】直方图的绘制【2x01】函数介绍 matplotlib.pyplot.hist()【2x02】简单直方图示例【2x03】堆积的直方图【2x04】填充其他样式【3x00】柱状图的绘制【3x01】函数介绍 matplotlib.pyplot.bar()【3x02】简单柱状图示例【3x03】添加与标准差的误差线【3x04】多序列柱状图【3x05】堆积的柱状图【3x06】填充其他样式【3x07】添加文字描述【4x00】条形图的绘制【4x01】函数介绍 matplotlib.pyplot.barh()【4x02】简单条形图示例【4x03】添加与标准差的误差线【4x04】多序列条形图【4x05】堆积的条形图【4x06】填充其他样式【4x07】添加文字描述

这里是一段防爬虫文本,请读者忽略。首发于 CSDN,作者 TRHX。博客首页:https://itrhx./本文链接:https://itrhx./article/details/105952856未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!

【1x00】直方图 / 柱状图 / 条形图的区别

直方图:直方图(Histogram)又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。一般用于描述连续型数据的分布关系,用横轴表示数据类型,纵轴表示分布情况。直方图是用面积表示各组频数的多少,矩形的高度表示每一组的频数或频率,宽度则表示各组的组距,因此其高度与宽度均有意义。其次,由于分组数据具有连续性,直方图的各矩形通常是连续排列。

柱状图:柱状图(bar chart)又称条图、长条图、柱状统计图、条状图、棒形图,是一种以长方形的长度为变量的统计图表。一般用于描述离散型分类数据的对比,长条图用来比较两个或以上的价值(不同时间或者不同条件),只有一个变量,通常利用于较小的数据集分析。柱状图亦可横向排列,或用多维方式表达。柱状图各矩形的宽度固定,矩形之间分开排列,会有间距。

条形图:通常情况下条形图 = 柱状图,也可以将横向排列的柱状图称为条形图。在本文中会将条形图视为后者。

【2x00】直方图的绘制

【2x01】函数介绍 matplotlib.pyplot.hist()

matplotlib.pyplot.hist()函数用于绘制直方图。

基本语法:matplotlib.pyplot.hist(x[, bins=None, range=None, density=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, \*\*kwargs])

基本参数:

其他参数:

【2x02】简单直方图示例

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 设置中文显示x = np.random.randint(0, 101, 100) # 数据集bins = np.arange(0, 101, 10) # 分布区间 [0,10)、[10,20)...[90,100]plt.hist(x, bins=bins, linewidth=0.5, edgecolor='k') # 边缘线宽0.5,颜色为黑色plt.xlim(0, 100)# x 轴刻度范围 plt.title('简单直方图示例') # 标题plt.xlabel('x axis label') # x 轴标签plt.ylabel('y axis label') # y 轴标签plt.show()

【2x03】堆积的直方图

参数stacked决定了将两份数据进行堆积显示。注意,有可能两个数据相似(y 轴的值相似),但是堆积在一起的时候,会把第一个数据的显示相对缩小一点。

import matplotlib.pyplot as pltimport numpy as npplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']hist1 = np.random.randint(0, 100, 100)hist2 = np.random.randint(0, 100, 100)x = [hist1, hist2]colors = ['orchid', 'deepskyblue']labels = ['hist1', 'hist2']bins = range(0, 101, 10)# 绘制两份数据的直方图,数据集等其他参数可以使用列表形式传递,也可以使用两次 hist 函数单独传递plt.hist(x, bins=bins, color=colors, stacked=True, label=labels)plt.title('堆积的直方图示例')plt.xlabel('x axis label')plt.ylabel('y axis label')plt.legend(loc="upper left")plt.show()

【2x04】填充其他样式

hatch参数可以让直方图的矩形填充其他样式,可选值有:'/','\','|','-','+','x','o','O','.','*'。可以是不同图案的组合形式,如果有相同的图案,则会增加填充的密度。

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 设置中文显示x = np.random.randint(0, 101, 100) # 数据集bins = np.arange(0, 101, 10) # 分布区间 [0,10)、[10,20)...[90,100]# 矩形颜色为白色,使用 / 填充,边缘线宽0.5,颜色为黑色plt.hist(x, bins=bins, color='w', hatch='///', linewidth=0.5, edgecolor='k')plt.xlim(0, 100) # x 轴刻度范围plt.title('直方图图案填充示例')# 标题plt.xlabel('x axis label') # x 轴标签plt.ylabel('y axis label') # y 轴标签plt.show()

【3x00】柱状图的绘制

【3x01】函数介绍 matplotlib.pyplot.bar()

matplotlib.pyplot.bar()函数用于绘制柱状图。

基本语法:matplotlib.pyplot.bar(x, height[, width=0.8, bottom=None, align='center', \*\*kwargs])

基本参数:

其他参数:

【3x02】简单柱状图示例

import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']x = [1, 2, 3, 4, 5]height = [5, 7, 4, 3, 1]# 设置 x 轴的标签,也可以用 plt.xticks 方法来设置tick_label = ['A', 'B', 'C', 'D', 'E']# 设置颜色序列color = ['red', 'yellow', 'peru', 'orchid', 'deepskyblue']# 绘制柱状图,边缘线宽度为1,颜色为黑色,样式为 --plt.bar(x, height, tick_label=tick_label, color=color, edgecolor='k', linewidth=1, linestyle='--')plt.title('简单柱状图示例')plt.xlabel('x axis label')plt.ylabel('y axis label')plt.show()

【3x03】添加与标准差的误差线

首先定义一个列表,其中的元素是与每个值对应的标准差,ecolorcapsize参数分别指定误差线的颜色和两头横线的宽度。这两个参数可以通过error_kw字典形式组合起来。以字典形式的组合优先级别要比单独指定高。另外,柱状图指定标准差时要用yerr,条形图(横向排列的柱状图)指定标准差时要用xerr

import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']x = [1, 2, 3, 4, 5]height = [5, 7, 4, 3, 2]std = [0.5, 0.1, 1.2, 0.3, 1.0] # 标准差tick_label = ['A', 'B', 'C', 'D', 'E'] # 设置 x 轴的标签,也可以用 plt.xticks 方法来设置color = ['red', 'yellow', 'peru', 'orchid', 'deepskyblue'] # 设置颜色序列plt.bar(x,height,tick_label=tick_label,color=color,yerr=std, # 指定对应标准差# error_kw={#'ecolor': 'k', # 指定误差线的颜色#'capsize': 6# 指定误差线两头横线的宽度# },ecolor='k',capsize=6,edgecolor='k', # 指定边缘线颜色linewidth=1 # 指定边缘线宽度)plt.title('柱状图添加误差线示例')plt.xlabel('x axis label')plt.ylabel('y axis label')plt.show()

【3x04】多序列柱状图

在绘制多序列的柱状图时,只需要多次调用matplotlib.pyplot.bar()函数即可,指定一个较小的宽度值(偏移量),绘制不同数据时设置不同的 x 位置刻度即可。

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']x = np.arange(5)height1 = np.array([5, 7, 4, 3, 2])height2 = np.array([2, 4, 6, 7, 3])height3 = np.array([3, 1, 7, 5, 2])# 设置宽度值(偏移量)width = 0.3# 绘制不同数据时,x 轴依次增加一个偏移量plt.bar(x, height1, width, label='bar1')plt.bar(x + width, height2, width, label='bar2')plt.bar(x + width * 2, height3, width, label='bar3')# 设置 x 轴刻度的标签plt.xticks(x + width, ['A', 'B', 'C', 'D', 'E'])plt.title('多序列柱状图示例')plt.xlabel('x axis label')plt.ylabel('y axis label')plt.legend()plt.show()

【3x05】堆积的柱状图

所谓堆积图,就是将多序列数据堆积到一个矩形上显示,在柱状图中要实现堆积图,只需要改变bottom参数即可,bottom参数用于设置 y 轴基线,即柱状图的底边在 y 轴上的起始刻度,第一条数据data1的基线可以设置为 0,即默认值,第二条数据data2的基线可以设置在data1的上方,即bottom=data1,第三条数据data3的基线可以设置在data1 + data2的上方,即bottom=data1+data2,以此类推。

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']x = np.arange(5)height1 = np.array([5, 7, 4, 3, 2])height2 = np.array([2, 4, 6, 7, 3])height3 = np.array([3, 1, 7, 5, 2])plt.bar(x, height1, label='bar1')plt.bar(x, height2, label='bar2', bottom=height1)plt.bar(x, height3, label='bar3', bottom=(height2+height1))plt.xticks(x, ['A', 'B', 'C', 'D', 'E'])plt.title('堆积的柱状图示例')plt.xlabel('x axis label')plt.ylabel('y axis label')plt.legend()plt.show()

【3x06】填充其他样式

hatch参数可以让柱状图的矩形填充其他样式,可选值有:'/','\','|','-','+','x','o','O','.','*'。可以是不同图案的组合形式,如果有相同的图案,则会增加填充的密度。

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']x = np.arange(5)height1 = np.array([5, 7, 4, 3, 2])height2 = np.array([2, 4, 6, 7, 3])height3 = np.array([3, 1, 7, 5, 2])plt.bar(x, height1, label='bar1', color='w', hatch='///')plt.bar(x, height2, label='bar2', bottom=height1, color='w', hatch='xxx')plt.bar(x, height3, label='bar3', bottom=(height2+height1), color='w', hatch='|||')plt.xticks(x, ['A', 'B', 'C', 'D', 'E'])plt.title('柱状图图案填充示例')plt.xlabel('x axis label')plt.ylabel('y axis label')plt.legend()plt.show()

【3x07】添加文字描述

利用matplotlib.pyplot.text()方法可以在柱状图每个矩形上方添加文字描述。具体参数解释可参考前面的文章:《Python 数据分析三剑客之 Matplotlib(二):文本描述 / 中文支持 / 画布 / 网格等基本图像属性》

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']x = np.arange(5)height1 = np.array([5, 7, 4, 3, 2])height2 = np.array([2, 4, 6, 7, 3])height3 = np.array([3, 1, 7, 5, 2])width = 0.3# 绘制不同数据时,x 轴依次增加一个偏移量plt.bar(x, height1, width, label='bar1')plt.bar(x + width, height2, width, label='bar2')plt.bar(x + width * 2, height3, width, label='bar3')# 依次添加每条数据的标签for a, b in zip(x, height1):plt.text(a, b, b, ha='center', va='bottom')for c, d in zip(x, height2):plt.text(c + width, d, d, ha='center', va='bottom')for e, f in zip(x, height3):plt.text(e + width * 2, f, f, ha='center', va='bottom')# 设置 x 轴刻度的标签plt.xticks(x + width, ['A', 'B', 'C', 'D', 'E'])plt.title('柱状图添加文字描述示例')plt.xlabel('x axis label')plt.ylabel('y axis label')plt.legend()plt.show()

这里是一段防爬虫文本,请读者忽略。首发于 CSDN,作者 TRHX。博客首页:https://itrhx./本文链接:https://itrhx./article/details/105952856未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!

【4x00】条形图的绘制

【4x01】函数介绍 matplotlib.pyplot.barh()

matplotlib.pyplot.barh()函数用于绘制条形图(水平排列的柱状图)。

基本语法:matplotlib.pyplot.barh(y, width[, height=0.8, left=None, align='center', color, \*\*kwargs])

其他参数:

【4x02】简单条形图示例

import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']y = [1, 2, 3, 4, 5]width = [5, 7, 4, 3, 1]tick_label = ['A', 'B', 'C', 'D', 'E']color = ['red', 'yellow', 'peru', 'orchid', 'deepskyblue']plt.barh(y, width, tick_label=tick_label, color=color, edgecolor='k', linewidth=1, linestyle='--')plt.title('简单条形图示例')plt.xlabel('x axis label')plt.ylabel('y axis label')plt.show()

【4x03】添加与标准差的误差线

与柱状图一样,首先定义一个列表,其中的元素是与每个值对应的标准差,ecolorcapsize参数分别指定误差线的颜色和两头横线的宽度。这两个参数可以通过error_kw字典形式组合起来。以字典形式的组合优先级别要比单独指定高。另外,柱状图指定标准差时要用yerr,条形图(横向排列的柱状图)指定标准差时要用xerr

import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']y = [1, 2, 3, 4, 5]width = [5, 7, 4, 3, 2]std = [0.5, 0.1, 1.2, 0.3, 1.0] # 标准差tick_label = ['A', 'B', 'C', 'D', 'E'] # 设置 x 轴的标签,也可以用 plt.xticks 方法来设置color = ['red', 'yellow', 'peru', 'orchid', 'deepskyblue'] # 颜色序列plt.barh(y,width,tick_label=tick_label,color=color,xerr=std,# 指定对应标准差# error_kw={#'ecolor': 'k', # 指定误差线的颜色#'capsize': 6# 指定误差线两头横线的宽度# },ecolor='k',capsize=6,edgecolor='k',# 指定边缘线颜色linewidth=1 # 指定边缘线宽度)plt.title('条形图添加误差线示例')plt.xlabel('x axis label')plt.ylabel('y axis label')plt.show()

【4x04】多序列条形图

与多序列柱状图类似,在绘制多序列的条形图时,只需要多次调用matplotlib.pyplot.barh()函数即可,指定一个较小的高度值(偏移量),绘制不同数据时设置不同的 y 位置刻度即可。

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']y = np.arange(5)width1 = np.array([5, 7, 4, 3, 2])width2 = np.array([2, 4, 6, 7, 3])width3 = np.array([3, 1, 7, 5, 2])# 设置高度值(偏移量)height = 0.3# 绘制不同数据时,y 轴依次增加一个偏移量plt.barh(y, width1, height, label='bar1')plt.barh(y + height, width2, height, label='bar2')plt.barh(y + height * 2, width3, height, label='bar3')# 设置 y 轴刻度的标签plt.yticks(y + height, ['A', 'B', 'C', 'D', 'E'])plt.title('多序列条形图示例')plt.xlabel('x axis label')plt.ylabel('y axis label')plt.legend()plt.show()

【4x05】堆积的条形图

堆积图就是将多序列数据堆积到一个矩形上显示,和堆积的柱状图类似,在条形图中要实现堆积图,只需要改变left参数即可,left参数用于设置 x 轴基线,即柱状图的底边在 x 轴上的起始刻度,第一条数据data1的基线可以设置为 0,即默认值,第二条数据data2的基线可以设置在data1的上方,即left=data1,第三条数据data3的基线可以设置在data1 + data2的上方,即left=data1+data2,以此类推。

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']y = np.arange(5)width1 = np.array([5, 7, 4, 3, 2])width2 = np.array([2, 4, 6, 7, 3])width3 = np.array([3, 1, 7, 5, 2])plt.barh(y, width1, label='bar1')plt.barh(y, width2, label='bar2', left=width1)plt.barh(y, width3, label='bar3', left=(width1+width2))plt.yticks(y, ['A', 'B', 'C', 'D', 'E'])plt.title('堆积的条形图示例')plt.xlabel('x axis label')plt.ylabel('y axis label')plt.legend()plt.show()

【4x06】填充其他样式

hatch参数可以让柱状图的矩形填充其他样式,可选值有:'/','\','|','-','+','x','o','O','.','*'。可以是不同图案的组合形式,如果有相同的图案,则会增加填充的密度。

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']y = np.arange(5)width1 = np.array([5, 7, 4, 3, 2])width2 = np.array([2, 4, 6, 7, 3])width3 = np.array([3, 1, 7, 5, 2])plt.barh(y, width1, label='bar1', color='w', hatch='///')plt.barh(y, width2, label='bar2', left=width1, color='w', hatch='xxx')plt.barh(y, width3, label='bar3', left=(width1+width2), color='w', hatch='|||')plt.yticks(y, ['A', 'B', 'C', 'D', 'E'])plt.title('条形图图案填充示例')plt.xlabel('x axis label')plt.ylabel('y axis label')plt.legend()plt.show()

【4x07】添加文字描述

利用matplotlib.pyplot.text()方法可以在条形图每个矩形上方添加文字描述。具体参数解释可参考前面的文章:《Python 数据分析三剑客之 Matplotlib(二):文本描述 / 中文支持 / 画布 / 网格等基本图像属性》

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']y = np.arange(5)width1 = np.array([5, 7, 4, 3, 2])width2 = np.array([2, 4, 6, 7, 3])width3 = np.array([3, 1, 7, 5, 2])height = 0.3# 绘制不同数据时,y 轴依次增加一个偏移量plt.barh(y, width1, height, label='bar1')plt.barh(y + height, width2, height, label='bar2')plt.barh(y + height * 2, width3, height, label='bar3')# 依次添加每条数据的标签for a, b in zip(width1, y):plt.text(a, b-0.05, a)for c, d in zip(width2, y):plt.text(c, d+0.20, c)for e, f in zip(width3, y):plt.text(e, f+0.50, e)# 设置 y 轴刻度的标签plt.yticks(y + height, ['A', 'B', 'C', 'D', 'E'])plt.title('条形图添加文字描述示例')plt.xlabel('x axis label')plt.ylabel('y axis label')plt.legend()plt.show()

这里是一段防爬虫文本,请读者忽略。首发于 CSDN,作者 TRHX。博客首页:https://itrhx./本文链接:https://itrhx./article/details/105952856未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。