↑↑点击上方蓝字,回复资料,嘿嘿,10个G的惊喜

柱状图和直方图是两种非常类似的统计图,区别在于:

  • 直方图展示数据的分布,柱状图比较数据的大小。

  • 直方图X轴为定量数据,柱状图X轴为分类数据。因此,直方图上的每个条形都是不可移动的,X轴上的区间是连续的、固定的。而柱状图上的每个条形是可以随意排序的,有的情况下需要按照分类数据的名称排列,有的则需要按照数值的大小排列。

  • 直方图柱子无间隔,柱状图条形有间隔

  • 直方图条形宽度可不一,柱状图条形宽度须一致。柱状图条形的宽度因为没有数值含义,所以宽度必须一致。但是在直方图中,条形的宽度代表了区间的长度,根据区间的不同,条形的宽度可以不同,但理论上应为单位长度的倍数。

本文将介绍matplotlib中柱状图和直方图的作图方法。

from matplotlib import pyplot as pltimport numpy as npimport matplotlib as mplmpl.rcParams['font.sans-serif'] = ['SimHei']  # 中文字体支持

1 bar()与barh()

matplotlib中提供了bar()和barh()两种方法画柱状图,bar()用来画垂直柱状图,barh()画水平柱状图,两者参数大同小异,如下所示:


2 垂直柱状图与水平柱状图

value= np.arange(6) ** 2category = range(len(value))

fig = plt.figure(figsize=(8, 4))

# 垂直柱状图ax1 = fig.add_subplot(121)ax1.set_title('图1 垂直柱状图')ax1.bar(x=category, height=value)

# 垂直柱状图ax2 = fig.add_subplot(122)ax2.set_title('图2 水平柱状图')ax2.barh(y=category, width=value)  # 注意这里参数名和值的传递与bar()不同

plt.show()

3 颜色、透明度与边框

value= np.arange(6) ** 2category = range(len(value))

fig = plt.figure(figsize=(8, 4))

# 垂直柱状图ax1 = fig.add_subplot(121)ax1.set_title('图1 垂直柱状图')ax1.bar(x=category, height=value,         alpha=0.5,  # 透明度        width=0.5,   # 每个条形的宽度        color='yellow',  # 填充前景色        edgecolor='red',  # 边框颜色        linewidth=3  # 边框宽度       )

# 垂直柱状图ax2 = fig.add_subplot(122)ax2.set_title('图2 水平柱状图')ax2.barh(y=category, width=value,         alpha=1,  # 透明度         height=0.8,   # 每个条形的宽度        color=['green', 'red', 'yellow', 'blue', 'grey', 'magenta'],  # 填充前景色         linewidth=3  # 不显示边框       )

plt.show()

4 刻度标签

value= np.arange(6) ** 2category = range(len(value))

fig = plt.figure(figsize=(8, 4))

# 垂直柱状图ax1 = fig.add_subplot(121)ax1.set_title('图1 垂直柱状图')ax1.bar(x=category, height=value,         tick_label='类别'       )

# 垂直柱状图ax2 = fig.add_subplot(122)ax2.set_title('图2 水平柱状图')ax2.barh(y=category, width=value,         tick_label=['类1', '类2', '类3', '类4', '类5', '类6']       )

plt.show()

5 添加误差线

means = (20, 35, 30, 35, 27)  # 各组平均分std = (2, 3, 4, 1, 2)  # 组各标准差label = ('第一组', '第二组', '第三种', '第四组', '第五组')bar_width = 0.4bar_x = np.arange(len(label)) 

fig = plt.figure(figsize=(8, 4))

ax1 = fig.add_subplot(121)bar1 = ax1.bar(x=bar_x, height=means, width=bar_width, color='green',              yerr=std,  # 添加误差线              ecolor='red',  # 误差线颜色              capsize=5,  # 两端线段长短               tick_label=label             )

ax2 = fig.add_subplot(122)bar2 = ax2.barh(y=bar_x, width=means, height=bar_width, color='green',              xerr=std,  # 添加误差线              ecolor='red',  # 误差线颜色              capsize=5,  # 两端线段长短              tick_label=label             )

plt.show()

6 添加数据标注

means = (20, 35, 30, 35, 27)  # 各组平均分std = (2, 3, 4, 1, 2)  # 组各标准差label = ('第一组', '第二组', '第三种', '第四组', '第五组')bar_width = 0.5bar_x = np.arange(len(label)) 

fig = plt.figure(figsize=(10, 4),tight_layout=True)

ax1 = fig.add_subplot(121)bar1 = ax1.bar(x=bar_x, height=means, width=bar_width, color='green', tick_label=label             )for b in bar1:        height = b.get_height()        ax1.annotate('{}'.format(height),                    xy=(b.get_x() + b.get_width() / 2, height),                    xytext=(0, 3),  # 3 points vertical offset                    textcoords="offset points",color='red',                    ha='center', va='bottom')

ax2 = fig.add_subplot(122)bar2 = ax2.barh(y=bar_x, width=means, height=bar_width, color='green', tick_label=label             )

for b in bar2:        width = b.get_width()        ax2.annotate('{}'.format(width),                    xy=(width, b.get_y() + b.get_height() / 2),                    xytext=(0, 3),  # 3 points vertical offset                    textcoords="offset points",color='red',                    ha='left', va='center')

plt.show()

7 分组柱状图

menMeans = (20, 35, 30, 35, 27)  # 男生各组平均分womenMeans = (25, 32, 34, 20, 25)# 女生各组平均分menStd = (2, 3, 4, 1, 2)  # 男生组各标准差womenStd = (3, 5, 2, 3, 3) # 女生组各标准差label = ('第一组', '第二组', '第三种', '第四组', '第五组')bar_width = 0.4bar_x = np.arange(len(label)) 

fig = plt.figure(figsize=(8, 4))

ax = fig.add_subplot(111)ax.set_title('图1 垂直柱状图')bar1 = ax.bar(x=bar_x - bar_width/2,   # 设置不同的x起始位置              height=menMeans, width=bar_width)bar2 = ax.bar(x=bar_x + bar_width/2,   # 设置不同的x起始位置              height=womenMeans, width=bar_width,        )

ax.set_xlabel('组别')ax.set_ylabel('分数')ax.set_title('各组不同性别分数')ax.set_xticks(range(5))ax.set_xticklabels(label)ax.set_yticklabels(np.arange(0, 81, 10))ax.legend((bar1, bar2), ('男生', '女生'))

plt.show()

8 堆叠柱状图

menMeans = (20, 35, 30, 35, 27)  # 男生各组平均分womenMeans = (25, 32, 34, 20, 25)# 女生各组平均分menStd = (2, 3, 4, 1, 2)  # 男生组各标准差womenStd = (3, 5, 2, 3, 3) # 女生组各标准差label = ('第一组', '第二组', '第三种', '第四组', '第五组')bar_width = 0.4bar_x = np.arange(len(label)) 

fig = plt.figure(figsize=(8, 4))

ax = fig.add_subplot(111)ax.set_title('图1 垂直柱状图')bar1 = ax.bar(x=bar_x, height=menMeans, width=bar_width)bar2 = ax.bar(x=bar_x, height=womenMeans, width=bar_width,        bottom=menMeans # 通过bottom参数设置起始位置, 起始位置就是下半部分(bar1)条形的高度        )

ax.set_xlabel('组别')ax.set_ylabel('分数')ax.set_title('各组不同性别分数')ax.set_xticks(range(5))ax.set_xticklabels(label)ax.set_yticklabels(np.arange(0, 81, 10))ax.legend((bar1, bar2), ('男生', '女生'))

plt.show()

9 直方图

直方图的绘制是通过hist()方法完成。hist()方法参数很多,来看看主要的参数:


data_x = [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124,   101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111, 78, 132, 124, 113, 150, 110, 117, 86,   95, 144, 105, 126, 130, 126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136, 123, 117, 119, 105, 137,   123, 128, 125, 104, 109, 134, 125, 127, 105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114, 105, 115,   132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134, 156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,   123, 107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133, 112, 114, 122, 109, 106, 123, 116, 131, 127,   115, 118, 112, 135, 115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154, 136, 100, 118, 119, 133, 134,   106, 129, 126, 110, 111, 109, 141, 120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126, 114, 140, 103,   130, 141, 117, 106, 114, 121, 114, 133, 137, 92, 121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113, 134,   106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110, 105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146,   133, 101, 131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111, 111, 133, 150]

fig = plt.figure(figsize=(8, 4))

ax1 = fig.add_subplot(121)hists1 = ax1.hist(x=data_x, bins=5)  # 等距划分

ax2 = fig.add_subplot(122)hists2 = ax2.hist(x=data_x,bins=[78,90,100,120,140,145,150])

plt.show()

hist()方法将会返回一个包含三个元素的数组,第一个元素为每个条形区间中元素的数量,第二个元素为区间的边界,第三个元素为Patch实例化对象。

hists1
(array([ 9., 49., 97., 77., 18.]), array([ 78. ,  93.6, 109.2, 124.8, 140.4, 156. ]),)作者:奥辰Github:https://github.com/ChenHuabin321https://www.cnblogs.com/chenhuabin

加入机器学习微信群请后台回复【入群】

推荐阅读:

彻底搞懂机器学习中的正则化

Python函数合集:足足68个内置函数请收好!机器学习中需要了解的 5 种采样方法Pandas切片操作:一个很容易忽视的错误欢迎挑战!14个数据分析和机器学习项目!附数据集复旦大学机器学习、深度学习视频公开课,附PDF课件下载阅后点在看,养成好习惯 

matplotlib 柱状图_Matplotlib数据可视化:柱状图与直方图相关推荐

  1. matplotlib 标签_matplotlib数据可视化基础设置

    matplotlib数据可视化基础 图形在jupyter notebook中显示图形 % # 中文和负号的正常显示 #plt.rcParams['font.sans-serif'] = ['Micro ...

  2. Python matplotlib模块实现数据可视化

    Python matplotlib模块实现数据可视化 代码如下: # -*- coding: utf-8 -*- import matplotlib.pyplot as plt import nump ...

  3. python matplotlib 地图_Python数据可视化,看这篇就够了

    说到python的常见应用,很多人会想到python的数据分析,作为数据分析中的表现层面,数据可视化都是其中必不可少的部分.但本文并非只推荐无任何数据分析需求仅需要做漂亮可视化图表的人学习python ...

  4. 数据可视化实验:python数据可视化-柱状图,条形图,直方图,饼图,棒图,散点图,气泡图,雷达图,箱线图,折线图

    数据可视化实验:python数据可视化 实验8-12:大数据可视化工具-python 目录 1柱状图 2条形图 3直方图 4饼图 5棒图 6散点图 7气泡图 8雷达图 9箱线图 10折线图 1柱状图 ...

  5. pyecharts数据可视化—柱状图、不堆叠柱状图、仪表盘

    ①绘制柱状图: from pyecharts.charts import Bar from pyecharts import options as optsv1 = [70, 85, 95, 64] ...

  6. python中数据可视化柱状图_python数据可视化,pyecharts柱状图绘制

    一.pyecharts简介 pyecharts主要基于Web浏览器进行显示,绘制的图形比较多,包括折线图.柱状图.饼图.漏斗图 地图和极坐标图等.使用pyecharts绘图代码量很少,但绘制的图形比较 ...

  7. python导出数据顿号做分隔符_Python语言和matplotlib库做数据可视化分析

    这是我的第51篇原创文章,关于数据可视化分析. 阅读完本文,你可以知道: 1 Python语言的可视化库-matplotlib? 2 使用matplotlib实现常用的可视化? 0前言 数据记者和信息 ...

  8. 6 Matplotlib库实现数据可视化

    6.1 Matplotlib的简述及安装 Matplotlib是Python 2D-绘图领域使用最广泛的套件.它能让使用者很轻松的将数据图形化,并且提供多样化的输出格式. 安装:Windows+R快捷 ...

  9. python动态交互图表_Python 调用 matplotlib 实现交互式数据可视化图表案例

    交互式的数据可视化图表是 New IT 新技术的一个应用方向,在过去,用户要在网页上查看数据,基本的实现方式就是在页面上显示一个表格出来,的而且确,用表格的方式来展示数据,显示的数据量会比较大,但是, ...

最新文章

  1. CVE-2010-2883 从漏洞分析到样本分析
  2. 十大python开发软件-2017年最棒的七个Python图形应用GUI开发框架
  3. java使用jsp servlet来防止csrf 攻击的实现方法
  4. 理解request.getSession(boolean create)
  5. spark中dataframe解析_Spark-SQL
  6. MyBatis的三个基本要素
  7. java后端路由中转
  8. libxml2 not found
  9. 业务需求分析师Business Analysist(BA)的职业发展之路
  10. matlabGUI入门
  11. 吴恩达老师深度学习视频课笔记:总结
  12. 安卓手机如何设置http代理?
  13. C/C++ 内使用贝塞尔函数
  14. python中参数是什么_python中parameter是什么
  15. 如何规划与实施数字化工厂?
  16. python大作业外星人入侵,python 项目1 外星人入侵总结 2021-02-25
  17. GitHub 登录失败
  18. 个人博客怎么选择域名
  19. 在AHK窗体上使用 Windows Aero 效果
  20. 【PWA】web推送技术

热门文章

  1. jpa root.join_JPA 2.1和Java EE 7中的JPQL增强功能(第1部分– JOIN ON)
  2. jvm jstat_使用jstat报告自定义JVM指标集
  3. jsp导入jstl标签库_EE JSP:使用JSTL标记库生成动态内容
  4. java8 streams_Java 8 Streams API作为友好的ForkJoinPool外观
  5. 空字符串字符串不为空_当字符串为空但不为空时
  6. java akka_用于大型事件处理的Akka Java
  7. 当HTTP状态代码不足时:处理Web API错误报告
  8. java 鲜为人知的知识点_鲜为人知的Java 8功能:广义目标类型推断
  9. 行为设计模式:中介者
  10. 通过OAuth 2.0和Okta构建具有安全的服务器到服务器通信的Spring Boot应用