matplotlib 柱状图_Matplotlib数据可视化:柱状图与直方图

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

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

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

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

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

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

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

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

1 bar()与barh()

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

0eca8aeb8f311c21fbb8776be9c2278b.png

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

value= np.arange(6) ** 2
category = 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()
3da1fc9ebcd16568d3d421e29d957e57.png

3 颜色、透明度与边框

value= np.arange(6) ** 2
category = 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()
37f39d47e1803331255e48ca99c5ecf4.png

4 刻度标签

value= np.arange(6) ** 2
category = 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()
c3ae2b833c61c275af9cf782116bbb29.png

5 添加误差线

means = (20, 35, 30, 35, 27)  # 各组平均分
std = (2, 3, 4, 1, 2)  # 组各标准差
label = ('第一组', '第二组', '第三种', '第四组', '第五组')
bar_width = 0.4
bar_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()
2a80816255745262514314790de135ff.png

6 添加数据标注

means = (20, 35, 30, 35, 27)  # 各组平均分
std = (2, 3, 4, 1, 2)  # 组各标准差
label = ('第一组', '第二组', '第三种', '第四组', '第五组')
bar_width = 0.5
bar_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()
09e5ed98fe745bebf2205463555fa473.png

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.4
bar_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()
18a7d61a3c7daffa456a834277ab93f6.png

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.4
bar_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()
81dd576178968c50e601b11eb394b685.png

9 直方图

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

f9cd7558116649253a049f84a289727a.png
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()
5aab2916204d93c3e5c9158e024236ad.png

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

hists1
(array([ 9., 49., 97., 77., 18.]),
array([ 78. , 93.6, 109.2, 124.8, 140.4, 156. ]),
)

作者:奥辰
Github:https://github.com/ChenHuabin321
https://www.cnblogs.com/chenhuabin

3ec4b02908e8a62e74b7796198eab8e1.gif

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

b06d314c1a96937cfc658f0b3e334593.png

推荐阅读:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

groovy.run 脚本_Picocli 2.0:类固醇上的Groovy脚本

groovy.run 脚本Picocli 2.0增加了对其他JVM语言(尤其是Groovy)的支持。 当Groovy语言具有CliBuilder类的内置CLI支持时,为什么还要使用picocli? 您可能喜欢picocli的使用帮助,默认情况下会显示ANSI 颜色和样式 。 您…

Linux 系统服务管理和控制程序(初始化系统/Init System) -- systemd 介绍

文章目录systemd 简介systemd 启动过程概述Systemd的争议systemd 简介 开发systemd的主要目的就是减少系统引导时间和计算开销。systemd(系统管理守护进程),最开始以GNU GPL协议授权开发,现在已转为使用GNU LGPL协议,…

mongodb msi安装包_跟我快速学数据存储:MongoDB非关系型数据库

想要学习更多编程,就点上方蓝字关注我们MongoDB概述01与Redis半持久化,存储于内存和硬盘不同,MongoDB是直接持久化,存储于硬盘的缓存系统。MongoDB非常流行,其中阿里云提供了云数据库MongoDB版。https://blog.csdn.net…

php页面 info,通过PATH_INFO方法实现页面伪静态_php

/*函数url_parse用于解析url,使用时需要在前面定义define(PATH_INFO,true);需要解析时调用该函数,取值方法用回$_GET[xxx]即可*/function url_parse(){if(!(isset($_SERVER[PATH_INFO])&&defined(PATH_INFO))){return;}$url substr($_SERVER[PA…

fanuc roboguide_FANUC机器人虚拟仿真教程:Roboguide弧焊仿真工作站工装添加

Roboguide软件左侧浏览树中的“Fixture”节点专门用于添加工装资源,软件支持添加自带的库文件数模以及外部导入的CAD数模。软件支持CSB、DXF、STL、IGES、3DS等格式数模文件,一般情况下将将外部数模转换为IGES或CSB格式后进行导入效果会更好一些。本期&a…

如何在 Ubuntu 14.04 和 12.04 上测试 systemd

本来,Ubuntu决定从Ubuntu 16.04 LTS开始使用systemd来替换当前的引导过程。Ubuntu 16.04预计在2016年4月发布,但是考虑到systemd的流行和需求,刚刚发布的Ubuntu 15.04采用它作为默认引导程序。另外,Ubuntu 14.04 Trusty Tahr和Ubu…

python-opencv 最快的遍历颜色空间_居住空间设计的七种设计风格

生活中每家每户的家居样式都是不一样的,它们都是各有各的风格。在居住空间设计中,设计师会根据居住者的风格喜好来定制相应的设计方案,以及融入设计师的风格特点来创造出独特的设计风格,那么让我看看都有哪些设计风格吧。传统风格…

java更好的语言_五个使Java变得更好的功能

java更好的语言我偶然发现了Brian Goetz 提出的有关Java数据类的建议 ,立即意识到我也对如何使Java更好地成为一种语言有一些想法。 我实际上有很多,但这只是五个最重要的简短列表。 专制(2006),迈克贾奇(…

Linux 初始化系统(系统服务管理和控制程序/Init System) -- System V init(SysV init) 的简单理解

文章目录SysV init 简介SysV init 的缺点运行级别主要文件和目录的截图SysV init 简介 System V init(缩写 SysV init)是类 Unix 操作系统中传统的也是首款初始化系统。 服务配置文件(bash 脚本文件)存放在目录 /etc/init.d 下 …

java使用缓冲区读取文件_在Java中使用Google的协议缓冲区

java使用缓冲区读取文件最近发布了 有效的Java第三版 ,我一直对确定此类Java开发书籍的更新感兴趣,该书籍的最新版本仅通过Java 6进行了介绍 。 在此版本中,显然存在与Java 7 , Java 8和Java 9密切相关的全新项目,例如…

linux多用户运行同一程序_linux系统中CentOS有哪些优势,让它长盛不衰?

CentOS是目前评价和口碑都不错的linux系统,甚至很多公司安装的都是CentOS系统,对于初入门的小白可能不了解这个系统,今天我们就整理一下CentOS系统的七大优势。1. 开源、免费众所周知,不管是微软的 Windows 还是苹果的 macOS&…

浅析 Linux 初始化系统(系统服务管理和控制程序/init system) -- UpStart

文章目录一、Upstart 简介(一)开发 Upstart 的缘由(二)Upstart 的特点二、Upstart 概念和术语(一)Job(二)Job 生命周期(三)事件 Event1.Signals2.Methods3.Ho…

telnet到设备里 php_金融行业思科设备典型网络故障案例:76系列典型案例(一)...

一、Cisco 7606主备引擎自动切换01故障现象某行上联路由器cisco7606 x月x日引擎自行切换,这种情况是第一次发生,至今仍是备引擎是active,主引擎是standby。02分析过程思科TAC提取了log日志和crashinfo信息:Previous engine detect…

白盒测试方法静态分析_静态分析的教育方面

白盒测试方法静态分析加入我们项目的新程序员经常问我们是否有自动格式化工具,以使Java代码看起来完全像Qulice期望的那样。 (Quili是我们使用的静态分析器。)我总是回答说,拥有这样一个自动代码抛光器只会有害,并且不…

java javadoc_使用Java 9向Javadoc搜索添加术语

java javadoc有一个相对较旧的网页,称为“ Proposed Javadoc Tags ”,最初似乎是与Javadoc 1.2一起编写的,其中列出了“ Sun有朝一日可能会在Javadoc中实现的标签”。 在此列表中的标签是category , example , tutoria…

浅析 Linux 初始化系统(系统服务管理和控制程序/Init System) -- systemd

文章目录一、Systemd 的简介和特点(一)同 SysVinit 和 LSB init scripts 兼容(二)更快的启动速度(三)systemd 提供按需启动能力(四)Systemd 采用 Linux 的 Cgroup 特性跟踪和管理进程…

查询 service monitor 时发生内部错误_通过Service访问应用 (1)

目录通过Service访问应用通过Pod IP访问应用 通过ClusterIP Service在集群内部访问 通过Service访问应用通过之前的操作,应用部署完成了,我们的Demo网站已经成功启动了,那么如何访问网站呢?通过Pod IP访问应用我们可以通过Pod IP来…

c语言 方程改main的值_C语言编程笔记丨编写第一个C语言程序hello world,我教你哇...

如果用C语言输出:Hello,world!,该如何编写程序?**代码如下:**#include//包含标准库的信息main()//定义名为main的函数,不接受参数值{//main函数的语句都放在花括号中,也表示函数体的…

linux定时创建文件,linux下如何创建定时任务

文/PM回忆录本篇文章不详细讲述cron服务的那种配置文件,只是应用层面的讲解,只求初步的掌握。说到定时任务,不能不介绍下cron:一、cron定时任务是什么在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|gr…

6-7 使用函数输出水仙花数_「Java」再议printf函数

System.out.printf() 是在JDK1.5版开始引入的方法,即在JDK1.5以后的版本才可以使用此函数,printf 方法有 printf(String format, Object ... args) 和 printf(Locale l, String format, Object ... args) 两种重载方式。其实学过C语言的小伙伴应该会觉得…