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 并列条形图的更多相关文章

  1. python matplotlib.pyplot 条形图详解

    python matplotlib.pyplot 条形图详解 一.创建直方图 可以用bar函数来创建直方图 然后用show函数显示直方图 比如: import matplotlib.pyplot as ...

  2. Python 绘图与可视化 matplotlib 动态条形图 bar

    bar的参考链接:https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.bar.html 第一种办法 一种方法是每次都重新画,包括清除f ...

  3. 3.matplotlib绘制条形图

    plt.bar() # coding=utf-8 from matplotlib import pyplot as plt from matplotlib import font_manager my ...

  4. matplotlib之条形图

    1.知识点 1.plt.figure(figsize=(20,8),dpi=80)设置图像大小,主要参数为figsize(a,b) 2.plt.barh(range(len(a)),b,height= ...

  5. matplotlib系列——条形图

    import matplotlib.pyplot as plt import numpy as np import matplotlib x = ["战狼2","激情8& ...

  6. Python:matplotlib绘制条形图

    条形图,也称柱状图,看起来像直方图,但完是两码事.条形图根据不同的x值,为每个x指定一个高度y,画一个一定宽度的条形:而直方图是对数据集进行区间划分,为每个区间画条形.     将上面的代码稍微修改一 ...

  7. matplotlib画图——条形图

    一.单条 import numpy as np import matplotlib.pyplot as plt N = 5 y1 = [20, 10, 30, 25, 15] y2 = [15, 14 ...

  8. 4.4Python数据处理篇之Matplotlib系列(四)---plt.bar()与plt.barh条形图

    目录 目录 前言 (一)竖值条形图 (二)水平条形图 1.使用bar()绘制: 2.使用barh()绘制: (三)复杂的条形图 1.并列条形图: 2.叠加条形图: 3.添加图例于数据标签的条形图: 目 ...

  9. Matplotlib系列(四)--plt.bar与plt.barh条形图

    (一)竖条条形图 参数说明 参数 说明 类型 x x坐标 int,float height 条形的高度 int,float width 线条的宽度 0~1,默认是0.8 botton 条形的起始位置 ...

随机推荐

  1. 头文件string.h,cstring与string

    string.h string.h是一个C标准头文件,所有的C标准头文件都形如name.h的形式,通过#include <string.h>可以导入此头文件.之后我们就可以在程序中使用st ...

  2. Elasticsearch数据库优化实战:让你的ES飞起来

    摘要:ES已经成为了全能型的数据产品,在很多领域越来越受欢迎,本文旨在从数据库领域分析ES的使用. 本文分享自华为云社区<Elasticsearch数据库加速实践>,原文作者:css_bl ...

  3. OO_Unit4_UML模型化设计

    CSDN博客传送门 @ 目录 一.架构设计 (一)第一次作业 作业需求分析 建立类图 bug修复 (二)第二次作业 作业需求分析 建立类图 checkForUml002实现方式 checkForUml ...

  4. 要求用户输入若干员工信息,格式为: name,age,gender,salary,hiredate

    package day06; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util. ...

  5. java集合类介绍

    目录 集合类简介 List ArrayList LinkedList Vector Stack Set HashSet LinkedHashSet TreeSet Map HashMap Hashta ...

  6. docker中运行envoy 报错 cannot bind '0.0.0.0:80': Permission denied

    docker-compose文件 version: '3' services: envoy: image: envoyproxy/envoy-alpine:v1.15-latest volumes: ...

  7. 【zombie】如何查看并杀死僵尸进程?

    [zombie]如何查看并杀死僵尸进程? 赏金Micheal关注 2019.03.31 19:40:15字数 1,016阅读 4,373 僵尸进程定义 In UNIX System terminolo ...

  8. jmeter从安装到使用

    最近,项目需要做接口测试,在python和jmeter之前选择,最终还是选择jmeter,虽然脚本管理及持续集成方面有所不便,但胜在使用简单,调试方便,方便后续做并发压力测试,而且最后的报告统计图表也 ...

  9. Java JOptionPane 对话框

    如果你对 Java 控制台界面下的输入数据和打印输出结果感到有些乏味和厌倦,希望能够像其他计算机软件一样有一个 GUI 界面(图形用户界面). 那么 JOptionPane 对话框也许会让你眼前一亮, ...

  10. hard way for code

    奋斗吧骚年:https://learncodethehardway.org/ 有关linuxz命令的URL:man.linuxde.net