matplotlib 并列条形图
1 绘制并列条形图,并在条形图上加标注
1.1 代码
from matplotlib import pyplot
from matplotlib import font_manager
import numpy as np
import random
# 小学期间语文和数学的成绩
x_label = ['一年级','二年级','三年级','四年级','五年级','六年级']
chinese = [random.randint(40,100) for i in range(6)]
math = [random.randint(20,100) for i in range(6)]
#x轴刻度 用数组方便数据运算
x = np.arange(len(x_label))
width = 0.3 # 条形图宽度
plt.figure(figsize=(20,8),dpi=80)
# 语文条形图
# bar(self, x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
# 将chinese的条形图向左平移半个宽度
rects1=plt.bar(x-width/2,chinese,width=width,label='语文')
# 将math的条形图向左平移半个宽度
rects2=plt.bar(x+width/2,math,width=width,label='数学')
# 添加标题、图例、网格、y轴标题、x刻度标签
my_font = font_manager.FontProperties(fname='C:/Windows/Fonts/msyh.ttc',size=10)
plt.title('小学语文和数学分数对比',fontproperties=my_font)
plt.legend(prop=my_font,loc='upper right')
plt.grid(alpha=0.4)
plt.ylabel('分数',fontproperties=my_font)
plt.xticks(x,x_label,fontproperties=my_font)
# 在条形图上加标注(水平居中)
# plt.bar()可以返回条形图的每个条形,所以前代码将各个柱形赋值给一个变量
for rect1 in rects1:
height = rect1.get_height()
plt.text(rect1.get_x()+rect1.get_width()/2,height+1,str(height),ha='center')
for rect2 in rects2:
height = rect2.get_height()
plt.text(rect2.get_x()+rect2.get_width()/2,height+1,str(height),ha='center')
plt.show()
1.2 图表展示

2 代码分解
2.1 并列条形图
在同一个绘图区内绘制两个条形图,此时两个条形图重叠在一起
为了解决重叠,调整两个条形图的x。如上图chinese条形图向左平移半个宽度,math条形图向右平移半个宽度,不用移动x轴
# 语文条形图
# bar(self, x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
# 将chinese的条形图向左平移半个宽度
rects1=plt.bar(x-width/2,chinese,width=width,label='语文')
# 将math的条形图向右平移半个宽度
rects2=plt.bar(x+width/2,math,width=width,label='数学')
2.2 中文显示
2.2.1 使用font_manager导入电脑中的字体
查看电脑支持的字体
查看Linux、Mac下支持的字体:
终端执行
fc-list
查看支持的中文:
# 冒号前有两个空格
fc-list :lang=zh
查看win下的字体:
'C:/windows/Fonts/'
#### 在代码中引入中文
```python
my_font = font_manager.FontProperties(fname='C:/Windows/Fonts/msyh.ttc',size=10)
plt.title('小学语文和数学分数对比',fontproperties=my_font)
注意
plt.title、plt.ylabel、plt.xticks等需要使用中文时,参数为fontproperties=my_font
但设置图例的时候使用中文,plt.legend中,参数为prop=my_font
2.2.2 使用rcParams引入中文
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
2.3 在条形图上加标注
plt.bar()可以返回条形图的每个条形,所以前代码将各个柱形赋值给一个变量
rects1=plt.bar(x-width/2,chinese,width=width,label='语文')
再使用for遍历每一个条形
获取到一个条形后,使用get_height()方法获取条形的高,即值
再使用plt.text加标注,text(self, x, y, s, fontdict=None, **kwargs)
注:
- get_x()获取的是条形的左侧,若要标注居中,需要在get_x()的基础上再向右移动半个宽度;
- 若标注的高仅使用get_height(),则会出现标注和条形的间隔过小,此时get_height()+1将标注往上,增加标注和条形之间的距离;
- 标注内容要求为str类型,需要将值进行转换
- 调整标注和定位点的对齐方式使用参数ha={'center','right','left'}
for rect1 in rects1:
height = rect1.get_height()
plt.text(rect1.get_x()+rect1.get_width()/2,height+1,str(height),ha='center')
matplotlib 并列条形图的更多相关文章
- python matplotlib.pyplot 条形图详解
python matplotlib.pyplot 条形图详解 一.创建直方图 可以用bar函数来创建直方图 然后用show函数显示直方图 比如: import matplotlib.pyplot as ...
- Python 绘图与可视化 matplotlib 动态条形图 bar
bar的参考链接:https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.bar.html 第一种办法 一种方法是每次都重新画,包括清除f ...
- 3.matplotlib绘制条形图
plt.bar() # coding=utf-8 from matplotlib import pyplot as plt from matplotlib import font_manager my ...
- matplotlib之条形图
1.知识点 1.plt.figure(figsize=(20,8),dpi=80)设置图像大小,主要参数为figsize(a,b) 2.plt.barh(range(len(a)),b,height= ...
- matplotlib系列——条形图
import matplotlib.pyplot as plt import numpy as np import matplotlib x = ["战狼2","激情8& ...
- Python:matplotlib绘制条形图
条形图,也称柱状图,看起来像直方图,但完是两码事.条形图根据不同的x值,为每个x指定一个高度y,画一个一定宽度的条形:而直方图是对数据集进行区间划分,为每个区间画条形. 将上面的代码稍微修改一 ...
- matplotlib画图——条形图
一.单条 import numpy as np import matplotlib.pyplot as plt N = 5 y1 = [20, 10, 30, 25, 15] y2 = [15, 14 ...
- 4.4Python数据处理篇之Matplotlib系列(四)---plt.bar()与plt.barh条形图
目录 目录 前言 (一)竖值条形图 (二)水平条形图 1.使用bar()绘制: 2.使用barh()绘制: (三)复杂的条形图 1.并列条形图: 2.叠加条形图: 3.添加图例于数据标签的条形图: 目 ...
- Matplotlib系列(四)--plt.bar与plt.barh条形图
(一)竖条条形图 参数说明 参数 说明 类型 x x坐标 int,float height 条形的高度 int,float width 线条的宽度 0~1,默认是0.8 botton 条形的起始位置 ...
随机推荐
- Solon 的过滤器 Filter 和两种拦截器 Handler、 Interceptor
在web开发中,过滤器.拦截器是经常用到的功能.它可以帮我们限制流量.验证是否登陆.记录日志以及统计执行效率等等. 今天主要交流一下 Solon 框架中的过滤器和拦截器. Solon 是什么框架? S ...
- .Net·快速查找哪一个类库引用了哪一个Package
阅文时长 | 0.18分钟 字数统计 | 348.8字符 主要内容 | 1.引言&背景 2.查找法示例 3.声明与参考资料 『.Net·快速查找哪一个类库引用了哪一个Package』 编写人 ...
- .NET程序崩溃了怎么抓 Dump ? 我总结了三种方案
一:背景 1. 讲故事 最近几天接到了几个crash的求助,可能这几个朋友没玩过怎么去生成dump,只能手把手教,感觉也不是一个办法,所以有必要总结一下,后续再有朋友咨询的话,我就可以把这篇文章丢过去 ...
- [DB] 关系型数据库
名词 数据库(database):保存有组织的数据的容器,是通过DBMS创建的容器 表(table):某种特定类型数据的结构化清单 元组(tuple):行,一条数据库记录,对应一个事物 属性(prop ...
- Linux上使用iSCSI概述
iSCSI简介 1. scsi和iscsi SCSI技术是存储设备最基本的标准协议,通常需要设备互相靠近并用SCSI总线连接,因此受到物理环境的限制 iSCSI(Internet Small Comp ...
- 第35章-CentOS7实战
补充安装软件包 yum -y install vim lrzsz bash-completion telnet nmap 关闭selinux:/etc/selinux/config 关闭防火墙:sys ...
- Centos7.4永久修改系统时间
[root@V3B01-zsy yum.repos.d]# date -s "2019-09-24 17:02:30" 2019年 09月 24日 星期二 17:02:30 CST ...
- 创建一个本地Yum 仓库,提升速度,减少带宽
1 mkdir /YUM 2 mount -t iso9660 -o loop /home/dan/Centos-7-x86_x64-DVD.iso /mnt/iso/ 3 rpm -ivh delt ...
- Centos 7常见问题——SMBus Host Controller not enabled!
在使用虚拟机Centos7操作系统偶尔会遇到,重启开机过程中出现如下图情况,无法正常开机 出现这种情况的可能原因就是你在虚拟机中添加了网卡或硬盘,还有给内存添加了容量之类就会导致开机有这种报错 解决方 ...
- SystemVerilog MCDF检测器
Monitor:检测DUT的边界信号或者内部信号,并且经过打包整理传送给其他的验证平台的组件(例如checker). 一:大的monitor方案 二:分布式的 两个monitor的比较: 比较下来,选 ...